Vous êtes sur la page 1sur 119

ISTA.

ma
Un portail au service
de la formation professionnelle

Le Portail http://www.ista.ma
Que
ue vous soyez tudiants, stagiaires, professionnels de terrain, formateurs, ou que vous soyez tout
simplement intress(e) par les questions relatives aux formations professionnelle,
professionnelle aux mtiers,
http://www.ista.ma vous propose un contenu mis jour en permanence et richement illustr avec un suivi
quotidien de lactualit, et une varit de ressources documentaires, de supports de formation ,et de
documents en ligne ( supports de cours, mmoires, exposs, rapports de stage ) .

Le site propose aussi une multitude de conseils et des renseignements trs utiles sur tout ce qui
concerne la recherche d'un emploi ou d'un stage : offres demploi, offres de stage,
stage comment rdiger
sa lettre de motivation, comment faire son CV, comment se prparer l'entretien dembauche,
dembauche etc.
Les forums http://forum.ista.ma sont mis votre disposition, pour faire part de vos expriences,
ragir l'actualit, poser des questionnements,
question
susciter des rponses.N'hsitez
'hsitez pas interagir avec
tout ceci et apporterr votre pierre l'difice.
Notre Concept
Le portail http://www.ista.ma est bas sur un concept de gratuit intgrale du contenu & un modle
collaboratif qui favorise la culture dchange et le sens du partage entre les membres de la communaut ista.

Notre Mission
Diffusion du savoir & capitalisation des expriences.

Notre Devise
Partageons notre savoir

Notre Ambition
Devenir la plate-forme leader dans le domaine de la Formation Professionnelle.

Notre Dfi
Convaincre de plus
lus en plus de personnes pour rejoindre notre communaut et accepter de partager leur
savoir avec les autres membres.

Web Project Manager


- Badr FERRASSI : http://www.ferrassi.com
- contactez :

Afpa

Page 2 de 118

28/09/2005

Algorithmes et structuration de programmes

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

2. Rgles de programmation------------------------------------------------------------------ 24
3. La syntaxe du pseudo-langage ----------------------------------------------------------- 26
4.

Comment analyser un problme ?-------------------------------------------------------- 29

5. Un peu d'entranement --------------------------------------------------------------------- 41


5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
5.7.
5.8.
5.9.
5.10.
5.11.
5.12.
5.13.
5.14.

AFPA

L'alternative ------------------------------------------------------------------------------------------41
La boucle ---------------------------------------------------------------------------------------------43
Contraction -------------------------------------------------------------------------------------------47
Doublons----------------------------------------------------------------------------------------------49
Equivalence ------------------------------------------------------------------------------------------51
Eparpillement ----------------------------------------------------------------------------------------55
Inversion ----------------------------------------------------------------------------------------------57
Palindrome -------------------------------------------------------------------------------------------59
Cryptage ----------------------------------------------------------------------------------------------61
Comptage ---------------------------------------------------------------------------------------------63
Les tris ------------------------------------------------------------------------------------------------66
Le calcul des heures ---------------------------------------------------------------------------------77
Le jeu du pendu --------------------------------------------------------------------------------------79
Le crible d'Erathostne------------------------------------------------------------------------------82

Page 3 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

66. Quelques corrigs en langage Java ----------------------------------------------------- 83


6.1.
6.2.
6.3.
6.4.
6.5.
6.6.
6.7.
6.8.
6.9.
6.10.
6.11.
6.12.
6.13.
6.14.
6.15.
6.16.
6.17.
6.18.

Afpa

