|
Posté par lavela
on nous a donne un bleme de programation sur la methode de dichotomie en language C,avec f(x)=lnx sur [0.5,1.5].THANKS
![]() |
|
Posté par lavela
on nous a donne un bleme de programation sur la methode de dichotomie en language C,avec f(x)=lnx sur [0.5,1.5].THANKS
![]() |
|
#include math.h main() { double StartValue; double EndValue; double LogVal1; double LogVal2; double LogValTemp; bool FinDeDicho; FinDeDicho = false; StartValue = 0.5; EndValue = 1.5; // On vérifie si il y a une solution sur l'intervalle [StartValue;EndValue] LogVal1 = log(StartValue); LogVal2 = log(EndValue); if ((LogVal1 < 0) && (LogVal2 > 0)) { // On peut effectuer la dicho fputs("Dichotomie; pas=0.1"); LogVal2 = 0; while(FinDeDicho = false) { LogValTemp = log(StartValue + LogVal2); // N'ayant pas fait de C depuis longtemps, // Je ne me souviens plus comment vérifier si 2 doubles sont de signes opposés if (LogValTemp == 0) { puts("Solution: %s",StartValue+LogVal2); break; } LogVal2 = LogVal2+0.1; } puts("Fin de la dichotomie"); } else { puts("Il n'y a pas de solution sur l'intervalle"); } } |
|
Posté par Patastronch
while(bool == false)
Mais quelle horreur ! Sans t'en rendre compte tu fais 2 fois le meme test. Et puis c est pas bool ta variable mais finDeDicho Et puis je croyais que la dichotomie c'etait de séparer l'ensemble en 2 parties. C'est a dire si l'interval est [a,b] alors on lance sur (a+b)/2 si c est plus petit on refait pareil avec a=(a+b)/2 si c est trop grand b=(a+b)/2 et si c'est egal on renvoit la solution. Enfin bon je dis ca je dis rien. |
-