Correction TD 4 : S´eparation de code et fonctions
Licence 1 MASS semestre 2, 2007/2008
Exercice 1 : Utilisation de param` etres
a- Algorithme Est Rectangle(a,b,c: r´eel) : bool´een d´ebut
retourner((a2=b2+c2)ou (b2=a2+c2)ou (c2=a2+b2)) fin
b- Algorithme Hypoth´enuse(a,b : r´eel) : r´eel d´ebut
retourner√ a2+b2 fin
c- Notons la pr´esence d’un accumulateurs, variable dans laquelle on additionne it´eration apr`es it´eration tous les nombres `a sommer. On n’oublie pas d’initialiser cet accumulateur avec une valeur neutre pour l’addition : le 0 ...
Algorithme Somme Cube 4 27() : entier variable s,i: entier
d´ebut s←0
pouride 4`a 27faire s←s+i3
fin pour retourners fin
d- Il s’agit du mˆeme algorithme pour la question pr´ec´edente, il suffit juste de donner les bons param`etres
!
Algorithme Somme Cube(d, f : entier) : entier variable s,i: entier
d´ebut s←0
pouride d`a f faire s←s+i3
fin pour retourners fin
Ensuite il suffit de faire deux petits algorithmes tous simples : Algorithme Somme Cube 4 27() : entier
d´ebut
retournerSomme Cube(4, 27) fin
Algorithme Somme Cube 7 18() : entier d´ebut
retournerSomme Cube(7, 18) fin
Exercice 2 : Maximum
a- Algorithme Maximum 2(a,b: r´eel) : r´eel d´ebut
sia > balors retourner a sinon
retourner b fin si
fin
b- On va faire deux tests en tout.
Algorithme Maximum 3(a,b,c : r´eel) : r´eel variable d: r´eel
d´ebut
d←Maximum 2(a,b) sid < calors
retourner c sinon
retourner d fin si
fin
Une autre solution :
Algorithme Maximum 3bis(a,b, c: r´eel) : r´eel d´ebut
retournerMaximum 2(Maximum 2(a,b),c) fin
c- On va faire trois tests en tout.
Algorithme Maximum 4(a,b,c,d: r´eel) : r´eel variable e,f : r´eel
d´ebut
e←Maximum 2(a,b) f ←Maximum 2(c, d) sif < ealors
retourner e sinon
retourner f fin si
fin
Une autre solution :
Algorithme Maximum 4(a,b,c,d: r´eel) : r´eel d´ebut
retournerMaximum 2(Maximum 2(a,b), Maximum 2(c,d)) fin
d- Seuls quatre tests suffisent, il y a plusieurs fa¸cons de faire, par exemple, on utilise la question a- :
Algorithme Maximum 5(a,b,c,d, e: r´eel) : r´eel d´ebut
retournerMaximum 2(Maximum 2(Maximum 2(a,b), Maximum 2(c,d)),e) fin
Exercice 3 : Pyramide de chiffres
a- Algorithme Chiffres(n,p: entier) :
variable i: entier d´ebut
pour ide p`a p+nfaire
´
ecrire(modulo(i, 10)) fin pour
fin
b- Algorithme Pyramide Descente(n: entier) : variable i: entier
d´ebut
pouride 1`a nfaire Chiffres(i,0)
retourLigne() fin pour fin
c- Algorithme Espace(n: entier) : variable i: entier
d´ebut
pouride 1`a nfaire
´
ecrire(” ”) fin pour fin
d- Rappel : avant d’´ecrire un algorithme on doit se demander ce qu’il fait pr´ecisement, ici ¸ca consiste `a calculer en fonction du num´ero de la ligne combien il doit y avoir d’espaces et de chiffres sur la ligne ...
Algorithme Pyramide Ascendente(n: entier) : variable i: entier
d´ebut
pouride 1`a nfaire Espace(n−i) Chiffres(i, 0) retourLigne() fin pour fin
e- Algorithme Pyramide(n: entier) : variable i: entier
d´ebut
pouride 1`a nfaire Espace(n−i) Chiffres(2i−1, 0) retourLigne() fin pour fin
Exercice 4 : Somme de s´ erie
a- Algorithme U12() : r´eel variable i: entier;u: r´eel d´ebut
u←1
pour ide 1`a 12faire u← 12u+ 2
fin pour retourner u fin
b- Algorithme U100() : r´eel variable i: entier;u: r´eel d´ebut
u←1
pour ide 1`a 100faire u← 12u+ 2
fin pour retourner u fin
Il en fait plus simple de mettre le num´ero du terme que l’on veut calculer en param`etre ...
Algorithme Un(n: entier) : r´eel variable i: entier;u: r´eel d´ebut
u←1
pour ide 1`a nfaire u← 12u+ 2
fin pour retourner u fin
c- Dans cette question on a besoin d’un accumulateur pour stocker la somme comme dans l’exercice 1. On n’oublie bien sur pas d’initialiser cet accumulateur, ici `a u= 1 car c’est le terme 0 de la suite mais la boucle pour commence au terme 1 ...
Algorithme Sun(n: entier) : r´eel variable i: entier;s,u: r´eel d´ebut
u←1 s←u
pour ide 1`a nfaire u← 12u+ 2
s←s+u fin pour retourner s fin
d- On refait tout pareil ...
a- Algorithme V12() : r´eel variable i : entier;v : r´eel d´ebut
v ←1
pour ide 1`a 12faire v ← 13v+ 1
fin pour retourner v fin
b- Algorithme V100() : r´eel variable i: entier;v : r´eel d´ebut
v ←1
pour ide 1`a 100faire v ← 13v+ 1
fin pour retourner v fin
Ou encore mieux :
variable i: entier;v : r´eel d´ebut
v ←1
pour ide 1`a nfaire v ← 13v+ 1
fin pour retourner v fin
c- Dans cette question on a besoin d’un accumulateur pour stocker la somme comme dans l’exercice 1. On n’oublie bien sur pas d’initialiser cet accumulateur, ici `a v = 1 car c’est le terme 0 de la suite mais la boucle pour commence au terme 1 ...
Algorithme Svn(n: entier) : r´eel variable i: entier;s, v: r´eel d´ebut
v ←1 s←v
pour ide 1`a nfaire v ← 13v+ 1
s←s+v fin pour retourner s fin
Il y a plusieurs fa¸cons de proc´eder pour ne pas avoir `a r´eecrire tout le code. Les deux suites sont toutes les deux d´efinies par une formule du genrewn+1 =awn+b avec unw0. Donc on peut mettre en param`etre d’un algorithme toutes ces valeursa, b et w0 qui font la difference entre les deux suites :
Algorithme Wn(n: entier;a,b,w0 : r´eel) : r´eel variable i: entier;w: r´eel
d´ebut w←w0
pouride 1`a nfaire w←aw+b
fin pour retournerw fin
On peut aussi faire quelque chose de plus g´en´eral en rempla¸cant la formule simplewn+1=awn+bpar l’appel d’une fonctionwn+1=f(wn). On a besoin maintenant def etw0 seulement comme param`etre :
Algorithme Wn(n: entier;w0 : r´eel;f : fonction : r´eel→r´eel) : r´eel variable i: entier;w: r´eel
d´ebut w←w0
pouride 1`a nfaire w←f(w)
fin pour retournerw fin
On peut alors d´efinir les fonctions par des algorithmes : Algorithme f(x,a,b : r´eel) : r´eel
d´ebut
retournerax+b fin