Alternative--------------------------------------------------------------------------------------------83
Alternative2 ------------------------------------------------------------------------------------------85
Boucle-------------------------------------------------------------------------------------------------87
Statistiques -------------------------------------------------------------------------------------------89
Contraction -------------------------------------------------------------------------------------------91
Doublons----------------------------------------------------------------------------------------------92
Equivalence ------------------------------------------------------------------------------------------93
Eparpillement ----------------------------------------------------------------------------------------95
Inversion ----------------------------------------------------------------------------------------------97
Palindrome -------------------------------------------------------------------------------------------99
Cryptage -------------------------------------------------------------------------------------------- 101
Comptage ------------------------------------------------------------------------------------------- 103
Dichotomie ----------------------------------------------------------------------------------------- 105
TriSelection ---------------------------------------------------------------------------------------- 108
Tri Bulle -------------------------------------------------------------------------------------------- 110
TriPermutation ------------------------------------------------------------------------------------- 112
Tri Comptage -------------------------------------------------------------------------------------- 114
Tri Alphabtique----------------------------------------------------------------------------------- 116

Page 4 de 118

28/09/2005

Algorithmes et structuration de programmes

AFPA

Support de formation

Page 5 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

1. Les structures de base d'un langage de programmation


Pour qu'un ordinateur fonctionne, il est ncessaire de lui dire quoi faire. Toute action ralise par une machine
a t programme par un tre humain (du moins pour l'instant); un ordinateur ne dcide de rien, il fait
"btement" ce qu'il lui a t programm.
Mais qu'est-ce que programmer ?
C'est crire une srie d'actions lmentaires comprhensibles par le "cerveau" de la machine, cette succession
permettant de raliser une action plus complique.
Chacune de ces actions plus compliques, tant connue de la machine, peut tre utilise comme les actions
lmentaires du dpart pour construire des actions encore plus complexes.
La machine a son propre langage appel langage machine. Il serait trop compliqu d'crire directement les
programmes en langage dit de bas niveau. Nous utilisons donc des langages dits "volus" comprhensibles
pour un initi. Ce langage sera ensuite traduit en langage machine. Malgr que les langages soient de plus
en plus proches du langage humain, ils ne sont pas directement lisibles. C'est pourquoi, dans ce qui suit, nous
allons utiliser un pseudo-langage, comportant toutes les structures de base d'un langage de programmation. Il
suffira ensuite de traduire notre "pseudo" en langage volu en fonction des possibilits de ce langage. Par
exemple, le langage Java permet plus de type d'actions qu'un langage tel que le Cobol
Un programme est donc une suite d'instructions excutes par la machine.
Ces instructions peuvent :
) soit s'enchaner les unes aprs les autres, on parle alors de squence d'instructions;
) ou bien s'excuter dans certains cas et pas dans d'autres, on parle alors de structure alternative;
) ou se rpter plusieurs fois, on parle alors de structure rptitive.

1.1. La squence d'instructions


Une instruction est une action que l'ordinateur est capable d'excuter.
Chaque langage de programmation fournit une liste des instructions qui sont implmentes et que l'on peut
donc utiliser sans les rcrire en dtail.
Structurer un programme s'effectue que le programme soit crit en C, en Java, en Visual Basic. Dans un
premier temps, nous crirons nos programmes en utilisant un pseudo-langage que nous pourrons traduire
ensuite dans l'un des langages de programmation.

AFPA

Page 6 de 118

28/09/2005

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

Support de formation

Considrons maintenant le programme complet de la journe de Buggy

Afpa

Page 9 de 118

28/09/2005

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

Support de formation

1.2.1. les oprations


Les oprations arithmtiques courantes, addition, soustraction, multiplication et division s'crivent
ainsi :

On doit toujours affecter le rsultat d'une opration dans une variable.

1.2.2. le dialogue avec l'utilisateur


Pour permettre au programme de dialoguer avec l'utilisateur, c'est dire d'afficher un rsultat
l'cran et de lire une entre au clavier, il faut au moins deux instructions une pour lire, l'autre pour
afficher.
Dans le pseudo-langage, elles s'crivent ainsi :

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

Algorithmes et structuration de programmes

Support de formation

1.3. la structure alternative


Il est souvent ncessaire lorsque nous crivons un programme de distinguer plusieurs cas conditionnant
l'excution de telles ou telles instructions. Pour ce faire, on utilise une structure alternative : si on est
dans tel cas, alors on fait cela sinon on fait ceci.
La syntaxe de cette instruction est la suivante :

Les crochets signifient que la partie "sinon actions" est facultative.

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 :

