Question 2) :
En comparant les deux algorithmes, nous constatons bien des différences au niveau des affectations dans la boucle Pour :
Réalisons donc la trace, instruction par instruction, de ces deux algorithmes jusqu'à la fin de la 1ère itération de la boucle.
L'algorithme démarrant avec a=a0=1 et b=b0=0, nous devrions obtenir dans cet état a=a1=0,9 et b=b1=0,1
Pour l'algorithme 1, nous obtenons :
Instruction | a | b | i |
a prend la valeur 1 | 1 | ||
b prend la valeur 0 | 1 | 0 | |
Pour i=1 | 1 | 0 | 1 |
a prend la valeur 0,9×a+0,06×b | 0,9×1+0,06×0 =0,9 | 0 | 1 |
b prend la valeur 0,1×a+0,94×b | 0,9 | 0,1×0,9+0,94×0 =0,09 | 1 |
Pour l'algorithme 2, nous obtenons :
Instruction | a | b | c | i |
a prend la valeur 1 | 1 | |||
b prend la valeur 0 | 1 | 0 | ||
Pour i=1 | 1 | 0 | 1 | |
c prend la valeur a | 1 | 0 | 1 | 1 |
a prend la valeur 0,9×a+0,06×b | 0,9×1+0,06×0 =0,9 | 0 | 1 | 1 |
b prend la valeur 0,1×c+0,94×b | 0,9 | 0,1×1+0,94×0 =0,1 | 1 | 1 |
Seul l'algorithme 2 est donc correct, l'algorithme 1 se trompant sur la première affectation récurrente de la variable b.
Dans la boucle il y a deux affectations récurrentes à faire sur les variables a puis b.
L'erreur de l'algorithme 1 est que la deuxième affectation récurrente sur la variable b utilise la valeur modifiée a1=0,9 de la variable a et non la valeur initiale a0=1.
C'est pour cela que l'algorithme 2 sauvegarde avant modification l'état de cette variable a dans un variable c qu'il utilise alors.