Résolution d'une équation du seconde degré sur DEVCPP [c] - C - Programmation
Marsh Posté le 23-09-2007 à 13:54:04
1) c'est assez idiot de calculer la racine carrée de delta avant de tester si delta est négatif
2) tu calcules 2 fois X1
3) if (C=0) => sans commentaire
Remarque perso: si tu commences à venir polluer le forum pour des problèmes aussi triviaux t'as pas fini. Commence déjà par faire attention à ce que t'écrits. Et essayer de dégrossir un peu l'algo sur un papier n'est pas une mauvaise idée non plus. Par exemple ça ne sert à rien d'aller calculer delta si A = 0 et ça évite au truc de partir en torche quand tu divises par 2*A...
PS: mettre "D" en double alors qu'il reçoit un calcul d'int ça marche mais c'est dommage...
PS2: Je vois pas à quoi sert la variable "Img"
Marsh Posté le 23-09-2007 à 14:00:34
juste avant ta réponse j'ai fais quelque modification dont le C=0 mais sa bloque toujours.
Aprés je pensais que ce forum servait à s'aider, tout le monde ne maitrîse pas le langage C....
La variable Img c'est pour les solutions imaginaires...
Marsh Posté le 23-09-2007 à 14:04:03
Il doit manquer des opérateurs de multiplication à cette ligne-ci : D=B*B-4AC;
Marsh Posté le 23-09-2007 à 14:05:28
ok merci j'ai modifié mais sa bloque a l'autre else sans doute a cause d'une accolade
Marsh Posté le 23-09-2007 à 14:08:22
j'ai déja essayer de bien aligner les if et else mais je galère quand même
Marsh Posté le 23-09-2007 à 14:14:47
zondervan a écrit : ok merci j'ai modifié mais sa bloque a l'autre else sans doute a cause d'une accolade |
ok. Commence par indenter les choses. Ecrits un code "propre" et l'erreur sautera peut-être plus facilement aux yeux. Et poste ton code entre des balises "[f.i.x.e.d]" "[/f.i.x.e.d]" (enlève le "." quand tu écrits les balises)
Voici ton code reécrit
#include <stdio.h> |
Et oh que vois-je ? Une accolade de trop à la fin !!!
zondervan a écrit : Aprés je pensais que ce forum servait à s'aider, tout le monde ne maitrîse pas le langage C.... |
Oui mais faut quand-même commencer par te sortir les doigts du luc et faire un effort personnel avant de venir chouiner sur le fofo. Et écrire un code indenté fait partie des efforts personnels...
Marsh Posté le 23-09-2007 à 14:21:20
OK merci de ton aide, je vais quand même essayer de résoudre les derniers bugs que je rencontre.
Marsh Posté le 23-09-2007 à 15:41:40
zondervan a écrit : OK merci de ton aide, je vais quand même essayer de résoudre les derniers bugs que je rencontre. |
Ben déjà toute ta partie calculs de delta, solutions X1, X2, relles et imaginaires à placer dans le bloc si A != 0. Et éviter de calculer sqrt(D) si D < 0. Ensuite, le reste devient trivial...
Marsh Posté le 23-09-2007 à 16:33:30
Merci à tous, j'ai modifié mon programme mais j'ai encore un petit problème c'est quand mon delta=0, il m'affiche X1 X2 et X1, bien que les valeurs soient logiquement les mêmes je ne comprend pourquoi il me les affiches 3 fois. De même, quand delta>0, il m'affiche X1, X2 et encore une fois X1, X2 comme si delta>0 rentrez dans 2 blocs!
|
Marsh Posté le 23-09-2007 à 17:27:00
zondervan a écrit : Merci à tous, j'ai modifié mon programme mais j'ai encore un petit problème c'est quand mon delta=0, il m'affiche X1 X2 et X1, bien que les valeurs soient logiquement les mêmes je ne comprend pourquoi il me les affiches 3 fois. De même, quand delta>0, il m'affiche X1, X2 et encore une fois X1, X2 comme si delta>0 rentrez dans 2 blocs! |
Faut pas utiliser scanf() si tu n'es pas un expert...
|
Je suppose que A B et C sont des 'coefficients' ou des paramètres' de l'équation, mais en aucun cas des 'variables'...
Marsh Posté le 23-09-2007 à 17:30:09
Il ne faut pas utliser scanf alors? j'ai mis variable mais c'est en effet bien les coefficients de l'équation.... mais cela a un rapport avec mon problème?
Marsh Posté le 23-09-2007 à 18:16:08
zondervan a écrit : Il ne faut pas utliser scanf alors? |
Sauf si tu maitrises. Sinon, il est plus simple d'utiliser fgets() et strtod() ou strtol() selon les besoins.
Citation : |
Non.
Marsh Posté le 24-09-2007 à 08:36:36
zondervan a écrit : Merci à tous, j'ai modifié mon programme mais j'ai encore un petit problème c'est quand mon delta=0, il m'affiche X1 X2 et X1, bien que les valeurs soient logiquement les mêmes je ne comprend pourquoi il me les affiches 3 fois. De même, quand delta>0, il m'affiche X1, X2 et encore une fois X1, X2 comme si delta>0 rentrez dans 2 blocs! |
Bien sûr. tu fais des tests si delta >= 0 donc tu y rentres même si delta = 0. Et tu rentres aussi dans le else du delta != 0 donc ça t'affiche tous les printf de ces cas. Pour bien le voir, fais des affichages un peu différents à chaque fois comme ça tu verras bien quel affichage correspond quel cas...
Marsh Posté le 23-09-2007 à 12:20:37
Bonjour tout le onde, je dois faire un programme sur devcpp pour résoudre une équation du deuxième degré.
Voici mon programme mais j'ai un problème au else juste aprés le system(pause).
Si vous voyez quelque chose de faux, cela serait sympa de me dire ce qui ne vas pas.
merci
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{double A, B, C;
double D, X1, X2, Re, Img, X;
printf("\nVeuillez saisir votre variable A: \n" );
scanf("%lf", &A);
printf("\nVeuillez saisir votre variable B: \n" );
scanf("%lf", &B);
printf("\nVeuillez saisir votre variable C: \n" );
scanf("%lf", &C);
D=B*B-4*A*C;
X1=-B+sqrt(D)/2*A;
X1=-B-sqrt(D)/2*A;
Re=B/2*A;
Img=sqrt(-D);
X=-C/B;
if(A!=0)
{printf("delta=%lf", D);
if(D>=0)
{printf("X1=%lf, X2=%lf", X1, X2);
} else{printf("Re=%lf, Img=%lf", Re, Img);
printf("Z1=%lf+%lf*j, Img=%lf-%lf*j", Re, Img, Re, Img);
}
if(D!=0)
{printf("X1=%lf, X2=%lf", X1, X2);
}
else{printf("X1=%lf", X1);
}
}
else{
if(B!=0)
{printf("X=%lf", X);
}
problème de compilation
else{
if(C==0)
{printf("0=0, ensemble des solutions infini" );
}
else{printf("\n Il n'y a donc pas de solution\n" );
}
}
}
system("pause" );
return 0;
}
}
Message édité par zondervan le 23-09-2007 à 14:09:24