Ne faire la division que si le diviseur n2 n'est pas gal zro :

Afpa

Page 13 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

1.3.1. Les conditions


Pour exprimer les conditions on utilise les oprateurs conditionnels suivants :
=
gal
<
infrieur
>
suprieur
<= infrieur ou gal
>= suprieur ou gal
<> diffrent

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.

1.3.2. Les actions


Les actions qui suivent sinon ou alors peuvent tre :
) - une simple instruction
) - une suite d'instructions spares par des ;
) - une autre alternative
) - une rptitive

Afpa

Page 14 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

1.4. La structure rptitive


Un programme a presque toujours pour rle de rpter la mme action un certain nombre de fois.
Pour ce faire, nous utiliserons une structure permettant de dire " Excute telles actions jusqu' ce que
telle condition soit remplie".
Bien qu'une seule soit ncessaire, la plupart des langages de programmation proposent trois types de
structure rptitive.
Voici celles de notre pseudo-langage.

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

Algorithmes et structuration de programmes

Support de formation

1.4.2. Faire Jusqu'

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 :

Lorsque le PAS est omis, il est suppos gal +1.

Afpa

Page 16 de 118

28/09/2005

Algorithmes et structuration de programmes

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

Fichier
objet

Erreurs

Bibliothques

diteur de liens
Fichier
excutable

Erreurs

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.

Afpa

Page 17 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

1.6. La dclaration des variables


Un programme excutable est compos de deux parties :
donnes

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.

1.6.1. Les types de variables


Les variables que l'on utilise dans les programmes ne sont pas toutes de mme nature, il y a des
nombres, des caractres, ... On dit que les variables sont types.
Il est ncessaire de donner un type aux variables, car cela permet d'une part de contrler leur
utilisation (ex: on ne peut pas diviser un caractre par un entier) et d'autre part car cela indique quelle
place il faut rserver pour la variable.
Gnralement les langages de programmation offrent les types suivants :

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

Algorithmes et structuration de programmes

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 :

1.6.2. les tableaux


On peut regrouper plusieurs variables sous un mme nom, chacune tant alors repre par un numro.
C'est ce que l'on appelle un tableau. On peut faire un tableau avec des variables de n'importe quel
type.
Dans tous les cas le ime lment d'un tableau appel tab sera adress par tab(i).
Gnralement on fait des tableaux une dimension, mais il existe galement des tableaux deux
dimensions, dans ce cas tab(i,j) reprsente la jme colonne et la ime ligne.
Afpa

Page 19 de 118

28/09/2005

Algorithmes et structuration de programmes

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.

Dans certains langages i ira de 0 9

Afpa

Page 20 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

1.7. Les fonctions et procdures


Lorsque l'algorithme devient trop compliqu, nous avons envie de le dcouper, de manire ce que
chaque partie soit plus simple et donc plus lisible.
De mme, lorsqu'une partie de code doit tre excute plusieurs fois des endroits diffrents ou
rutilise ultrieurement on pourra ne l'crire qu'une fois et lui donner un nom en en faisant une
fonction ou une procdure.

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

Algorithmes et structuration de programmes

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);

PROCEDURE remplir_chaine (CAR caractere, ENTIER longueur,TABLEAU CAR chaine [ MAXCAR] )

Appel par

remplir_chaine(rep, longmot, message);

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

Algorithmes et structuration de programmes

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 :

Une fonction ne peut donc pas retourner un tableau.


exemples :

Nous l'utiliserons ainsi :

Afpa

Page 23 de 118

28/09/2005

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

Support de formation

En ce qui concerne les fonctions et procdures, il y a aussi des rgles respecter :

Afpa

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.

Page 25 de 118

28/09/2005

Algorithmes et structuration de programmes

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

3.1.1. Dclaration de variables :

O type peut tre: ENTIER ou REEL ou CAR ou BOOLEEN

3.1.2. Dclaration de fonction :

3.1.3. Dclaration de procdure:

Afpa

Page 26 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Dans la partie actions, nous trouvons :


) suite d'instructions
) alternative
) rptitive

