Salut à tous !
L'autre jour notre prof nous a "prescrit" un programme pour réaliser l'encadrement d'une solution par dichotomie. Un truc à la con donc, vraiment pas compliqué.
Seulement j'ai pas pu m'empêcher de le revoir un petit coup pour l'optimiser, et j'ai rencontré un problème dans la gestion de conditions à partir de booléens. Ce type de choses ne me pose d'habitude aucun problème dans mes codes, mais là on voit que le résultat diffère selon si les booléens sont utilisés ou pas.
Le code fonctionnel, sans les booléens :
Après vérification, pour ces entrées les bonnes valeurs de A et B en sortie sont bien celles que j'ai citées dans ce code.
Maintenant, le code défectueux qui me semble pourtant correct :
Dans le cas n°1, les valeurs en sortie sont 0 et 2. Dans le cas n°2, les valeurs en sortie sont 3,9921875 et 4, avec bien sûr les mêmes valeurs en entrée. Dans le cas 1+2, les valeurs en sortie sont 2 et 4.
Voilà, je comprends pas bien ce qui se passe, pourquoi lorsque j'utilise un booléen qui a a priori le même effet je n'obtiens pas le même résultat.
L'autre jour notre prof nous a "prescrit" un programme pour réaliser l'encadrement d'une solution par dichotomie. Un truc à la con donc, vraiment pas compliqué.
Seulement j'ai pas pu m'empêcher de le revoir un petit coup pour l'optimiser, et j'ai rencontré un problème dans la gestion de conditions à partir de booléens. Ce type de choses ne me pose d'habitude aucun problème dans mes codes, mais là on voit que le résultat diffère selon si les booléens sont utilisés ou pas.
Le code fonctionnel, sans les booléens :
- Code:
Input "Y1=?",Str1
Prompt A,B,E
Str1->Y1
Repeat E-B+A>0
.5(A+B->M
If Y1(A)Y1(M)≤0
Then
M->B
Else
M->A
End
End
Disp A,B
// Valeurs à l'entrée : Y1=x^3-6x^2+6
//A=0 ; B=4 ; E=0,01
//Valeurs en sortie : A=1,1015625 ; B=1,109375
Après vérification, pour ces entrées les bonnes valeurs de A et B en sortie sont bien celles que j'ai citées dans ce code.
Maintenant, le code défectueux qui me semble pourtant correct :
- Code:
Input "Y1=?",Str1
Prompt A,B,E
Str1->Y1
Repeat E-B+A //<-Cas n°1
.5(A+B->M
If not(Y1(A)Y1(M //<-Cas n°2
Then
M->B
Else
M->A
End
End
Disp A,B
Dans le cas n°1, les valeurs en sortie sont 0 et 2. Dans le cas n°2, les valeurs en sortie sont 3,9921875 et 4, avec bien sûr les mêmes valeurs en entrée. Dans le cas 1+2, les valeurs en sortie sont 2 et 4.
Voilà, je comprends pas bien ce qui se passe, pourquoi lorsque j'utilise un booléen qui a a priori le même effet je n'obtiens pas le même résultat.