Академический Документы
Профессиональный Документы
Культура Документы
Page 2 de 118
28/09/2005
Support de formation
Sommaire
1. Les structures de base d'un langage de programmation -------------------------- 6
1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7. La squence d'instructions--------------------------------------------------------------------------- 6 L'affectation ------------------------------------------------------------------------------------------11 la structure alternative ------------------------------------------------------------------------------13 La structure rptitive-------------------------------------------------------------------------------15 La compilation ---------------------------------------------------------------------------------------17 La dclaration des variables------------------------------------------------------------------------18 Les fonctions et procdures ------------------------------------------------------------------------21
AFPA
Page 3 de 118
28/09/2005
Support de formation
Afpa
Page 4 de 118
28/09/2005
Support de formation
AFPA
Page 5 de 118
28/09/2005
Support de formation
AFPA
Page 6 de 118
28/09/2005
Support de formation
Pour illustrer notre propos, prenons l'exemple du droulement de la journe de Buggy. Une squence d'instruction serait :
Vous voyez que l'ordre des instructions a de l'importance : "S'habiller" puis "prendre sa douche" conduit un rsultat pas gnial que nous appellerons un "bug". Cependant certaines instructions peuvent se drouler dans un ordre indiffrent: "prendre sa douche" et "prendre son petit djeuner" peuvent tre inverss sans prjudice pour le rsultat. Une alternative s'exprime par si .. sinon
Que la condition soit ralise (condition vraie) ou qu'elle ne le soit pas (condition fausse) les premires actions sont les mmes et se passent dans le mme ordre ce qui permet la simplification suivante :
Remarquez que les actions si vrai ou si faux sont dcales par rapport aux autres instructions afin de permettre une meilleure lisibilit; on parle d'indentation.
Afpa Page 7 de 118 28/09/2005
Support de formation
Pour illustrer l'itrative ou rptitive (les deux termes sont quivalents), continuons notre exemple en supposant que Buggy dont nous vivons la journe palpitante, soit un employ de banque. La routine journalire de cet employ est :
Les deux actions "Traiter client" et "Appeler client suivant" vont se rpter tant que la condition situe derrire l'instruction "Tant que" est vrifie.
Afpa
Page 8 de 118
28/09/2005
Support de formation
Afpa
Page 9 de 118
28/09/2005
Support de formation
Remarques : Faire travail tant une instruction assez complexe, elle a t dtaille dans la fonction Travail pour une meilleure lisibilit du programme. De mme, nous avons cr une fonction guichet afin de ne pas rpter la mme squence d'instructions deux fois dans le programme. Notre programme a donc t scind en deux parties : ) le corps du programme de la ligne 1 la ligne 15 ) les fonctions ou sous-programmes internes partir de la ligne 17. Comment cela se passe-t-il lorsque nous rencontrons un appel de fonction ? A la ligne 11 nous avons "Faire travail" qui indique la machine qu'elle doit aller en ligne 17 qui correspond au dbut de la fonction appele. La procdure fait les actions des lignes 18, 19 et 20. Elle trouve nouveau un appel de fonction, cette fois-ci "Faire guichet" donc elle se dbranche vers la ligne 29 et excute les instructions jusqu' la ligne 36 o se trouve "Fin fonction" se qui ramne la machine l'instruction se situant juste aprs " Faire guichet" c'est dire ligne 22. puis les actions des lignes 20, 21, 22 vont se rpter n fois jusqu' l'heure de djeuner. Ensuite, la ligne 23 est excute et nouveau il y aura rptition de faire guichet (avec dbranchement la ligne 29 et retour la ligne 26. Lorsque nous arrivons sur la ligne 27 "Fin fonction", nous retournons la ligne 12.
Afpa
Page 10 de 118
28/09/2005
Support de formation
Dans notre pseudo-langage, nous n'aurons que la liste minimum d'instructions, ncessaire et suffisante pour les programmes que nous aurons crire.
1.2. L'affectation
Ce qui se lit "variable reoit valeur" et qui signifie que nous mmorisons la valeur un endroit nomm variable. Nous pourrions aussi dire que nous rangeons une valeur dans des cases de la mmoire que nous nommons variable.
Par exemple :
Il ne faut jamais confondre valeur et variable. Une variable est caractrise par : ) une adresse c'est dire un emplacement dans la mmoire de la machine, ) un type permettant d'indiquer la nature de l'information contenue, ) ventuellement une longueur si le type ne le dfinit pas. Quand nous aurons affaire une variable numrique, nous crirons
Dans le premier exemple, nous envoyons la constante 0 dans une variable nomme nCompteur. Dans le deuxime exemple, nous envoyons le contenu de la variable nSalaireBase comme contenu de la variable nSalaire. Quand nous sommes en prsence d'une variable alphanumrique, nous crirons
Dans le premier cas, nous envoyons la constante Bonjour dans une variable nomme strMessage. "AFFICHER strMessage" donnera comme rsultat l'affichage du mot Bonjour. Dans le deuxime exemple, nous envoyons le contenu de la variable nomme Bonjour qui peut contenir BYE comme contenu de la variable strMessage. "AFFICHER strMessage" donnera comme rsultat l'affichage du mot BYE.
Afpa
Page 11 de 118
28/09/2005
Support de formation
La premire lit tous les caractres qui sont saisis au clavier, jusqu' ce que l'utilisateur appuie sur la touche entre, et range le rsultat dans la variable. La seconde affiche sur l'cran le ou les textes et la valeur des variables. exemple :
Afpa
Page 12 de 118
28/09/2005
Support de formation
Exemples : Pour avoir la valeur absolue (appele nAbsolu dans notre exemple) d'un nombre (n1 dans notre exemple), s'il est ngatif nous le multiplions par 1 sinon la valeur absolue gale le nombre :
Afpa
Page 13 de 118
28/09/2005
Support de formation
On peut combiner des conditions l'aide des oprateurs logiques suivants : exclusif)
ET OU NON XOR(ou
Lorsque l'on crit de telles conditions, il est recommand de mettre toutes les parenthses afin d'viter les erreurs car les oprateurs ont une hirarchie qui ne collera pas ncessairement avec votre logique.
Afpa
Page 14 de 118
28/09/2005
Support de formation
1.4.1. TantQue
Ce qui signifie : tant que la condition est vraie, on excute les actions. exemple :
Afpa
Page 15 de 118
28/09/2005
Support de formation
Ce qui signifie que l'on excute les actions jusqu' ce que la condition soit vraie. exemple :
1.4.3. Pour
Trs souvent, nous utilisons une structure rptitive avec un compteur et nous arrtons lorsque le compteur a atteint sa valeur finale.
C'est pourquoi la plupart des langages de programmation offrent une structure permettant d'crire cette rptitive plus simplement. Dans le pseudo-langage c'est la structure pour :
Afpa
Page 16 de 118
28/09/2005
Support de formation
1.5. La compilation
Un langage de programmation sert crire des programmes de manire les excuter. Des outils permettent de traduite le langage crit par le programmeur en langage machine. Ils fonctionnent de la manire suivante : Programme source
Compilateur Bibliothques
Fichier objet
Erreurs
diteur de liens
Fichier excutable
Le compilateur analyse le langage source afin de vrifier la syntaxe et de gnrer un fichier objet en langage intermdiaire assez proche du langage machine. Tant qu'il y a des erreurs de syntaxe, le compilateur est incapable de gnrer le fichier objet. Souvent, on utilise dans un programme des fonctions qui soit ont t crites par quelqu'un d'autre soit sont fournies dans une bibliothque (graphique par exemple). Dans ce cas, le compilateur ne les connat pas et ne peut donc pas gnrer le langage intermdiaire correspondant. C'est le travail de l'diteur de liens que d'aller rsoudre les rfrences non rsolues. C'est dire que lorsqu'il est fait appel dans le fichier objet des fonctions ou des variables externes, l'diteur de liens recherche les objets ou bibliothques concerns et gnre l'excutable. Il se produit une erreur lorsque l'diteur de liens ne trouve pas ces rfrences.
Erreurs
Afpa
Page 17 de 118
28/09/2005
Support de formation
instructions
La partie instructions contient les instructions excuter. La partie donnes contient toutes les variables utilises par le programme. Un programme excutable est charg dans la mmoire centrale de l'ordinateur, les valeurs que l'on a affectes aux variables doivent tre conserves tout le temps du droulement du programme. Par consquent, il faut que le programme soit capable de rserver la place ncessaire aux variables. Pour ce faire, les variables doivent tre dclares afin que le compilateur sache quelle place elles vont occuper.
entier : il s'agit des variables destines contenir un nombre entier positif ou ngatif.
Dans notre pseudo-langage, nous crirons la dclaration des variables de type entier :
Gnralement un entier occupe 2 octets, ce qui limite les valeurs de -32768 +32768. Cependant cela dpend des machines, des compilateurs, et des langages.
Afpa Page 18 de 118 28/09/2005
Support de formation
Certains langages distinguent les entiers courts (1 octet), les entiers longs (4 octets) et les entiers simples (2 octets).
rel : il s'agit des variables numriques qui ne sont pas des entiers, c'est dire qui comportent des
dcimales. Gnralement un nombre rel est cod sur 4 octets (voir cours sur le codage des informations). Dans notre pseudo-langage, la dclaration des variables de type rel est la suivante :
caractre : Les variables de type caractre contiennent des caractres alphabtiques ou numriques
(de 0 9), mais dans ce cas ils ne sont pas considrs comme tant des nombres et on ne peut pas faire d'oprations dessus. Un caractre occupe un octet. Dans notre pseudo-langage, une variable de type caractre se dclare ainsi :
Remarque : les chanes de caractres, dans notre langage sont des tableaux de caractres (voir 1.6.2)
boolen : Il est souvent ncessaire lorsque l'on crit un programme d'introduire des variables qui
prennent les valeurs vrai ou faux ou les valeurs oui ou non. Pour cela, il existe un type particulier dont les variables ne peuvent prendre que 2 valeurs : vrai ou faux.. Dans notre pseudo-langage, la dclaration s'crit :
Support de formation
exemple :
Le premier exemple montre la dclaration d'un tableau de 10 postes de type caractre dont les postes seront nommes mot (i) i allant de 1 10.
Afpa
Page 20 de 118
28/09/2005
Support de formation
1.7.1. Procdure
Une procdure est une suite d'instructions servant raliser une tche prcise en fonction d'un certain nombre de paramtres. Ce lot d'instructions est crit une fois dans la procdure mais peut tre excute autant de fois que voulu en appelant la procdure : on aura donc une ligne de code pour excuter n instructions. De plus une procdure peut fonctionner avec des paramtres qui sont indiqus au moment de l'appel et pris en compte dans l'excution de la procdure. Les paramtres sont de deux types. Les paramtres de type VAL : ils contiennent une valeur qui sera utilise dans la procdure. Les paramtres de type VAR : ils reprsentent une variable du programme appelant qui pourra tre lue et modifie si ncessaire. Dans notre pseudo-langage, une procdure se dclare de la manire suivante :
Les variables que nous dclarons l'intrieur de procdure ne sont connues que dans cette procdure. Elles sont d'ailleurs nommes variables locales. Pour utiliser cette procdure dans un programme appelant, on crit :
Afpa Page 21 de 118 28/09/2005
Support de formation
Cette procdure attend en entre, trois paramtres pour fonctionner. Le premier sera de type caractre, le second de type numrique entier et le troisime de type tableau de caractres Nous appellerons cette fonction comme ceci :
Dans le premier cas, nous envoyons en paramtres deux constantes et une variable : la premire constante("*")de type caractre qui sera reue dans caractre, la seconde (12) qui sera reue dans longueur et la variable (ligne) qui sera reue dans chane. Dans le deuxime appel tous les paramtres sont transmis sous forme de variables. Appel par remplir_chaine("*",12, ligne);
Appel par
Les paramtres doivent tre transmis dans l'ordre et doivent respecter le type dfini dans la procdure.
Afpa
Page 22 de 118
28/09/2005
Support de formation
1.7.2. Fonction
Une fonction est une procdure dont le but est de dterminer une valeur et de la retourner au programme appelant. Dans notre pseudo-langage, elle se dclare de la manire suivante :
Les mmes remarques que pour la procdure s'appliquent. De plus, il faut noter que la fonction retourne une valeur (ou le contenu d'une variable) et que donc la dclaration on doit indiquer son type, c'est dire le type de cette valeur. L'appel d'une fonction s'crit :
Afpa
Page 23 de 118
28/09/2005
Support de formation
2. Rgles de programmation
Un programme doit tre le plus lisible possible, de manire ce que n'importe qui d'autre que l'auteur soit capable de comprendre ce qu'il fait rien qu'en le lisant. Pour cela il faut suivre les quelques rgles suivantes :
le nom des variables doit tre significatif, c'est dire indiquer clairement quoi elles servent un algorithme ne doit pas tre trop long (une page cran). S'il est trop long, il faut le dcouper en fonctions et procdures (voir 1.7) les structures de contrle doivent tre indentes, c'est dire, par exemple, que les instructions qui suivent le alors doivent toutes tre alignes et dcales d'une tabulation par rapport au si. Il en est de mme pour les rptitives. A chaque imbrication d'une structure de contrle, on dcale d'une tabulation.
exemples :
Afpa
Page 24 de 118
28/09/2005
Support de formation
On doit toujours tre capable de donner un nom significatif une procdure ou une fonction. Le nombre de paramtres ne doit pas tre trop grand ( en gnral infrieur 5) car cela nuit la lisibilit du programme. Une procdure ou une fonction doit tre la plus gnrale possible de manire pouvoir tre rutilise dans d'autres circonstances. Si le but d'une procdure est de calculer une valeur simple, il est prfrable d'en faire une fonction. Il est souvent plus clair d'crire une fonction boolenne plutt qu'une condition complexe.
Afpa
Page 25 de 118
28/09/2005
Support de formation
3. La syntaxe du pseudo-langage
Un programme comportera ) Une partie dclaration ) Une partie encadre par dbut fin o sont dcrites les actions
Dans la partie dclarations, nous trouvons : ) dclaration de variables ) dclaration de fonction ) dclaration de procdure
Afpa
Page 26 de 118
28/09/2005
Algorithmes et structuration de programmes Dans la partie actions, nous trouvons : ) suite d'instructions ) alternative ) rptitive
Support de formation
3.1.5. Alternative :
3.1.6. Rptitive :
) Tantque ) Faire ) Pour
Afpa
Page 27 de 118
28/09/2005
Support de formation
Oprateurs logiques ET, OU, NON, XOR Oprateurs de comparaison =, <, >, <=, >=, <>
Pour exprimer une valeur, nous pouvons utiliser : ) Un nom de variable ) Une constante
Afpa
Page 28 de 118
28/09/2005
Support de formation
Dans les quelques pages qui suivent, nous vous indiquerons quelques raisonnements tenus pour arriver un pseudo code rpondant une question donne mais il s'agit de notre faon de raisonner : vous de vous construire la votre.
Pour illustrer notre discours, nous allons utiliser le problme suivant : Cet algorithme permet de ranger un lment sa place dans une liste de manire trs rapide. Nous possdons une liste de N entiers tris, nous oulons placer un nombre X au bon endroit parmi ceux dj tris. Comment ? On compare X l'lment du milieu de tableau, s'il est infrieur on rduit le tableau sa partie gauche, s'il est suprieur on rduit le tableau sa partie droite. On ritre l'opration jusqu' ce que le tableau ait moins de 3 lments.
Afpa Page 29 de 118 28/09/2005
Algorithmes et structuration de programmes Quels sont les diffrents types de cas traiter ?
Support de formation
Premier cas
Les lments de dpart sont : 2 3 3 5 6 8 12 25 26 42 53 55
25
26
42
53
55
Deuxime cas
Les lments de dpart sont : Nous voulons insrer le nombre 7 dans une liste ne comportant aucun lment Le rsultat devrait tre : 7
Troisime cas
Les lments de dpart sont : 2 3 3 5 6 8 12 25 26 42 53 55
Nous voulons insrer le nombre 1en premire case Le rsultat devrait tre : 1 2 3 3 5 6 8 12 25
26
42
53
55
Quatrime cas
Les lments de dpart sont : 2 3 3 5 6 8 12 25 26 42 53 55
Nous voulons insrer le nombre 60 qui sera en fin de liste Le rsultat devrait tre : 2 3 3 5 6 8 12 25 26 42
Afpa Page 30 de 118
53
55
60
28/09/2005
Support de formation
Afpa
Page 31 de 118
28/09/2005
Support de formation
Rsumons notre dmarche : nAInserer Soit un nombre insrer Soit 1 le dpart de notre recherche nDebut nFin Soit le nombre d'lements consuler ) nbElement prend la valeur de nFin nbElement Nous cherchons le nombre d'lments consulter nPosition Nous divisons ce nombre par 2 nPosition Si le rsultat n'est pas entier, nous arrondissons l'entier suprieur Nous comparons le nPositionime numro de la liste avec notre nombre Insrer Si ce nombre est infrieur au nombre insrer, ) nous prenons la partie droite du tableau depuis l'lment en nPosition jusqu' la fin; cela revient dire que nous changeons la position de dbut du tableau nDebut prend la valeur de nPosition. er ) autrement nous prenons la partie gauche depuis le 1 lment jusqu' l'lment en nPositio; cela revient dire que nous changeons la position de fin du tableau nFin prend la valeur de nPosition nbElement Nous cherchons le nombre d'lments restant consulter ) nbElement prend la valeur de nFin nDebut + 1 nPosition Nous divisons ce nombre par 2 nPosition Si le rsultat n'est pas entier, nous arrondissons l'entier suprieur Voyez que nous sommes en train de recommencer la dmarche telle qu'elle a t dcrite un peu au dessus. Nous sommes donc en train de rpter une mme squence de ligne ce qui veut dire que nous sommes en prsence d'une rptitive.
Afpa
Page 32 de 118
28/09/2005
Algorithmes et structuration de programmes Notre dmarche devient donc Soit un nombre insrer Soit 1 le dpart de notre recherche Soit le nombre d'lements consuler Nous cherchons le nombre d'lments consulter ) la premire fois nbElement prend la valeur de nFin
Support de formation
Nous rptons
nPosition Nous divisons ce nombre par 2 nPosition Si le rsultat n'est pas entier, nous arrondissons l'entier suprieur Nous comparons le nPositionime numro de la liste avec notre nombre Insrer Si ce nombre est infrieur au nombre insrer, ) nous prenons la partie droite du tableau depuis l'lment en nPosition jusqu' la fin; cela revient dire que nous changeons la position de dbut du tableau nDebut prend la valeur de nPosition. er ) autrement nous prenons la partie gauche depuis le 1 lment jusqu' l'lment en nPosition; cela revient dire que nous changeons la position de fin du tableau nFin prend la valeur de nPosition nbElement Nous cherchons le nombre d'lments restant consulter ) les autres fois nbElement prend la valeur de nFin nDebut + 1
Afpa
Page 33 de 118
28/09/2005
Algorithmes et structuration de programmes Notre dmarche devient donc Soit un nombre insrer Soit 1 le dpart de notre recherche Soit le nombre d'lements consuler Nous cherchons le nombre d'lments consulter ) la premire fois nbElement prend la valeur de nFin
Support de formation
nAInserer nDebut nFin nbElement
Afpa
Page 34 de 118
28/09/2005
Support de formation
A ce point du raisonnement, nous savons qu'il faut insrer 7 en 6me position Soit nPosition = 6. 7 2 3 3 5 6 8 12 25 26 42 53 55
Si nous envoyons notre nombre insrer en 6me position, nous allons "craser" la valeur qui y tait soit 8 : Notre rsultat serait alors 2 3 3 5 6 7 12 8 25 12 26 25 42 26 53 42 55 53 55
Ce qu'il faut faire c'est dcaler 8 vers la droite c'est dire la place de 12 pour mettre 7 la place 2 3 3 5 6 7 8 25 26 42 53 55 Si nous procdons ainsi nous perdons toujours un des lments initiaux. Comment faire pour ne rien perdre ? il faut commencer par la fin. 2 3 3 5 6 8 12 25 26 42 53
7 8 7 6 5 4 3 2
55
1
12
25
26
42
55
55
Traduite en franais, notre dmarche serait : Soit le nombre d'lments de la liste d'origine Dcaler toutes les valeurs de la position nFin la position nPosition vers la droite. Qui se traduit aussi par POUR n ALLANT de nFIN nPosition en faisant 1 chaque tour Prendre la valeur en position n et la mettre dans la valeur en position n+1
FINPOUR
nFin
Afpa
Page 35 de 118
28/09/2005
Algorithmes et structuration de programmes En rsum, notre dmarche est devenue : Soit un nombre insrer Soit 1 le dpart de notre recherche Soit le nombre d'lements consuler Nous cherchons le nombre d'lments consulter ) la premire fois nbElement prend la valeur de nFin
Support de formation
nAInserer nDebut nFin nbElement
Nous cherchons le nombre d'lments restant consulter ) les autres fois nbElement prend la valeur de nFin nDebut + 1
nbElement
FINSI
l'lment en position nDebut est infrieur notre nombre insrer ) La position dans laquelle nous allons insrons notre nombre insrer est nDebut + 1 ) Autrement c'est nDebut n ALLANT de nFIN nPosition en faisant 1 chaque tour Prendre la valeur en position n et la mettre dans la valeur en position n+1
POUR
FINPOUR
Afpa
Page 36 de 118
28/09/2005
Algorithmes et structuration de programmes Examinons maintenant le deuxime cas Les lments de dpart sont :
Support de formation
Nous voulons insrer le nombre 7 dans une liste ne comportant aucun lment Le rsultat devrait tre : 7 Par rapport au cas prcdant, nous nous apercevons que la recherche de la position d'insertion est inutile car il n'y a pas de liste d'lments au dpart. De mme, il ne sera pas ncessaire de faire des dcalages puisqu'il n'y a rien dcaler. Pour ce cas, la procdure sera : Soit un nombre insrer Soit 1 le dpart de notre recherche Soit le nombre d'lements consuler Nous cherchons le nombre d'lments consulter La position d'insertion est 1 Mettre la nombre insrer dans la valeur qui est en position nPosition
Afpa
Page 37 de 118
28/09/2005
Algorithmes et structuration de programmes Nous adaptons notre dmarche du premier cas Soit un nombre insrer Soit 1 le dpart de notre recherche Soit le nombre d'lements consuler Nous cherchons le nombre d'lments consulter ) la premire fois nbElement prend la valeur de nFin La position d'insertion est 1 Si nFin n'est pas zro Nous rptons TANTQUE nombre d'lments > 2 Nous divisons ce nombre par 2
Support de formation
nAInserer nDebut nFin nbElement nPosition
nPosition nPosition
Nous comparons le nPositionime numro de la liste avec notre nombre Insrer ce nombre est infrieur au nombre insrer, 9 nous prenons la partie droite du tableau depuis l'lment en nPosition jusqu' la fin; cela revient dire que nous changeons la position de dbut du tableau nDebut prend la valeur de nPosition. 9 autrement nous prenons la partie gauche depuis le 1er lment jusqu' l'lment en nPosition; cela revient dire que nous changeons la position de fin du tableau nFin prend la valeur de nPosition
FINSI
Nous cherchons le nombre d'lments restant consulter les autres fois nbElement prend la valeur de nFin nDebut + 1 Fin de la squence rpte FINTQ
SI l'lment
nbElement
nFin
Algorithmes et structuration de programmes Examinons le troisime cas Les lments de dpart sont : 2 3 3 5 6
Support de formation
12
25
26
42
53
55
Nous voulons insrer le nombre 1en premire case Le rsultat devrait tre : 1 2 3 3 5 6 8 12 25 La dmarche crite pour les deux premiers cas fonctionne Examinons le quatrime cas Les lments de dpart sont : 2 3 3 5 6
26
42
53
55
12
25
26
42
53
55
Nous voulons insrer le nombre 60 qui sera en fin de liste Le rsultat devrait tre : 2 3 3 5 6 8 12 25 26 42
53
55
60
Lorsque nous droulons la dmarche prcdemment crite, nous arrivons une anomalie. Au premier TANTQUE, les valeurs des variables sont : NDbut NFin Variable Valeur 1 12 A la fin de ce premier TANTQUE , elles valent : NDbut NFin Variable Valeur 6 12
NPosition nbElement
1
NPosition
12
nbElement
Dmarrons le premier TANTQUE, nPosition devient 7 / 4 = 3,5 ramen l'entier suprieur soit 4. Problme, car 4 n'est pas compris entre 6 et 12. il Nous faut changer le calcul de nPosition par Ce calcul devient : Nous divisons ce nombre par 2 Si le rsultat n'est pas entier, nous arrondissons l'entier suprieur Ajouter nDebut nPosition Si nous reprenons les cas prcdant, cette nouvelle dmarche fonctionne toujours.
Afpa Page 39 de 118 28/09/2005 nPosition nPosition
Algorithmes et structuration de programmes La dmarche finale est : Soit un nombre insrer Soit 1 le dpart de notre recherche Soit le nombre d'lements consuler Nous cherchons le nombre d'lments consulter La position d'insertion est 1 Si nFin n'est pas zro Nous rptons TANTQUE nombre d'lments > 2 Nous divisons ce nombre par 2
Support de formation
nAInserer nDebut nFin nbElement nPosition
nPosition nPosition
Si le rsultat n'est pas entier, nous arrondissons l'entier suprieur Ajouter nDebut 1 nPosition
ce nombre est infrieur au nombre insrer, 9 nous prenons la partie droite du tableau depuis l'lment en nPosition jusqu' la fin; cela revient dire que nous changeons la position de dbut du tableau nDebut prend la valeur de nPosition. 9 autrement nous prenons la partie gauche depuis le 1er lment jusqu' l'lment en nPosition; cela revient dire que nous changeons la position de fin du tableau nFin prend la valeur de nPosition
FINSI
Nous cherchons le nombre d'lments restant consulter les autres fois nbElement prend la valeur de nFin nDebut + 1 Fin de la squence rpte FINTQ
SI l'lment
nbElement
nFin
Support de formation
Pour chacun des entranements proposs, vous avez : ) Le sujet sur la premire page ) Un corrig possible sur la page suivante ) Eventuellement des explications complmentaires Faites-les en ne regardant pas le corrig avant; cela peut paratre une vidence mais la tentation sera grande Rsistez !!!!
5. Un peu d'entranement
5.1. L'alternative
Un patron dcide de calculer le montant de sa participation au prix du repas de ses employs de la faon suivante : S'il est clibataire S'il est mari S'il a des enfants participation de 20% participation de 25% participation de 10% supplmentaires par enfant
La participation est plafonne 50% Si le salaire mensuel est infrieur 6000f la participation est majore de 10% crire le programme qui lit les informations au clavier et affiche pour un salari, la participation laquelle il a droit. Deuxime partie de l'exercice : Corriger l'exercice prcdent pour ne pas tre oblig de relancer le programme pour chaque employ.
Afpa
Page 41 de 118
28/09/2005
Support de formation
Corrig
Afpa
Page 42 de 118
28/09/2005
Support de formation
5.2. La boucle
Autre sujet : crire un programme qui saisit des entiers et en affiche la somme et la moyenne (on arrte la saisie avec la valeur 0)
Afpa
Page 43 de 118
28/09/2005
Support de formation
Corrig
Afpa
Page 44 de 118
28/09/2005
Support de formation
Les statistiques
On saisit des entiers (comme exercice prcdent) et on les range dans un tableau (maximum 50) crire un programme qui affiche le maximum, le minimum et la valeur moyenne de ces nombres.
Afpa
Page 45 de 118
28/09/2005
Support de formation
Corrig
Afpa
Page 46 de 118
28/09/2005
Support de formation
5.3. Contraction
Recopier une phrase dans une autre en tant toutes les occurrences dun caractre Soit une phrase termine par un point. Il s'agit de la restituer en supprimant les occurrences d'un caractre donn. Exemple :
Donnez le jeu d'essai qui permet de tester cette procdure. Donnez l'algorithme de la procdure en pseudo code.
Afpa
Page 47 de 118
28/09/2005
Support de formation
Corrig
Afpa
Page 48 de 118
28/09/2005
Support de formation
5.4. Doublons
Recopier une phrase dans une autre en tant tous les doublons de caractres successifs Soit une phrase termine par un point. Il s'agit de la restituer en supprimant tous les doublons de caractres successifs. Exemple : abbcccdeeeffg. donne abcdefg.
Donnez le jeu d'essai qui permet de tester cette procdure. Pour tester le programme, c'est dire voir s'il rpond bien nos attentes, s'il n'a pas de "bug", avant de la faire "tourner" sur la machine nous imaginons un jeu d'essai avec tous les cas tester et le rsultat attendu pour chaque cas : c'est le jeu d'essai. Donnez l'algorithme de la procdure.
Afpa
Page 49 de 118
28/09/2005
Support de formation
Corrig
Jeu d'essai:
bbbbiidooooonn. donne bidon aaaaaaaaaaaaa. donne a meilleur donne meilleur Les deux derniers cas sont des cas extrmes mais dans un jeu d'essai srieux, ce sont des cas ne pas oublier Si nous voulions tre trs rigoureux, nous devrions tester que la phrase saisie se termine bien par un point. Si ce n'est pas le cas, le TANTQUE va provoquer une boucle dont nous ne sortirons jamais. Nous pourrions appeler le mouvement perptuel.
Afpa
Page 50 de 118
28/09/2005
Support de formation
5.5. Equivalence
Dterminer si deux phrases sont quivalentes. Soit deux phrases termines par un mme terminateur. Elles sont dites quivalentes si elles ont les mmes lettres dans le mme ordre mais avec un nombre d'occurrences de ces lettres qui peut diffrer entre les deux phrases. On supposera qu'il existe une fonction longueur lg de chane qui renvoie un entier Exemple : abbcccdeeeffg aabcdeffffg
sont quivalentes
Donnez le jeu d'essai qui permet de tester cette procdure. Donnez l'algorithme de la procdure toujours en pseudo code.
Afpa
Page 51 de 118
28/09/2005
Support de formation
Corrig
Afpa
Page 52 de 118
28/09/2005
Algorithmes et structuration de programmes Faisons tourner le programme la main, ligne par ligne avec les phrases : Phrase1 aabbbccddde Phrase2 : abccdeee
Support de formation
Dans le tableau qui suit, nous notons tous les changements de valeurs subies au fur et mesure de l'excution du programme. La premire colonne indique la ligne du programme o les valeurs sont notes (les valeurs sont changes une fois la ligne d'affectation passe).
N ligne 14 15 16 18 21 27 27 18 21 26 26 26 21 21 27 27 18 21 27 27 27 18 21 21 21 27 nIndice1 1 1 a 2 2 3 b 3 4 5 6 4 5 7 8 d 6 9 10 11 e 7 8 9 12 c nIndice2 StrPhrase1() StrPhrase2() StrOctet bOk vrai
Afpa
Page 53 de 118
28/09/2005
Support de formation
Il est assez fastidieux de "drouler" le programme de cette manire; Des outils appels "dboggeur" vous permettent de laisser le travail la machine. Ils permettent de : ) Faire avancer le programme "pas pas" c'est dire ligne par ligne ) Lister le contenu des variables un point d'arrt c'est dire une ligne prcise (nous vous rappelons que les valeurs ne sont modifies qu'une fois l'affectation finie; il faut donc se positionner sur la ligne aprs l'affectation pour voir la valeur prise par la variable. ) Faire avancer le programme de point d'arrt en point d'arrt ) Eventuellement de modifier les valeurs des variables : attention si vous travaillez dans un contexte aussi utilis par les utilisateurs, vous risquez de faire des btises en modifiant la base de donnes relle. Cas n 1 Phrase n 1 ccccccdddddaaaagggg Phrase n 2 cccdddggggaa Cas n 2 Phrase n 1 aaazzzeeerrty Phrase n 2 azerty Cas n 3 Phrase n 1 Immobile Phrase n 2 imobile
En effet, une lettre majuscule est diffrente d'une lettre minuscule sur un systme "casse sensitive". Elles sont quivalence sur les autres systmes.
Afpa
Page 54 de 118
28/09/2005
Support de formation
5.6. Eparpillement
Chercher les lettres dun mot parpilles dans une phrase, dans le mme ordre. Soient un caractre terminateur et une phrase termine par ce caractre terminateur. Soient un mot donn Il s'agit de vrifier si les lettres du mot sont bien prsentes dans la phrase, ce dans le mme ordre que celui du mot. Exemple :
terminateur : . phrase : le chat est gris et boit. mot : lattis longueur : 6 donne vrai
Afpa
Page 55 de 118
28/09/2005
Support de formation
Afpa
Page 56 de 118
28/09/2005
Support de formation
5.7. Inversion
Effectuer la saisie d'une chane de caractres qui contiendra un nom et un prnom. Les prnoms composs seront obligatoirement spars par des tirets. Afficher une chane de caractres sous forme prnom nom spars par un espace, en ayant fait disparatre les tirets saisis dans le prnom. Ecrire la procdure en pseudo-code (ventuellement ensuite avec un langage). Ne pas utiliser les instructions de type concatnation et recherche d'un caractre dans une chane.
Afpa
Page 57 de 118
28/09/2005
Support de formation
Afpa
Page 58 de 118
28/09/2005
Support de formation
5.8. Palindrome
Dterminer si une chane de caractres est un palindrome. Un palindrome est une phrase qui peut se lire dans les deux sens. Les espaces sont ignors. Exemple : esope reste ici et se repose. Le terminateur est ici un point. Donnez l'algorithme du programme.
Afpa
Page 59 de 118
28/09/2005
Support de formation
Corrig
Afpa
Page 60 de 118
28/09/2005
Support de formation
5.9. Cryptage
Crypter une phrase en codant les lettres en fonction du mot o elles se trouvent. Soit une phrase termine par un point. Les espaces sont des sparateurs de mot et sont transcrits sans modification. Il s'agit de la crypter en codant chaque mot suivant son rang dans la phrase. Au mot de rang 1, on crypte ses lettres avec les lettres qui suivent dans l'alphabet. Au mot de rang 2, on crypte ses lettres avec les lettres qui suivent de 2 caractres dans l'alphabet. etc ... Par convention, la lettre suivant le caractre Z est le caractre A. Les espaces sont des sparateurs de mot et sont transcrits sans modification. Exemple : Phrase : Rang : Rsultat :
1 2
Afpa
Page 61 de 118
28/09/2005
Support de formation
Corrig
Afpa
Page 62 de 118
28/09/2005
Support de formation
5.10. Comptage
Compter le nombre de mots dune phrase ayant une terminaison donne. Soit une phrase termine par un point. Les espaces sont des sparateurs de mot. Il s'agit de donner le nombre de mots de la phrase ayant pour terminaison la chane intitule terminaison. Exemple : Caractre final : . Phrase : rien ne sert de courir il faut partir point il ne faut pas rire. Terminaison : rir Rsultat : 1 Note : les terminaisons de longueur nulle indiquent la procdure qu'il faut renvoyer le nombre de mots de la phrase.
Afpa
Page 63 de 118
28/09/2005
Support de formation
Afpa
Page 64 de 118
28/09/2005
Support de formation
Afpa
Page 65 de 118
28/09/2005
Support de formation
5.11.1.
Le premier algorithme auquel on pense pour effectuer ce tri est celui-ci : on cherche le plus petit lment du tableau et on le place en 1er, puis on cherche le plus petit dans ce qui reste et on le met en second, etc... 52 10 1 25 62 3 8 55 3 1 52 10 25 62 3 8 55 3 1 3 52 10 25 62 8 55 3 1 3 3 52 10 25 62 8 55 1 3 3 8 52 10 25 62 55 1 3 3 8 10 52 25 62 55 1 3 3 8 10 23 52 25 62 1 3 3 8 10 23 25 52 62 1 3 3 8 10 23 25 52 62 1 3 3 8 10 23 25 52 55 crire l'algorithme qui permet de raliser ce tri. 23 23 23 23 23 23 55 55 55 62
Afpa
Page 66 de 118
28/09/2005
Support de formation
Afpa
Page 67 de 118
28/09/2005
Support de formation
5.11.2.
Le tri bulle
Le tri bulle est un tri plus astucieux. Son principe est de faire remonter petit petit un lment trop grand vers le haut du tableau en comparant les lments deux deux. Si l'lment de gauche est suprieur son voisin de droite on les inverse et on continue avec le suivant. Lorsque l'on est en haut du tableau on repart au dbut et on s'arrte lorsque tous les lments sont bien placs. 52 10 1 25 62 3 8 55 3 23 10 52 1 25 62 3 8 55 3 23 10 1 52 25 62 3 8 55 3 23 10 1 25 52 62 3 8 55 3 23 10 1 25 52 62 3 8 55 3 23 10 1 25 52 3 62 8 55 3 23 10 1 25 52 3 8 62 55 3 23 10 1 25 52 3 8 55 62 3 23 10 1 25 52 3 8 55 3 62 23 10 1 25 52 3 8 55 3 23 62 On a parcouru tout le tableau, on recommence, jusqu' ce que tout soit bien plac. crire l'algorithme qui ralise ce tri.
Afpa
Page 68 de 118
28/09/2005
Support de formation
Afpa
Page 69 de 118
28/09/2005
Support de formation
5.11.3.
Le tri par permutation est le tri du jeu de cartes. On parcourt le tableau jusqu' ce que l'on trouve un lment plus petit que le prcdent, donc mal plac. On prend cet lment et on le range sa place dans le tableau puis on continue la lecture. On s'arrte la fin du tableau. 52 10 1 25 62 3 8 55 3 10 52 1 25 62 3 8 55 3 1 10 52 25 62 3 8 55 3 1 10 25 52 62 3 8 55 3 1 3 10 25 52 62 8 55 3 1 3 8 10 25 52 62 55 3 1 3 8 10 25 52 55 62 3 1 3 3 8 10 25 52 55 62 1 3 3 8 10 23 25 52 55 crire l'algorithme qui ralise ce tri. 23 23 23 23 23 23 23 23 62
Afpa
Page 70 de 118
28/09/2005
Support de formation
Afpa
Page 71 de 118
28/09/2005
Support de formation
5.11.4.
Le tri par comptage consiste pour chaque lment du tableau compter combien d'lments sont plus petits que lui, grce ce chiffre on connat sa position dans le tableau rsultat.
1
0 1 3
25
6 7 8
62
9 10 10
3
1 2 23
8
3 4 25
55
8 9 52
3
1 3 55
23
5 6 62
7 8 1
Afpa
Page 72 de 118
28/09/2005
Support de formation
Afpa
Page 73 de 118
28/09/2005
Support de formation
5.11.5.
Le programme consiste saisir des mots (au maximum 10) de 20 caractres maximum et de les insrer dans un tableau dans l'ordre alphabtique. Puis d'afficher ensuite ce tableau. Le tableau rsultat est du type TABLEAU CAR [10,20].
Le tri alphabtique
Afpa
Page 74 de 118
28/09/2005
Support de formation
Afpa
Page 75 de 118
28/09/2005
Support de formation
Afpa
Page 76 de 118
28/09/2005
Support de formation
Afpa
Page 77 de 118
28/09/2005
Support de formation
Afpa
Page 78 de 118
28/09/2005
Support de formation
Afpa
Page 79 de 118
28/09/2005
Support de formation
Afpa
Page 80 de 118
28/09/2005
Support de formation
Afpa
Page 81 de 118
28/09/2005
Support de formation
Afpa
Page 82 de 118
28/09/2005
Support de formation
6.1. Alternative
Afpa
Page 83 de 118
28/09/2005
Support de formation
Afpa
Page 84 de 118
28/09/2005
Support de formation
6.2. Alternative2
Afpa
Page 85 de 118
28/09/2005
Support de formation
Afpa
Page 86 de 118
28/09/2005
Support de formation
6.3. Boucle
Afpa
Page 87 de 118
28/09/2005
Support de formation
Afpa
Page 88 de 118
28/09/2005
Support de formation
6.4. Statistiques
Afpa
Page 89 de 118
28/09/2005
Support de formation
Afpa
Page 90 de 118
28/09/2005
Support de formation
6.5. Contraction
Afpa
Page 91 de 118
28/09/2005
Support de formation
6.6. Doublons
Afpa
Page 92 de 118
28/09/2005
Support de formation
6.7. Equivalence
Afpa
Page 93 de 118
28/09/2005
Support de formation
Afpa
Page 94 de 118
28/09/2005
Support de formation
6.8. Eparpillement
Afpa
Page 95 de 118
28/09/2005
Support de formation
Afpa
Page 96 de 118
28/09/2005
Support de formation
6.9. Inversion
Afpa
Page 97 de 118
28/09/2005
Support de formation
Afpa
Page 98 de 118
28/09/2005
Support de formation
6.10. Palindrome
Afpa
Page 99 de 118
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
6.11. Cryptage
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
6.12. Comptage
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
6.13. Dichotomie
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
6.14. TriSelection
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
6.16. TriPermutation
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005
Support de formation
Afpa
28/09/2005