3.1.4. Suite d'instructions :

3.1.5. Alternative :

3.1.6. Rptitive :
) Tantque
) Faire
) Pour

Afpa

Page 27 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

3.1.7. Pour exprimer une condition :


)
)

Oprateurs logiques ET, OU, NON, XOR


Oprateurs de comparaison =, <, >, <=, >=, <>

3.1.8. Les instructions


variable valeur
) LIRE variable
) AFFICHER [texte valeur ]
) Appel de fonction :
variable nomFonction ( param1, param2, ...) ;
) Appel de procdure
nomProcdure ( param1, param2, ...) ;
)

Pour exprimer une valeur, nous pouvons utiliser :


) Un nom de variable
) Une constante

Afpa

Page 28 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

4. Comment analyser un problme ?


Vous vous rendrez vite compte que chaque personne a un mode de
raisonnement qui lui est propre

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.

Premire tape : bien comprendre la question.


Bien souvent c'est une analyse de texte qu'il faut faire sauf si la question est trs simple.
Dans les entranements qui vous sont proposs ensuite, nous avons expliqu en quelques phrases le
besoin et nous l'avons fait suivre par un exemple :
) qu'avons-nous au dpart ?
) quel rsultat devons-nous arriver?
Cela est un dbut de dmarche
) Imaginez plusieurs points de dpart possibles.
) Pour chacun d'eux, quel est le rsultat que vous devez obtenir ?
Dans les points d'entre possible, essayez de penser aux cas extrmes.

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

Support de formation

Quels sont les diffrents types de cas traiter ?

Premier cas
Les lments de dpart sont :
2 3 3 5 6

12

25

26

42

53

55

Nous voulons insrer le nombre 7 au milieu


Le rsultat devrait tre :
2 3 3 5 6 7 8 12

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

12

25

26

Nous voulons insrer le nombre 1en premire case


Le rsultat devrait tre :
1 2 3 3 5 6 8 12
25

42

26

53

42

55

53

55

Quatrime cas
Les lments de dpart sont :
2 3 3 5 6

Afpa

12

25

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

Page 30 de 118

26

60
28/09/2005

Algorithmes et structuration de programmes

Support de formation

Deuxime tape : comment passer des lments de dpart au rsultat


Se consacrer d'abord au premier cas qui reprsente frquemment le cas le plus courant.
Puis, voir si le deuxime cas fonctionne correctement avec notre dmarche du premier cas.
Si ce n'est pas le cas, modifier la dmarche pour que le deuxime cas fonctionne correctement.
Ds que c'est fait, reprendre la dmarche avec le premier cas qui lui ne fonctionne peut-tre plus.
Puis, voir si le troisime cas fonctionne correctement avec notre dmarche.
Sinon, adapter la dmarche et re vrifier le cas 1 et le cas 2 et ainsi de suite..
Comment faire avec le premier cas ?
Les lments de dpart sont :
2 3 3 5 6 8 12 25 26 42 53 55
Nous voulons insrer le nombre 7 bien plac dans la liste
Nous devons connatre le milieu du tableau : pour cela:
) Il faut dterminer le nombre d'lments contenus au dpart
soit 12 lments
) Puis le diviser par 2 pour avoir la position de l'lment du milieu soit 6
6me lment est 8 7 est plus petit que 8 donc nous insrerons 7 dans
2
3
3
5
6
8
) Nous re divisons le nombre d'lments 6 par 2 soit 3
) .le 3me lment est 3 ==> on insre 7 dans
3
5
6
8
) Nous re divisons le nombre d'lments soit 4 par 2
) le 2me lment est 5 ==> on insre 7 dans
5
6
8
) Nous re divisons le nombre d'lments soit 3 par 2 soit 1,5 que nous arrondissons 2
) .le 2me lment est 6 infrieur 7 ==> on insre 7 entre 6 8
6
7
8

Afpa

Page 31 de 118

28/09/2005

Algorithmes et structuration de programmes

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

Support de formation

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

nAInserer
nDebut
nFin
nbElement

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

