Académique Documents
Professionnel Documents
Culture Documents
INTRODUCTION GENERALE
Khalidwamer
But : acqurir une mthode, des outils : dmarche a suivre dun problme a rsoudre un
programme informatique.
Domaines dapplications :
Gestion (facturation, paye,)
Informatique scientifique (mtorologie, astronomie,)
Systmes industriels (commandes numriques, robotique,)
Informatique ludique (informatique personnelle, jeux,)
Etc
Quelque soit le domaine, la dmarche de conception du programme reste identique.
Dmarche
Problme a rsoudre
Etude Pralable
Spcification des donnes et des rsultats
Spcification de fonctionnalits
Solution en langage naturel
Donnes structures / Algorithme
Programmation
Programme excutable
Test et valuation du travail ralis
Documentation
II LA NOTION DALGORITHME :
Du mathmaticien persan Al-Khwa-Rizm (Bagdad, 780 850)
Pour les notions de Al-Jabr (Algbre) thorie du calcul
Plus ancien :
Un algorithme dcrit un traitement sur un ensemble fini de donnes de nature simple (nombres ou caractres),
ou plus complexes (donnes structures)
Un algorithme est constitu dun ensemble fini dactions composes doprations ou actions lmentaires. Ces
actions lmentaires doivent tre effectives (ralisable par la machine), non ambigus.
khalidwamer
Khalidwamer
Analyse descendante : (ou programmation structures) : on dcompose un problme complexe en sous problmes et ces
sous problmes en dautres sous problmes jusqu' obtenir des problmes faciles a rsoudre c'est--dire connus.
On rsout les sous problmes simples sous forme dalgorithme puis on recompose les algorithmes pour obtenir
lalgorithme global du problme de dpart.
Garder lesprit :
La modularit : un module rsout un petit problme donn. Un module doit tre rutilisable.
Lisibilit de lalgorithme (mise en page, commentaires, spcification : dire quoi mais pas comment)
Attention la complexit de lalgorithme :
o Complexit en temps : mesure du temps dexcution en fonction de la taille des donnes
o Complexit en espace : espace mmoire ncessaire pour effectuer les traitements.
Ne pas rinventer la roue (c'est--dire ne pas refaire les programmes standard dont les solutions sont connues)
ce qui implique avoir une certaine culture et un outil technique standard
I-Introduction
Un type de donne dtermine :
- un domaine : ensemble des valeurs possibles pour les objets de ce type.
- primitives : ensembles des oprations permettant de manipuler les objets de ce type.
On distingue :
- les types lmentaires : simples (entiers, caractres,) prdfinis dans la plupart des langages de
programmation
- les types structurs : construits laide de constructeurs de types (exemple : tableaux)
- les types abstraits : rservs des structures plus volues (listes, files, arbres,)
Remarque : certains types peuvent ne pas exister (ou pas totalement). Dans ce cas, il est possible de les simuler :
- coder les objets laide des constructeurs existants (coder une liste par un tableau)
- crire les primitives sous forme dactions ou de fonctions
types lmentaires
1-LES ENTIERS
domaine [-N ; =N[ ou N dpend du nombre doctets
primitives :
- arithmtique : + - * div mod
- comparaison = <
- fonctions particulires (ValAbs,)
ATTENTION : problmes de dbordements (sortir du domaine)
khalidwamer
Khalidwamer
Primitives :
ORD : 1 entier => le caractre ayant ce code
CHR : 1 caractre => son code
A savoir :
- Si (car0) et (car9) : tester un caractre chiffre
- Car<=chr(ord(car)+ord(A)-ord(a)) : convertir une minuscule en majuscule sans avoir a connatre le codage des
lettres car les lettres sont codes conscutivement.
- Val<=ord(car)-ord(0) : rcupre la valeur dun chiffre.
Exemple : on calcule le quotient q et le reste r de la division entire de a par b par soustraction successives. 25-6=19
donc q=1 puis 19-6=13 donc q=2 puis 13-6=7 donc q=3 puis 7-6=1 donc q=4 puis 1-6 impossible donc q=4 et r=1.
Un objet va tre caractris par :
un identificateur (son nom) : pour le dsigner cet identificateur doit tre parlant : q=quotient
Un type (nature de lobjet : entier, caractre) simple ou structur. Un type dtermine en particulier les
valeurs possibles de lobjet et les oprations primitives applicable lobjet.
Une valeur (contenu de lobjet) unique. Cette valeur peut varier au cours de lalgorithme ou dune excution
lautre : ces objets sont des variables.
Dans les cas contraires (valeur fixe) ce sont des constantes. Tous les objets manipul par un algorithme doivent tre
clairement dfinis :
Mots clefs
=> const : PI=3.14
=> var a, b : entiers
x, y : caractres
a, b, x, y sont des identificateurs
khalidwamer
Khalidwamer
Actions lmentaires :
Actions lmentaires : oprations simple, directement utilisable.
1-AFFECTATION
Permet de donner une valeur une variable :
A<=28 reoit Si A avait une valeur auparavant, cette valeur disparat : elle est cras par 28
Format gnral :
<id_variable> <= <expression>
A<=28+13
A lexcution : lexpression est value (calcule) et sa valeur est range dans la variable.
Donc les types <id_variable> et <expression> doivent tre compatibles.
Attention : A<=B+3
B doit avoir une valeur. Or au dbut dune action, les variables ont une valeur indtermine/ B doit avoir t initialis.
Remarques :
La notion de littral : A<=28
28 est un objet caractris par son type (entier [numrique]), son nom (sa valeur), et sa valeur (28)
Le littral est lobjet constante , le nom est sa valeur
On note les littraux de type caractre entre quotte A.
On note les littraux de type chane de caractres entre double quotte : bonjour
Autre remarque : Lors de lcriture dun algorithme, viter les dtails de programmation au niveau des entres sorties :
par exemple on crira : crire (A, B, C)
Et non crire (Le produit de, A, par, B, vaut, C)
LALTERNATIVE SI-ALORS-SINON
Elle permet deffectuer tel ou tel traitement en fonction de la valeur dune condition.
Syntaxe :
Exemple :
Lire (note)
Si <condition>
Si note 10
Alors < action _alors>
Alors crire Bravo
Sinon < action _sinon>
Sinon crire Dsol
Remarque, la ligne Sinon <action_sinon> est facultative.
khalidwamer
Khalidwamer
Principe de fonctionnement :
1 : la condition est value
2 : Si la condition a la valeur vrai on excute <action_alors>
Si la condition a la valeur fausse on excute <action_sinon>
Remarque :
Les <action_alors> ou <action_sinon> peuvent tre soit :
- des actions lmentaires
- des composes (bloc)
Dans ce cas on utilise les structures imbriques.
Exemple de structure imbrique:
Si A10
Alors dbut
Si A10
Alors crire (oui)
Fin
Sinon crire (non)
Actions et fonctions :
Un algorithme est compos dun ensemble fini dactions. En fait, on distingue :
- les actions qui ralisent un traitement (lecture dun complexe, tri du fichier tudiant)
- les fonctions qui effectuent un calcul et retournent un rsultat
En programmation, on trouve parfois cette distinction de faon explicite. Comme en Pascal, ou lon a procedure et
functions. En revanche, en C ou C++ cette distinction nexiste pas, il ny a que des fonctions.
En algorithme, on savisera de faire cette distinction entre fonction et action, pour la simple raison que chacune ne fait
pas intervenir le mme type de variable ou de paramtres :
khalidwamer
Khalidwamer
EXEMPLE DE FONCTION :
Fonction primtre rectangle (largeur, longueur : entiers) : entier
Dbut
Retourner [ 2*(largeur+longueur)]
Fin
Maintenant, on peut crer laction qui dtermine le maximum et le minimum de trois entiers, en faisant appel la
fonction max3 :
Action max&min
Var : a, b, c, min, max : entiers
Dbut
Lire (a, b, c)
Max <= max3 (a, b, c)
Min <= -max3 (-a, -b, -c)
Ecrire (min, max)
Fin
Remarques :
X, y, z sont les paramtres formels de la fonction max3.
Ce sont des paramtres dentrs : lors de lappel de la fonction max3, les valeurs des arguments dappel (ici : a, b,
c) ou (-a, -b, -c)) sont transmises aux paramtres x, y, z en fonction de leur ordre.
khalidwamer
Structures rptitives :
Ide : rpter un ensemble doprations, arrter la rptition en fonction dune condition
a b
15 6
khalidwamer
15
1
9
Khalidwamer
STRUCTURE RPTER :
Syntaxe :
Rpter
<actions simples>
jusqu' <condition>
Fonctionnement :
1 : on excute le corps
2 : on value la condition
3 : si Vraie : on quitte le rpter
4 : si Fausse on recommence
Remarques :
Il y a toujours au moins une excution du corps. La structure rpter permet de rpter un traitement 1 ou plusieurs fois.
Pour choisir entre rpter et tant que il faut se poser la question : faut-il ventuellement ne jamais faire le traitement ? Si
oui : il faut utiliser tant que, sinon utiliser la structure rpter qui excute au moins une fois laction.
Attention, en C++ :
La structure est dowhile : cest dire Fairetant que.
Alors que la structure algorithmique est rpterjusqu'.
Cest dire quen C++ on excute laction tant que une condition est vrai alors quen algorithme on excute une action
tant que le condition est fausse, cest dire jusqu' ce que la condition inverse soit vraie.
STRUCTURE POUR :
Elle permet de parcourir un intervalle en rptant un traitement pour chacune des valeurs de cet intervalle.
Exemples :
1) Pour I de 1 5 faire Ecrire (I*I)
2) Pour I de 1 11 par pas de 3 faire Ecrire (I*I)
Syntaxe :
Pour <id_variable> DE <val_infrieure> A <val_suprieure>
[ par pas de <val_pas>]
<= facultatif
Faire <actions>
Les actions peuvent tre simples ou composes.
Fonctionnement :
1 : Automatiquement, on a id_variable <= val_infrieure
Donc, on a pas besoin dinitialiser, la structure se charge de la faire
2 : id_variable > val_suprieure ?
Si oui, alors STOP, on quitte la structure
Sinon :
- on excute le programme
- automatiquement, lincrmentation se fait (+1 ou +pas si lon a dfinit un pas particulier, par dfaut, le pas est
1)
- on remonte au dbut du 2 tester la condition id_variable > val_suprieure ?
khalidwamer
Khalidwamer
Remarques :
Il est possible que laction ne soit jamais excute.
Il est cependant possible davoir un intervalle invers condition davoir un pas ngatif.
IMPORTANT : Il est absolument interdit de modifier <id_variable>, <val_infrieure>, <val_suprieure>, <val_pas>
dans le corps de boucle.
Parfois cette structure nest pas prsente dans un langage de programmation, il faut donc retenir que ce nest quun
raccourci pour crire des tant que.
Utilisation du POUR :
On sen sert ds que lon connat au dbut de la boucle le nombre de rptitions effectuer.
Dans les cas contraire, on utilisera des TANT QUE ou des REPETER
32
-8
19
-3
T
signifie que cest un objet de type tableau.
Les numros en indices 0, 1, 2, 3, 4 correspondent aux valeurs colonnes.
Le contenu de T : les 5 entiers (dans un certain ordre)
La premire valeur est T[0] ou 0 correspond donc lindice de la premire colonne.
Dclaration dun tableau dans un algorithme :
Ctaille est la constante qui indique le nombre de case du tableau.
Const Ctaille=25
Var Tab : tableau [Ctaille] dentiers
Pour I de 0 Ctaille 1
Faire Lire tab [I]
{Cet algorithme permettra notamment de rentrer les variables dans le tableau.}
Pour crer une fonction tableau :
Fonction Mintableau (T :tableau dentiers, N entier) : entier
{pour crer la fonction Mintableau qui retournera par exemple le minimum dun tableau, on dsigne le tableau par T et
N par le nombre de colonnes, ainsi, mme si lon a dclar auparavant un tableau 50 colonnes et que lon nutilise en
fait que 30 colonnes, N=30 permet de dfinir lordinateur le nombre de colonnes rellement utilises et limiter la
dure du traitement. N est donc indpendant de Ctaille}
Exemple : dterminer si un tableau est tri :
5
12
15
PREMIRE PROPOSITION
Fonction : est tri (T : Tableau [ ] dentiers, N : entier) : boolen
Var : I : entier
Dbut :
I <= 0
Tant que (I < N-1) et (T[I] T[I+1]) faire I<=I+1
Retourner (I=N-1)
Fin
Remarque :
Il y a un problme qaudn I atteint le niveau N-1 : on value la condition I<N-1 et (T[I] T[I+1]) or la case T[I+1]
nexiste pas. Or la premire partie (I<N-1) renvoie faux : mais certains langages value quand mme la deuxime
khalidwamer
10
DEUXIME PROPOSITION :
On utilise une variable boolenne :
Fonction : Est tri
Var : I entier
Tri : boolen
Dbut
I<=0 tri<=vrai
Tant que (I<N-1) et tri
Faire
Si T[I]T[I+1] alors I<=I+1
Sinon tri<=faux
Retourner tri
Fin
khalidwamer
11
Khalidwamer
Exercices Simples
Exercice 1 :
Ecrire un algorithme dune action qui change deux variables A et B
B A
Action : Echange
Var : A, B, C : rels
Dbut : Ecrire ( Saisissez deux variables )
Lire (A, B)
C <= A
A <= B
B <= C
Ecrire ( les valeurs de , A, et de , B, ont t changes )
Fin
Exercice 2 :
Ecrire une fonction qui donne les carr dun rel
Fonction : carr (x :rel) :rel
Var : x_au_carr
Dbut
x_au_carr <= x*x
retourner x_au_carr
fin
Remarques :
Dans une fonction, la seule variable qui est dfinie est celle du rsultat, les autres sont dfinies dans la fonction mre, et
apparaissent ici en temps quentres.
Dans une fonction, ne pas oublier de retourner le rsultat.
khalidwamer
12
Khalidwamer
Exercice 4 :
Ecrire un programme qui donne la valeur absolue de 2 rels :
Action : Valeur_absolue
Var : a, b : rels
Dbut : Ecrire ( saisissez 2 rels )
Lire (A, B)
Ecrire les valeurs absolues de A et de B sont : )
Si A<0 alors crire (-A)
Sinon crire (A)
Ecrire ( et )
Si B<0 alors crire (-A)
Sinon crire (A)
Fin
Remarque : on peut aller plus vite en crant une fonction valeur absolue et en faisant appel cette fonction dans une
action :
Fonction : valAbs (x :rel) :rel
Var : absx : rel
Dbut : si x <0 alors absx <= -x
Sinon absx <= x
Retourner absx
Fin
Et
Action : Valeur_absolue2
Var : A, B rels
Dbut : Ecrire ( saisissez 2 rels )
Lire (A, B)
Ecrire ( les valeurs de A et B sont : , valAbs(A), et , valAbs(B))
Ecrire 5 :
Faire un programme qui donne le volume dun cylindre en faisant appel une fonction aire dun cercle.
Fonction : aire_cercle (rayon :rel) :rel
Var : Aire : rel
Const : PI=3.14
Dbut : Aire <= PI*rayon*rayon
Retourner (Aire)
Fin
Fonction : volume_cercle (hauteur, rayon :rels) :rel
Var : volume : rel
Dbut : Volume <=aire_cercle (rayon)*hauteur
Retourner volume
Fin
Exercice 6 :
Ecrire un algorithme permettant de rsoudre une quation du premier degr
Action : premierdegre
Var : a, b, x rels
Dbut : Ecrire ( saisissez les valeurs a et b de lquation ax+b=0 : )
Lire (a, b)
Si a = 0 alors crire ( pas de solution )
khalidwamer
13
Khalidwamer
Exercice 7 :
Ecrire un algorithme permettant de rsoudre une quation du second degr en utilisant des si alors..
Action : seconddegr
Var : a, b, c, delta
Dbut : Ecrire ( saisissez les valeurs a, b et c de lquation ax+bx+c=0 : )
Lire (a, b, c)
Si a=0 alors crire ( quation du premier degr )
Sinon delta<=b-4*a*c
Dbut
Si delta>0 alors crire ( les solutions de lquation sont , (-b-sqrt(delta))/(2*a), et , (b+sqrt(delta))/(2*a))
Sinon
Dbut
Si d=0 alors crire ( -b/(2a))
Sinon crire ( pas de solutions relles )
Fin
Fin
Fin
Ecrire le mme algorithme avec des selon-que :
Action : seconddegr
Var : a, b, c, delta
Dbut : Ecrire (saisissez les valeurs de a, b et c de lquation ax+bx+c)
Lire (a, b, c)
Si a=0 alors crire ( rsoudre permier degr )
Sinon dbut
Delta <= b-4*a*c
Selon que
Delta > 0 : crire ((-b-sqrt(delta))/(2*a), (-b+sqrt(delta))/(2*a))
Delta = 0 : crire (( -b/(2a))
Sinon crire ( pas de solution relle )
Fin selon
Fin
Exercice 8
Ecrire un algorithme qui donne la dure de vol en heure minute connaissant lheure de dpart et lheure darrive.
1) on considre que le dpart et larrive ont lieu mme jour
2) idem mais sans faire les conversions en minutes
3) on suppose que la dure de vol est infrieure 24 heures mais que larrive peut avoir lieu le lendemain.
.
--1
-2
. 24 -3
1)
Action : DureVol1
Var : h1, h2, m1, m2, hr, mr : entiers
Dbut : Ecrire ( entrer horaire de dpart et darrive )
Lire (h1, m1, h2, m2)
mr <= [h2*60+m2] [h1*60+m1]
hr <= mr/60
mr <= mr%60
Ecrire ( dure de vol : , hr, mr)
Fin
Remarque : lopration % (modulo) permet de calculer le reste de la division entire.
khalidwamer
14
Khalidwamer
2)
Action : DureVol2
Var : h1, h2, hr, m1, m2, mr : entiers
Dbut : Ecrire ( entrer horaire de dpart et darrive )
Lire (h1, m1, h2, m2)
Si m2>m1 alors
hr <= h2-h1 et mr <= m2-m1
Ecrire (hr, mr)
Sinon
hr <= h2-h1-1 et mr <= m2+60-m1
Ecrire (hr, mr)
Fin
3)
Action : DureVol3
Var : h1, h2, m1, m2, hr, mr : entiers
Dbut : Ecrire ( entrer horaire de dpart et darrive )
Lire (h1, m1, h2, m2)
Si h2>h1 alors
Si m2>m1 alors
hr <= h2-h1 et mr <= m2-m1
Ecrire (hr, mr)
Sinon
hr <= h2-h1-1 et mr <= m2+60-m1
Ecrire (hr, mr)
Sinon
Si m2>m1 alors
hr <= h2-h1+24 et mr <= m2-m1
Ecrire (hr, mr)
Sinon
hr <= h2-h1+24-1 et mr <= m2+60-m1
Ecrire (hr, mr)
Fin
Exercice 9
1) Ecrire une fonction max3 qui retourne le maximum de trois entiers
2) Ecrire une fonction min3 qui retourne le minimum de trois entiers
3) Ecrire une fonction max2 qui retourne le maximum de deux entiers
4) Ecrire une fonction max3 qui retourne le maximum de trois entiers en faisant appel max2
1)
Fonction : max3(a, b, c : entier) : entier :
Var : max3 : entier
Dbut : Si a>b alors
Si a>c alors max3 <= a
Sinon max3 <= c
Sinon
Si c>b alors max3 <= c
Sinon max3 <= b
Retourner (max3)
Fin
2)
Fonction : min3(a, b, c : entier ) : entier :
Var min3 : entier
Dbut
Retourner (max3(-a, -b, -c))
Fin
3)
Fonction : max2 (a, b : entier) : entier
khalidwamer
15
Khalidwamer
4)
Fonction : max3 (a, b, c : entier) : entier :
Var : max3 : entier
Dbut : max3 <= max2 [max2 (a, b), c)
Retourner (max3)
Fin
Exercice 10
Ecrire avec des Si Alors Sinon une action permettant la saisie dune note n (0n20) et qui affiche la mention (n16 :
Trs Bien, n 14 : Bien, n 12 : Assez Bien, n 10 : Passable, n 10 : Ajourn)
.
Action : Mention
Var Note : rel
Dbut : Ecrire ( saisissez une note )
Lire (Note)
Si Note16 alors crire ( TB )
Sinon
Si Note14 alors crire ( B )
Sinon
Si Note12 alors crire ( AB )
Sinon
Si Note10 alors crire ( Passable )
Sinon crire ( ajourn )
Fin
Alternative : crire le mme Algorithme avec des Selon Que :
Action : Note
Var : Note : rel
Selon que
Note 16 crire ( TB )
Note 14 crire ( B )
Note 12 crire ( AB )
Note 10 crire ( Passable )
Sinon crire ( ajourn )
Exercice 11
Soit lalgorithme suivant :
Action : Permis_voiture
Var : permis, voiture : boolen
Dbut : Ecrire ( avez-vous le permis ? (0/1) )
Lire (permis)
Ecrire ( avez vous une voiture ? (0/1) )
Lire (voiture)
Si non permis ou voiture alors
Si voiture alors crire ( conduisez moi la gare )
Sinon crire ( jai une voiture pas chre )
Sinon
Si voiture alors crire ( vous tes hors la loi )
Sinon crire ( vive le vlo )
fin
1) Ecrire larbre des conditionnelles
2) Corriger les tests pour que tous les cas soient couvert de manire cohrente
khalidwamer
16
Permis
Vive le vlo
Voiture pas chre
voiture
Conduisez moi la gare
Hors la loi
Khalidwamer
Ni permis ni voiture
Voiture pas chre
Vive le vlo
En clair, selon lalgorithme propos : si lon a le permis et la voiture on peut amener quelquun la gare ; si lon a que
le permis on dit vive le vlo, si lon na que la voiture on conduit aussi la gare, enfin si lon a ni permis ni voiture alors
on achte une voiture pas chre. Le cas hors la loi nest pas voqu et les correspondance sont inexactes. Il faut
videmment avoir :
- permis et voiture : conduire la gare
- permis : jai une voiture pas chre
- voiture : vous tes hors la loi
- ni voiture, ni permis : vive le vlo
Correction de lalgorithme propos :
Action : Permis_voiture
Var : permis, voiture : boolen
Dbut : Ecrire ( avez-vous le permis ? (0/1) )
Lire (permis)
Ecrire ( avez vous une voiture ? (0/1) )
Lire (voiture)
Si permis ou voiture alors
Si voiture alors crire ( conduisez moi la gare )
Sinon crire ( jai une voiture pas chre )
Sinon
Si voiture alors crire ( vous tes hors la loi )
Sinon crire ( vive le vlo )
On peut effectivement crire cet algorithme avec des selon-que :
Action : permis_voiture
Var : permis voiture : rel
Dbut : Ecrire ( avez-vous le permis ? (0/1) )
Lire (permis)
Ecrire ( avez vous une voiture ? (0/1) )
Lire (voiture)
Selon que :
Permis et voiture : crire ( conduisez moi la gare )
Permis et non voiture : crire ( jai une voiture pas chre )
Non permis et voiture : ( vous tes hors la loi )
Non permis et non voiture : ( vive le vlo )
Fin
Exercice 12
Ecrire un Algorithme calculatrice permettant la saisie de deux entiers et une opration boolen- ( +, - , / , x ) et
affichant le rsultat. Donner avant cela les spcifications, la solution en langage naturel, les structures de donnes.
.
Spcifications :
Donnes : 2 oprandes et un oprateur
Rsultat : rsultat de lopration choisie
Solution en langage naturel : Saisie des donnes, envisager tous les cas : +, - , x, /. Attention la division par zro qui
est impossible
Structure de donnes :
Algorithme :
Action : calcul
Var : a, b : rel op : boolen
khalidwamer
17
Khalidwamer
Exercice 14
Ecrire un algorithme qui affiche la moyenne dune suite dentiers se terminant par zro (le zro nentrant pas en compte
dans la moyenne : il est juste la pour indiquer la fin de saisie)
1)
2)
3)
4)
Spcification :
- donnes : suite dentier se terminant par zro
- rsultat : la moyenne de ces entiers (zro exclu)
khalidwamer
18
Khalidwamer
khalidwamer
19
Khalidwamer
khalidwamer
20
Khalidwamer
Structures de donnes :
- a : nombre saisi par lutilisateur 1
- n : nombre saisi par lutilisateur 2
- t : tentatives
Algorithme :
Action : devinette
Var : a, n, t : entiers
Dbut : Lire (a)
Lire (n)
t=0
Tant que an faire
Dbut
Si n>a alors crire ( nombre cherch plus petit )
Sinon crire ( nombre cherch plus grand )
t<=t+1
lire (n)
fin
crire (t+1)
fin
Exercice 18
Ecrire un algorithme permettant de calculer le PGCD de deux nombres en utilisant lastuce suivante : soustraite le plus
petit des deux entiers du plus grand jusqu' ce quils soient gaux
Ecrire le mme programme en utilisant lalgorithme dEuclide : dune part en utilisant uniquement les structures TANT
QUE, dautre part en utilisant uniquement les structures REPETER JUSQU'A.
Action : PGCD
Var : a, b entiers
Lire (a, b)
Dbut
a = ValAbs (a)
b = ValAbs (b)
Rpter
Selon que
a>b a<=a-b
a<b b<=b-a
jusqua a=b
crire (a)
Fin
Mme programme avec Euclide et des TANT QUE :
Action : PGCD
Var : a, b, r entiers
Lire (a, b)
r<=a%b
tant que r0 faire
dbut
a<=b
b<=r
r<=a%b
fin
crire (b)
fin
Mme programme avec Euclide et des REPETER JUSQU'A :
Action : PGCD
Var : a, b, r entiers
Lire (a, b)
Rpter r<=a%b
a<=b
khalidwamer
21
Khalidwamer
Exercice 19
Ecrire avec la commande POUR un algorithme qui permet de faire la somme dune suite de nombre entre par
lutilisateur. Faire la mme chose en comptant par pas de 1.
Action :somme_nombre
Var : k, nb, n, somme : entier
Dbut :
Somme <= 0
Ecrire ( combien voulez-vous entrer de nombres ? )
Lire (nb)
Pour k de 1 nb faire
Dbut
Lire (n)
Somme<=somme + n
Fin
Ecrire (somme)
Fin
Mme programme par pas de 1 :
Action : somme_entier
Var : k, nb, n, somme : entiers
Dbut :
Somme<=0
Ecrire ( combien voulez-vous entrer de nombres ?
Lire (nb)
Pour k de nb 1 par pas de 1 faire
Dbut
Lire (n)
Somme<=somme + n
Fin
Ecrire (somme)
Fin
Exercice 20
Traduire le POUR de lalgorithme suivant en REPETER JUSQU'A :
Action : bidon
Var : k, nb : entiers
Dbut
Lire (nb)
Pour k de 1 nb faire
Ecrire (k)
Fin
Action : Bidon
Var : k, nb : entier
Dbut
Lire (nb)
K<=1
Si nb>0 alors
Rpter crire (k)
K<=k+1
Jusqu k>nb
Fin
Exercice 21
Ecrire une fonction qui fait la somme des entiers compris dans un intervalle.
khalidwamer
22
Khalidwamer
khalidwamer
23
Khalidwamer
Exercice 25
Ecrire une fonction Afficher qui affiche a lcran le contenu dun tableau. Ecrire aussi laction principale qui permettra
de comprendre comment fonctionne cette fonction afficher.
{Ne pas oublier dindiquer les paramtres du tableau !}
Const : MAX : entier=100
Type : Ttab : Tableau [MAX] dentier
Fonction Afficher (tab : tableau dentiers, n entiers)
Var : i entier
Dbut :
Pour i de 0 n-1
Ecrire (tab[i], )
Fin
Action principale
Var t1 t2 : Ttab
Dbut
T1[0]<=1
T1[1]<=3
T2[0]<=4
T2[1]<=5
T2[2]<=7
Afficher (T1, 2)
Afficher (T2, 3)
Fin
Rsultat lcran :
13
457
Exercice 26
Ecrire une fonction qui permet la saisie dun tableau. Faite aussi laction principale qui permettra daccder a cette
fonction saisie mais aussi dafficher dans un second temps le rsultat
Fonction : saisie (Stab : tableau dentiers, N :entier)
Var : i entier
Dbut :
Pour i de 0 n-1 faire
Lire (tab[i])
Fin
Action principale
Var : tabl : Ttab
Dbut
Saisie (toto, 10)
Afficher (toto, 10)
Fin
Ou afficher est la fonction de lexercice 1.
khalidwamer
24
Khalidwamer
Exercice 27
Ecrire une fonction qui calcule le nombre dinversion dun tableau de taille n (cest dire i<j et tab[i]>tab[j] pour tout i
et j.)
Fonction inversion (tab : tableau dentiers, N entier)
Var : j, C, i entiers
Dbut
C<=0
Pour i de 0 n-2 faire
Dbut
Pour j de i+1 n-1 faire
Si tab[i]>tab[j] alors C<=C+1
Fin
Retourner ( C )
Fin
Exercice 28
Ecrire une action qui affiche les n premiers lments de la suite dfinie par u0=1 et un+1=somme de k=0 jusqu' n de
(uk*un-k)
Aide : stocker les lments dans un tableau toto avec toto[0]=1. Puis on utilise une boucle imbrique pour calculer
toto[n+1]=somme k=0 k=n de toto[k]*toto[n-k].
Action Suite (E : d :entier)
Var : toto : Ttab, i, k : entiers
Dbut :
Toto[0]<=1
Pour I de 1 d-1 faire
Toto[i]<=0
Pour k de 0 n-1 faire
Toto[i]<=toto[i]+toto[k]+toto[i-1-k]
Afficher (toto, d)
Fin
Exercice 29
Voyons maintenant quelques exercices rudimentaires de changements dans un tableau
Ecrire une action permettant de remplacer toutes les occurrences de x par y dans un tableau de taille n.
Ecrire un algorithme qui change les valeurs des cases i et j dans un tableau.
Ecrire un programme qui inverse un tableau. (exemple : 1 5 6 7 3 devient 3 7 6 5 1)
Action : Remplacer (E : x : entier, E : y : entier, ES tab : tableau dentiers, E : n : entier)
Var : i :entier
Dbut
Pour i de 0 n-1 faire
Si tab[i]=x alors tab[i]<=y
Fin
Action : Echanger (E : i : entier, E : j : entier, ES : tab : tableau dentier, E : n :entier)
Var : temp
Dbut
Si i<n ET j<n alors
Temp<=tab[i]
Tab[I]<=tab[j]
Tab[j]<=temp
Fin
Action : inverser (ES : tab : tableau dentiers, E : n : entier)
Var : i :entier
Dbut
Pour i de 0 n/2 1 faire
khalidwamer
25
Khalidwamer
Fin
2
5
7
9
Comment insrer 6 dans le tableau tri (en supposant quil ny a pas de doublon dans le tableau) ?
- je cherche la bonne position (ici : la case dindice 2)
- dcalage droite si ncessaire :
0
5
-
7
7
9
Insertion de llment
khalidwamer
26
Khalidwamer
Exercice 31
Faire un algorithme qui fait une recherche dichotomique dans un tableau tri. On pourra utiliser les fonctions de
lexercice prcdent.
Nous allons crer une action qui dfinie la zone de recherche, puis laction RechercheDicho qui oprera la recherche
dichotomique dans lintervalle dfinie par la zone de recherche.
Action ZoneRecherche (E : tvt : TtabVar, E : n : entier, ES : Binf : entier, ES : Bsup : entier)
Var : milieu : entier
Dbut
Milieu <= (Binf + Bsup)/2
Si tvt.tab[milieu]=n alors
Dbut
Binf<=milieu
Bsup<=milieu
Fin
Sinon
Si tvt.tab[milieu]>n alors Bsup<=milieu 1
Sinon Binf<=milieu+1
Fin
Fonction RechercheDicho (E : tvt : TtabVar, E : n : entier)
Var : Binf, Bsup : entiers
Dbut
Binf<=0
Bsup<=tvt.taille 1
Tant que Bsup>Binf faire
ZoneRecherche (tvt, n, Binf, Bsup)
Si Bsup=Binf alors
Retourner (Binf)
Sinon retourner ( -1)
Exercice 32
Faire un algorithme qui supprime une valeur dans un tableau tri. On pourra utiliser des fonctions des deux exercices
prcdents.
Le but est dutiliser la recherche dichotomique de lexercice prcdent pour trouver dans le tableau lindice de la valeur
que lon veut supprimer puis faire un dcalage gauche pour remettre en place les valeurs (sans quil y ait de vide dans
une case du tableau)
Action Supprimer (ES : tvt : TtabVar, E : n : entier)
Var : i : entier
Dbut
i<=RechercheDicho(tvt, n)
Si i -1 alors
DecalageGauche (tvt, i)
Fin
Action DecalageGauche (Es : tvt : TtabVar, E : i : entier)
Var : j: entier
Dbut
Pour j de i+1 tvt.taille 1 faire
Tvt.tab[j 1] <= tvt.tab[j]
Tvt.taille <= tvt.taille 1
Fin
khalidwamer
27