Beruflich Dokumente
Kultur Dokumente
TD Algorithmique (Srie I)
( Correction)
Mr KHATORY
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
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
_______________________________________________________________________________________
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
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
_______________________________________________________________________________________
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
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
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
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
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
4.
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
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