Fin de la squence rpte


A ce point de raisonnement, il faut se poser la question " rpter combien de fois?" Qu'est ce qui fait
que la rptition doit cesser? C'est une question qui demande un solide bons sens; si nous n'y
rpondons pas bien nous avons deux cueils possibles
) Nous ne rentrons jamais dans la squence d'instructions
) Nous n'en sortons jamais : c'est ce que nous appelons "boucler"; c'est le mouvement perptuel.
Dans notre exemple, nous avons termin la rptition quand notre nombre d'lments consulter est
arriv 2

Afpa

Page 33 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

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

nAInserer
nDebut
nFin
nbElement

Nous rptons TANTQUE nombre d'lments > 2


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
FINSI
nbElement
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


Nous sommes maintenant avec deux lments consulter.
Toujours en se basant sur le bon sens, nous savons que le deuxime lment est ncessairement plus
grand ou gal que le nombre insrer car quand nous coupions notre tableau en deux c'tait par un
"infrieur". Il suffit donc de comparer notre nombre insrer au premier lment.
SI 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
FINSI

Afpa

Page 34 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

A ce point du raisonnement, nous savons qu'il faut insrer 7 en 6me position


Soit nPosition = 6.
7
2

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

C'est diffrent du rsultat prvu :


2 3 3 5 6 7

12

25

26

42

53

55

12

25

26

42

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
8

12

25

26

55
1

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.

nFin

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

Mettre la nombre insrer dans la valeur qui est en position nPosition

Afpa

Page 35 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

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

nAInserer
nDebut
nFin
nbElement

Nous rptons TANTQUE nombre d'lments > 2


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
FINSI

Nous cherchons le nombre d'lments restant consulter


) les autres fois nbElement prend la valeur de nFin nDebut + 1

nbElement

Fin de la squence rpte FINTQ


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

SI

FINSI

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

Mettre la nombre insrer dans la valeur qui est en position nPosition

Afpa

Page 36 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Examinons maintenant le 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
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

nAInserer
nDebut
nFin
nbElement
nPosition

28/09/2005

Algorithmes et structuration de programmes

Support de formation

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

nAInserer
nDebut
nFin
nbElement
nPosition

Nous rptons TANTQUE nombre d'lments > 2


Nous divisons ce nombre par 2

nPosition

Si le rsultat n'est pas entier, nous arrondissons l'entier suprieur

nPosition

Nous comparons le nPositionime numro de la liste avec notre nombre Insrer


Si

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

nbElement

les autres fois nbElement prend la valeur de nFin nDebut + 1


Fin de la squence rpte FINTQ
SI l'lment

en position nDebut est infrieur notre nombre insrer

9 La position d'insertion est nDebut + 1


9 Autrement c'est nDebut
FINSI

Soit le nombre d'lements consuler


POUR n ALLANT

nFin

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
FINSI

Mettre la nombre insrer dans la valeur qui est en position nPosition


Afpa

Page 38 de 118

28/09/2005

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

Nous voulons insrer le nombre 1en premire case


Le rsultat devrait tre :
1 2 3 3 5 6 8 12
25

42

26

53

55

42

53

55

La dmarche crite pour les deux premiers cas fonctionne


Examinons le quatrime cas
Les lments de dpart sont :
2 3 3 5 6

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

NPosition

nbElement

12

A la fin de ce premier TANTQUE , elles valent :


NDbut
NFin
Variable
Valeur
6
12

NPosition

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

nPosition

Si le rsultat n'est pas entier, nous arrondissons l'entier suprieur

nPosition

Ajouter nDebut nPosition


Si nous reprenons les cas prcdant, cette nouvelle dmarche fonctionne toujours.
Afpa

Page 39 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

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

nAInserer
nDebut
nFin
nbElement
nPosition

Nous rptons TANTQUE nombre d'lments > 2


Nous divisons ce nombre par 2

nPosition

Si le rsultat n'est pas entier, nous arrondissons l'entier suprieur

nPosition

Ajouter nDebut 1 nPosition


