Vous êtes sur la page 1sur 9

Universit Sidi Mohammed Ben Abdellah

cole Suprieure de Technologie de Fs


Filire Gnie Industriel et Maintenance

TD Algorithmique (Srie I)
( Correction)

Mr KHATORY

EXERCICES UTILISANT LES STRUCTURES DE CONTROLE CONDITIONNELLES


1.

Ecrire un algorithme permettant de rsoudre une quation du second degr.


ax 2 bx c 0; solution: x

b b 2 4ac
2a

Solution1 :
ALGORITHME seconddegre
VAR a, b, c, delta: REEL
DEBUT
ECRIRE (" saisissez les valeurs a, b et c de lquation ax+bx+c=0 : ")
LIRE (a, b, c)
SI (a=0)
ALORS
ECRIRE (" quation du premier degr ")
SI (b0)
ALORS ECRIRE ("solution est ", -c/b)
SINON ECRIRE (" Pas de solution")
FINSI
SINON
Racine(x) est une fonction standard
delta b-4*a*c
SI (delta > 0)
ALORS
ECRIRE (" les solutions sont ", b racine(delta) , " et " , b racine(delta) )
2a

2a

SINON
SI (delta =0) ALORS ECRIRE ( -b/(2a))
SINON ECRIRE (" pas de solutions relles ")
FINSI
FINSI
FINSI
FIN
Solution2 : Avec selon que
ALGORITHME seconddegre
VAR a, b, c, delta: REEL
DEBUT
ECRIRE ("saisissez les valeurs de a, b et c de lquation ax+bx+c")
LIRE (a, b, c)
SI (a=0)
ALORS
ECRIRE ("quation du premier degr ")
SI (b 0 )
ALORS ECRIRE ("solution est ", -c/b)
SINON ECRIRE (" Pas de solution")
FINSI
SINON
Delta b*b-4*a*c
SELONQUE
Delta = 0 : ECRIRE (( -b/(2a))
Delta > 0 : ECRIRE (" les solutions sont ", b racine(delta) , " et " , b racine(delta) )
2a

2a

SINON ECRIRE (" pas de solution relle ")


FINSELONQUE
FINSI
FIN
_______________________________________________________________________________________
Correction TD1 Algorithme

Mr KHATORY page 1/8

2.

Ecrire un algorithme qui donne la dure de vol en heure minute connaissant l'heure de dpart et
l'heure d'arrive.
a. On considre que le dpart et l'arriv ont lieu le mme jour
b. On suppose que la dure de vol est infrieure 24 heures mais peut avoir lieu le lendemain.

Solution n 1:
ALGORITHME DureeVol1
VAR h1, h2, m1, m2: ENTIER
hr, mr : ENTIER
DEBUT
ECRIRE (" Entrer horaire de dpart : h min ")
LIRE (h1, m1)
ECRIRE (" Entrer horaire darrive: h min ")
LIRE (h2, m2)
mr [h2*60+m2] [h1*60+m1]
hr mr div 60
(* division entire*)
mr mr mod 60
(*reste de la division entire *)
ECRIRE (" La dure de vol est : ", hr , 'H : ', mr," Min")
FIN
solution n2:
ALGORITHME DureeVol2
VAR h1, h2, m1, m2 :ENTIER
hr, mr: ENTIER
DEBUT
ECRIRE (" Entrer horaire de dpart et darrive: ")
LIRE (h1, m1, h2, m2)
SI (h2 h1)
ALORS
SI (m2 m1)
ALORS
hr h2-h1
mr m2-m1
ECRIRE ("La dure de vol est :",hr," H ",mr," Min")
SINON
hr h2-h1-1
mr m2+60-m1
ECRIRE ("La dure de vol est :",hr," H ",mr," Min")
FINSI
SINON
SI (m2 m1)
ALORS
hr h2-h1+24
mr m2-m1
ECRIRE ("La dure de vol est :",hr," H ",mr," Min")
SINON
hr h2-h1+24-1
mr m2+60-m1
ECRIRE ("La dure de vol est :",hr," H ",mr," Min")
FINSI
FINSI
FIN
_______________________________________________________________________________________

Correction TD1 Algorithme

Mr KHATORY page 2/8

3.

Ecrire un algorithme qui lit trois valeurs entires ( A, B et C) et qui permet de les trier par changes
successifs Et enfin les afficher dans l'ordre

ALGORITHME TriSuccessif
VAR A, B, C : ENTIER
DEBUT
ECRIRE (" Entrer Les valeurs A , B et C trier : ")
LIRE(A,B,C)
SI (A > B )
ALORS
ECHANGE(A,B)
SI (B > C)
ALORS
ECHANGE(B,C)
SI (A > B)
ALORS
ECHANGE(A,B)
FINSI
FINSI
SINON
SI (B > C)
ALORS
ECHANGE(B,C)
SI (A >B)
ALORS
ECHANGE(A,B)
FINSI
FINSI
FINSI
ECRIRE (" Les valeurs A , B et C sont (dans l'ordre): ",A,B,C)
FIN

PROCEDURE ECHANGE(VAR A,B :ENTIER)


VAR AUX:ENTIER
DEBUT
AUX A
A B
B AUX
FIN

Correction TD1 Algorithme

Mr KHATORY page 3/8

4.

Ecrire
un
algorithme
calculatrice
permettant
la
saisie
du
premier
entier
(a) de l'opration ( + ou ou * ou / : sont des caractres) et du deuxime entier (b) et qui affiche le
rsultat.

ALGORITHME calcul
VAR a, b : ENTIER
op : CARACTERE
DEBUT
ECRIRE ("Entrer le premier oprande ")
LIRE (a)
ECRIRE ("Entrer loprateur ")
LIRE (op)
ECRIRE ("Entrer le deuxime oprande ")
LIRE (b)
SELONQUE
Op = + :
ECRIRE ("la somme de ",a, "et de ",b, "est gale",a+b)
Op = * :
ECRIRE ("le produit de ",a, "et de ",b, "est gale",a*b)
Op = / :
SI (b= 0) ALORS ECRIRE (" division impossible ")
SINON ECRIRE ("la division de ",a, "par ",b, "est gale", a/b)
FINSI
Op = - : ECRIRE ("la soustraction de ",a, "et de ",b, "est gale", a-b)
SINON ECRIRE (" Opration ",Op," non valide !!")
FINSELONQUE
FIN
_______________________________________________________________________________________

EXERCICES UTILISANT LES STRUCTURES REPETITIVES


1.

crire un algorithme qui demande un nombre de dpart, et qui calcule la somme des entiers jusqu'
ce nombre. Par exemple si l'on tape 4 , lalgorithme doit calculer: 1 + 2 + 3+ 4 = 10
Rcrire l'algorithme qui calcule cette fois la moyenne !

ALGORITHME Somme_Nombres
VAR i, S : ENTIER
val : ENTIER
DEBUT
ECRIRE("Entrer un nombre (entier):")
LIRE (val)
S0
POUR i DE 1 A val
FAIRE
S S+i
FINPOUR
ECRIRE (" La somme des nombres de 1
", val,"est gale ", S)
FIN

Correction TD1 Algorithme

ALGORITHME Moyenne_Nombres
VAR i, S : ENTIER
val :ENTIER
Moy: REEL
DEBUT
ECRIRE("Entrer un nombre (entier):")
LIRE(val)
S0;
i1
TANTQUE ( i val)
FAIRE
S S+i
i i+1
FINTANTQUE
ECRIRE (" La somme des nombres de 1 ", val,"est ", S)
Moy S / val
ECRIRE (" La moyenne des nombres de 1 ", val,"est ", Moy)
FIN

Mr KHATORY page 4/8

2.

Ecrire lalgorithme qui affiche la somme des prix d'une suite d'articles en DH (entiers) saisies par
l'utilisateur et se terminant par zro.

ALGORITHME Somme_Prix
VAR p, S : ENTIER
DEBUT
ECRIRE("ENTRER Le prix du premier article ")
LIRE (p)
S0
TANTQUE ( p0 )
FAIRE
S S+p
ECRIRE("ENTRER Le PRIX de l'article suivant ( 0 si FIN)")
LIRE (p)
FINTANTQUE
ECRIRE (" La somme des prix est ", S)
FIN

ALGORITHME Somme_Prix
VAR p, S : ENTIER
DEBUT
ECRIRE("ENTRER Le prix du premier article ")
LIRE(p)
S0
REPETER
S S+p
ECRIRE("ENTRER Le PRIX de l'article suivant ( 0 si FIN)")
LIRE(p)
JUSQU'A (p =0)
ECRIRE (" La somme des prix est ", S)
FIN

Comparaison:
Cas d'entre la boucle:
Si au dpart p= 0 choisir la boucle TANTQUE
Cas particulier (p=0):
On change l'algorithme (Boucle REPETER):
S0
REPETER
ECRIRE("ENTRER Le PRIX de l'article ( 0 si FIN)")
LIRE(p)
S S+p
JUSQU'A (p =0)
Choisir la boucle REPETER

( Problme si p < 0 !!)

3.

Ecrire un algorithme qui demande successivement 10 nombres l'utilisateur, et qui affiche la fin le
plus grand de ces 10 nombres et son rang dans la liste saisie!
Exemple :
Le plus grand de ces nombres est : 17
Entrez le nombre numro 1 : 13
C'tait le 2 me nombre saisi
Entrez le nombre numro 2 : 17
..
Entrez le nombre numro 10 : 5

Correction TD1 Algorithme

Mr KHATORY page 5/8

SOLUTION:
ALGORITHME PlusGrand_10Nombres
CONST NBRE=10
VAR
indice , val : ENTIER
Indice_grand : ENTIER
PLUSGRAND:ENTIER
DEBUT
ECRIRE ("Entrez le nombre numro 1 :")
LIRE (val)
Indice_grand1
PLUSGRANDval
indice 2
TANTQUE ( indice <= NBRE)
FAIRE
ECRIRE ("Entrez le nombre numro: ", indice)
LIRE (val)
SI val > PLUSGRAND
ALORS
Indice_grand indice
PLUSGRAND val
FINSI
Indice indice+1
FINTANTQUE
ECRIRE ("le plus grand de ces nombres est:",
PLUSGRAND)
ECRIRE (" c'tait le", indice_grand " me nombre saisi")
FIN

ALGORITHME PlusGrand _10Nombres


CONST NBRE=10
VAR indice , val : ENTIER
Indice_grand : ENTIER
PLUSGRAND:ENTIER
DEBUT
ECRIRE ("Entrez le nombre numro 1: ")
LIRE (val)
Indice_grand1
PLUSGRANDval
indice 2
REPETER
ECRIRE ("Entrez le nombre numro ", indice)
LIRE (val)
SI val > PLUSGRAND
ALORS
Indice_grand indice
PLUSGRAND val
FINSI
Indiceindice+1
JUSQU'A (indice >NBRE)
ECRIRE ("le plus grand de ces nombres est:",
PLUSGRAND)
ECRIRE (" c'tait le", indice_grand, " me nombre
saisi")
FIN

Le mme algorithme avec la boucle POUR :


ALGORITHME PlusGrand _10Nombres
CONST NBRE=10
VAR
indice , val : ENTIER
Indice_grand:ENTIER
PLUSGRAND :ENTIER
DEBUT
ECRIRE("Entrez le nombre numro 1 :")
LIRE (val)
Indice_grand1
PLUSGRANDval
indice 2
POUR indice DE 2 A NBRE
ECRIRE("Entrez le nombre numro", indice)
LIRE (val)
SI val > PLUSGRAND ALORS
Indice_grand indice
PLUSGRAND val
FINSI
FINPOUR
ECRIRE("le plus grand de ces nombres est:", PLUSGRAND)
ECRIRE(" c'tait le nombre numro :",indice_grand)
FIN

Correction TD1 Algorithme

Mr KHATORY page 6/8

4.

Ecrire un algorithme mettant en uvre le jeu suivant entre deux joueurs :


Le premier utilisateur saisi un entier que le second doit deviner. Pour cela, il a le droit autant de
tentatives qu'il souhaite. A chaque chec, le programme lui indique si l'entier est plus grand ou plus
petit que sa proposition.
Un score est affich lorsque l'entier est trouv.

ALGORITHME devinette
VAR a, n, t : ENTIER
DEBUT
ECRIRE(" Entrez le nombre deviner :")
LIRE (a)
ECRIRE("entrez votre premier essai")
LIRE (n)
t1
TANTQUE (an)
FAIRE
SI (n>a) ALORS ECRIRE (" Nombre cherch plus petit " )
SINON ECRIRE (" Nombre cherch plus grand ")
FINSI
t t+1
ECRIRE("Entrez un autre nombre (tentative N : ",t,")")
LIRE (n)
FINTANTQUE
ECRIRE ("C'est Gagn !! Nombre de tentatives est" ,t)
FIN
Avec la boucle REPETER
ALGORITHME devinette
VAR a, n, t : ENTIER
DEBUT
ECRIRE(" Entrez le nombre deviner")
LIRE (a)
t1
REPETER
ECRIRE("Entrez un nombre (tentative N : ",t,")")
LIRE (n)
SELONQUE
n>a: ECRIRE (" nombre cherch plus petit que : ",n )
n <a : ECRIRE (" nombre cherch plus grand que ",n)
n=a : ECRIRE (" c'est gagn : le nombre de tentatives est" ,t)
FINSELONQUE
t t+1
JUSQU'A (a=n)
FIN

Correction TD1 Algorithme

Mr KHATORY page 7/8

EXERCICES PROCEDURES ET FONCTIONS


1.
2.
3.

crire une fonction MAXIMUM qui permet de donner le maximum de trois nombres rels.
crire une fonction MINIMUM qui permet de donner le minimum de trois nombres rels.
crire une procedure MAX_MIN qui permet de donner le maximum et le minimum de trois
nombres rels (qui fait appel juste la fonction MAXIMUM).

4.

crire une fonction PGCD qui retourne le PGCD de deux nombres en utilisant l'astuce suivante:
soustrait le plus petit des deux entiers du plus grand jusqu' ce qu'ils soient gaux.
Ecrire la mme fonction en utilisant l'algorithme d'Euclide: Utiliser les structures TANTQUE puis
REPETER JUSQU'A
Exercices 1 ,2 et 3 voir document cours !
Exercice 4 :
FONCTION PGCD(a,b :ENTIER) :ENTIER
DEBUT
REPETER
SELONQUE
a>b : aa-b
a<b : bb-a
FINSELON
JUSQU'A (a=b)
retourner(a)
FIN
Mme programme avec Euclide et des TANT QUE :
FONCTION PGCD(a,b :ENTIER) :ENTIER
VAR r : ENTIER
DEBUT
r a%b /* reste de la division entire*/
TANTQUE (r0)
FAIRE
ab
br
r a%b
FINTANTQUE
retourner(b)
FIN
Mme programme avec Euclide et des REPETER JUSQU'A :
FONCTION PGCD(a,b :ENTIER) :ENTIER
VAR r: ENTIER
DEBUT
REPETER
r a%b
a b
br
JUSQU'A r=0
retourner(a)
FIN

Correction TD1 Algorithme

Mr KHATORY page 8/8