Bonjours à tous,
je dois faire un programme calculant delta pour demain.
En le faisant, je me suis dit que, tant qu'à faire, je ferait bien un programme qui en même temps calcule les racines.
Cependant, quelque chose de bizarre se passe, pour les racine négative pas de problème mais quand delta est > ou = 0, il ne m'affiche pas les racines.
Voici mon programme en question :
float calcul_delta (float a, float b, float c);
float calcul_racine_positive (float a, float b, float c, float delta);
float calcul_racine_negative (float a, float b, float c, float delta);
int main ()
{
float a = 0;
float b = 0;
float c = 0;
float delta = 0;
float x1 = 0;
float x2 = 0;
printf("veuillez rentrer a/b/c\n");
scanf("%f/%f/%f%*c", &a, &b, &c);
delta = calcul_delta(a,b,c);
printf("\ndelta vaut %0.2f%*c", delta);
if(delta < 0)
{
printf("\npas de racine reelle");
}
else if(delta = 0)
{
x1 = calcul_racine_positive(a,b,c,delta);
printf("\nla racine de votre equation est x1 = %0.2f%*c", x1);
}
else if(delta > 0)
{
x1 = calcul_racine_positive(a,b,c,delta);
x2 = calcul_racine_negative(a,b,c,delta);
printf("\nles racines de votre equation sont x1 = %0.2f%*c et x2 = %0.2f%*c", x1,x2);
}
getc(stdin);
return 0;
}
float calcul_delta (float a, float b, float c)
{
return(b*b)-(4*a*c);
}
float calcul_racine_positive (float a, float b, float c, float delta)
{
return(-b + sqrt(delta))/(2*a);
}
float calcul_racine_negative (float a, float b, float c, float delta)
{
return(-b - sqrt(delta))/(2*a);
}
Si vous avez des amélioration ou conseils (ou même n'importe quoi d'autre à dire), allez y.
Merci de vos réponses.
http://pastebin.com/
Essaye de mettre ton code là-dessus !
C'est quoi comme genre de site ?
Ca nous permettra de comprendre plus facilement ton code.
est-ce que j'ai tout fait correctement ? http://pastebin.com/HEYHK9ik
Quand tu écris : "\nla racine de votre equation est x1 = %0.2f%*c"
C'est quoi exactement " %0.2f%*c " ?
Ca ressemble à rien que je connaisse. Tu veux afficher un float, pourquoi ne pas mettre directement %f ? Et le %*c ne signifie-t-il pas que tu dois après mettre un char en plus de x1 ?
Je comprends pas trop ce que tu as fais. Tu essaies de jouer avec les divers modificateurs de printf? Essaie déjà avec un simple %f et redis-nous si ça marche pas.
Pareil dans le scanf d'ailleurs, pourquoi il y a %*c à la fin ?
Il me semble qu'on nous avait expliqué (enfin commencé à expliquer) que le "%*f" c’était pour une histoire de cache. Pour le "%0.2f" c'est juste pour qu'il m'affiche 2 chiffres après la virgule.
Malheureusement, j'ai été malade cette semaine mais je dois quand même rendre ce travail. Peut être l'on-t'il expliqué aux cours que j'ai raté (je n'ai pas vraiment eu l'occasion de me mettre en ordre).
Quand j’enlève les "%*c" le programme se ferme de suite sans que j'ai eu le temps de lire ce qui est affiché.
Dans le if c'est "else if(delta == 0) {}
Tu as pas mis de double =
je regarde le reste.
Alors le problème vient clairement du scanf, parce que si tu mets ensuite des valeurs à a, b et c ça fonctionne.
En gros là ton scanf ne prend que la première variable ( tu le verras si tu affiches a b et c direct après le scanf).
Donc au lieu de te compliquer la vie, pose 3 fois la question et fais 3 scanf ![]()
C'est quand même bizarre que si c'est mon scanf le problème, il me trouve quand même une valeur pour delta.
Enfin je vais essayer.
Par contre, depuis que j'ai mis "delta == 0", quand je fait enter après avoir rentré mes valeurs, rien ne s'affiche, au contraire même, ce qui était écrit précédemment s’efface et je me retrouve avec ma fenêtre toute noire.
Ton scanf donne la première valeur à a. Les variables b et c prennent la valeur 0. Tu as donc toujours delta = 0 - 0 = 0.
Je connaissais pas cette méthode du scanf, mais à mon avis c'est pas une bonne idée de vouloir prendre 3 nombres dans un seul scanf, parce qu'il saura pas forcément différencier les 3.
ensuite le %*c a peut-être du sens dans le scanf, mais je pense ne pas me tromper en disant que ça n'a absolument aucun sens dans le printf, certains confirmeront peut-être. : http://www.cplusplus.com/reference/clibrary/cstdio/printf/
En l'enlevant de chaque printf, perso le programme tourne bien, sauf que delta est toujours = à 0, et la solution est toujours x1 = 0. Parce que b et c = 0.
En mettant 3 scanf à la suite ça marche bien mieux.
Au passage, je crois que la fonction scanf n'est pas du tout appréciée.
En effet, le "%*c" ne sert à rien. C'est d’ailleurs ça qui faisait tout rater.
J'ai essayé en les supprimant et tout fonctionne nickel.
Merci du coup de main.
Mais tu mets quand même tout dans un scanf ? Parce que là j'essaie avec "scanf("%f/%f/%f", &a, &b, &c);
Et ça marche pas, b et c = 0 toujours.
En tout cas tant mieux si j'ai pu t'aider, au passage j'apprends une autre utilisation de scanf et printf, même si pas forcément utile ici ![]()
j'ai mis des "%d" (car ça m'étonnerai qu'on mette des valeur a virgules). Par contre j'ai gardé ce "format" là.
Si c’était un travail que je faisais pour m’entraîner, j'aurai fait comme tu m'avais dit, mais c'est un travail à rendre et les labos que j'ai raté expliquaient comment entrer des dates dans ce format.
Je me dit que ça peut montrer à mon prof que j'ai compris le système (même si c'est un peu bizarre de faire comme ça ^^).
Mais tu as changé le reste du code ? Parce que même avec des %d j'ai 0 0 et 0.
Tu pourrais mettre ton code fonctionnel sur pastebin ? Je sens que quelque chose m'échappe ![]()
voilà le code http://pastebin.com/fDvV7sPV
Pour info, j'ai changé le début et mis tout dans un fichier en tête mais ou sinon c'est pareil qu'avant.
Autre chose (je ne sais pas si c'est important), j'utilise visual studio 2010.
C'est marrant parce que j'ai c/c le code chez moi en ajoutant l'entête et j'obtiens toujours 0 pour les 3 variables.
Au passage, tes fonctions voient a, b et c comme des float. C'est pas très dérangeant, mais puisque c'est des int, pourquoi ne pas les mettre en int dans le prototype ?
Ah mais je te dis un peu des bêtises, j'avais pas capté le séparateur. En fait tu écris par exemple 1/2/-8
Moi j'écrivais 1 2 -8
Avec l'espace comme séparateur.
Bon ben j'ai appris comment faire alors
Par contre, ça tu peux l'écrire en commentaire dans le code et/ou dans le printf, parce que l'utilisateur sait pas forcément sous quelle forme il doit donner les valeurs.
A ben c'est vrai j'ai pas pensé à les changer là.
Chez moi les variables ont les valeur que j'entre (j'ai vérifié en mettant un point d'arrêt a plusieurs endroits pour voir mes variables.
Je ferai bien un print screen mais je ne sais pas trop comment les mettre sur le forum ^^.
(peut être que tu ne mets pas "x/x/x" mais "x x x" (parce qu'en faisant ça, j'ai 0 aussi))