Nous comparons le nPositionime numro de la liste avec notre nombre Insrer
Si

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

nbElement

les autres fois nbElement prend la valeur de nFin nDebut + 1


Fin de la squence rpte FINTQ
SI l'lment

en position nDebut est infrieur notre nombre insrer

9 La position d'insertion est nDebut + 1


9 Autrement c'est nDebut
FINSI

Soit le nombre d'lements consuler


POUR n ALLANT

nFin

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
FINSI

Mettre la nombre insrer dans la valeur qui est en position nPosition


Afpa

Page 40 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

5. Un peu d'entranement

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.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

Algorithmes et structuration de programmes

Support de formation

Corrig

Pour la deuxime partie de l'exercice, il faut rajouter une boucle :

Afpa

Page 42 de 118

28/09/2005

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 44 de 118

28/09/2005

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 46 de 118

28/09/2005

Algorithmes et structuration de programmes

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 :

phrase : abbcccdeeeffg
caractre : c
rsultat : abbdeeeffg

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

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 48 de 118

28/09/2005

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 52 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Faisons tourner le programme la main, ligne par ligne avec les phrases :
Phrase1 aabbbccddde
Phrase2 : abccdeee
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

Afpa

nIndice1

nIndice2

StrPhrase1() StrPhrase2()

StrOctet

bOk
vrai

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

Page 53 de 118

28/09/2005

Algorithmes et structuration de programmes

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

Rsultat phrases diffrentes

Cas n 2
Phrase n 1 aaazzzeeerrty
Phrase n 2 azerty

Rsultat phrases quivalentes

Cas n 3
Phrase n 1 Immobile
Phrase n 2 imobile

Rsultat phrases diffrentes ou quivalentes

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

Algorithmes et structuration de programmes

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

Donnez l'algorithme de la procdure en pseudo code.

Afpa

Page 55 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 56 de 118

28/09/2005

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 58 de 118

28/09/2005

Algorithmes et structuration de programmes

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

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 60 de 118

28/09/2005

Algorithmes et structuration de programmes

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 :

Afpa

LE CHAT EST GRIS .

1 2

MF EJCV HVW KVMW.

Page 61 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 62 de 118

28/09/2005

Algorithmes et structuration de programmes

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.

Ecrire la procdure en pseudo code

Afpa

Page 63 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 64 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Support de formation

Page 65 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

5.11. Les tris


Dans tous les exercices qui suivent, nous tudierons diffrents algorithmes permettant de trier un
tableau de 10 entiers.
Afin d'expliquer les algorithmes, on prendra en exemple le tableau suivant :
52 10 1 25 62 3 8 55 3 23

5.11.1.

Le tri par slection

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

23
23
23
23
23
23
55
55
55
62

crire l'algorithme qui permet de raliser ce tri.

Afpa

Page 66 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 67 de 118

28/09/2005

Algorithmes et structuration de programmes

5.11.2.

Support de formation

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

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 69 de 118

28/09/2005

Algorithmes et structuration de programmes

5.11.3.

Support de formation

Le tri par permutation

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

23
23
23
23
23
23
23
23
62

crire l'algorithme qui ralise ce tri.

Afpa

Page 70 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 71 de 118

28/09/2005

Algorithmes et structuration de programmes

5.11.4.

Support de formation

le tri par comptage

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.

nbre de plus petit


position

Afpa

52

10

25

62

55

23

7
8

4
5

0
1

6
7

9
10

1
2

3
4

8
9

1
3

5
6

10

23

25

52

55

62

Page 72 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 73 de 118

28/09/2005

Algorithmes et structuration de programmes

5.11.5.

Support de formation

Le tri alphabtique

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].

Afpa

Page 74 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 75 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Support de formation

Page 76 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

5.12. Le calcul des heures


Le programme ralise l'addition de deux donnes exprimes en HH :MM:SS et affiche le rsultat sous
la mme forme.

Afpa

Page 77 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 78 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

5.13. Le jeu du pendu


crire le programme du jeu du pendu.
Le principe est le suivant :
Un premier joueur choisit un mot de moins de 10 lettres.
Le programme affiche _ _ _ _ _ _ _ avec un _ par lettre.
Le deuxime joueur propose des lettres jusqu' ce qu'il ait trouv le mot ou qu'il soit pendu (11 erreurs
commises).
A chaque proposition le programme raffiche le mot avec les lettres dcouvertes ainsi que les lettres
dj annonces et le nombre d'erreurs.
En deuxime partie:
Rcrire le jeu du pendu en utilisant des fonctions et/ou procdures.

Afpa

Page 79 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

Corrig

Afpa

Page 80 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Support de formation

Page 81 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

5.14. Le crible d'Erathostne


Cet algorithme permet d'afficher progressivement la liste des nombres premiers infrieurs une valeur
donne : MAX.
Pour ce faire, on construit un tableau de MAX lments, vide au dpart, que l'on parcourt.
Chaque fois que la case est vide cela signifie que l'indice du tableau est un nombre premier, on
l'affiche puis on remplit avec une valeur quelconque toutes les cases du tableau indices par un multiple
de l'indice courant.
exemple pour MAX = 10
tableau au dpart = 0 0 0 0 0 0 0 0 0 0
indice :
1
1 est un nombre premier (je ne marque rien !)
2
2 est un nombre premier ==>je marque 1 pour tableau (2)
je marque 1 pour tableau (2 + 2)
je marque 1 pour tableau (2 +2 +2)
tableau = 0 1 0 1 0 1 0 1 0 1
3
3 est un nombre premier ==>je marque 1 pour tableau(3)
je marque 1 pour tableau (3 + 3)
je marque 1 pour tableau (3 +3 +3)
tableau = 0 1 1 1 0 1 0 1 1 1
4
4 n'est pas un nombre premier car il est dj 1
5
5 est un nombre premier ==> je marque etc....
crire un programme qui demande un nombre et affiche tous les nombres premiers infrieurs au nombre
donn.

Afpa

Page 82 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6. Quelques corrigs en langage Java


Remarque : ces classes programmes sont perfectibles : il y manque l'aspect contrle des informations
saisies volontairement ignor ici.
D'autre part le \r est parfois remplac par \n si Jbuilder 4 et plus.

6.1. Alternative

Afpa

Page 83 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Support de formation

Page 84 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.2. Alternative2

Afpa

Page 85 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Support de formation

Page 86 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.3. Boucle

Afpa

Page 87 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Support de formation

Page 88 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.4. Statistiques

Afpa

Page 89 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Support de formation

Page 90 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.5. Contraction

Afpa

Page 91 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.6. Doublons

Afpa

Page 92 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.7. Equivalence

Afpa

Page 93 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Support de formation

Page 94 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.8. Eparpillement

Afpa

Page 95 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Support de formation

Page 96 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.9. Inversion

Afpa

Page 97 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Support de formation

Page 98 de 118

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.10. Palindrome

Afpa

Page 99 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Page 100 de 118

Support de formation

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.11. Cryptage

Afpa

Page 101 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Page 102 de 118

Support de formation

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.12. Comptage

Afpa

Page 103 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Page 104 de 118

Support de formation

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.13. Dichotomie

Afpa

Page 105 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Page 106 de 118

Support de formation

28/09/2005

Algorithmes et structuration de programmes

Afpa

Page 107 de 118

Support de formation

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.14. TriSelection

Afpa

Page 108 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Page 109 de 118

Support de formation

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.15. Tri Bulle

Afpa

Page 110 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Page 111 de 118

Support de formation

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.16. TriPermutation

Afpa

Page 112 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Page 113 de 118

Support de formation

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.17. Tri Comptage

Afpa

Page 114 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Page 115 de 118

Support de formation

28/09/2005

Algorithmes et structuration de programmes

Support de formation

6.18. Tri Alphabtique

Afpa

Page 116 de 118

28/09/2005

Algorithmes et structuration de programmes

Afpa

Page 117 de 118

Support de formation

28/09/2005

Algorithmes et structuration de programmes

Afpa

Page 118 de 118

Support de formation

28/09/2005