Problème de calcul en C
Résolu/Fermé
-L0Lock-
Messages postés
5998
Date d'inscription
dimanche 10 février 2013
Statut
Membre
Dernière intervention
18 mars 2018
-
20 nov. 2014 à 00:00
-L0Lock- Messages postés 5998 Date d'inscription dimanche 10 février 2013 Statut Membre Dernière intervention 18 mars 2018 - 28 nov. 2014 à 20:00
-L0Lock- Messages postés 5998 Date d'inscription dimanche 10 février 2013 Statut Membre Dernière intervention 18 mars 2018 - 28 nov. 2014 à 20:00
A voir également:
- Problème de calcul en C
- Calcul moyenne excel - Guide
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Logiciel calcul surface terrain gratuit - Télécharger - Outils professionnels
- Calcul km marche à pied gratuit - Télécharger - Sport
2 réponses
Utilisateur anonyme
20 nov. 2014 à 00:04
20 nov. 2014 à 00:04
Bonsoir
Un très grand classique
Cette ligne ne teste pas si delta est égal à 0, mais force la valeur de delta à 0. D'où la suite des calculs fausse.
La comparaison en C, c'est
Un très grand classique
else if (delta = 0)
Cette ligne ne teste pas si delta est égal à 0, mais force la valeur de delta à 0. D'où la suite des calculs fausse.
La comparaison en C, c'est
==, pas simplement
=.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
20 nov. 2014 à 10:47
20 nov. 2014 à 10:47
Bonjour,
Ma petite contribution pour améliorer ton programme :
- Utilise double plutôt que float. D'une manière générale, il vaut mieux n'utiliser que des double (les float sont plutôt à utiliser dans des cas particuliers). Néanmoins, si tu souhaites vraiment utiliser les floats, utilise au moins sqrtf() au lieu de sqrt() pour le calcul de la racine
- float a,b,c,delta,rdelta,x1,x2; Pour la lisibilité, en général il est conseillé de faire une ligne par variables sauf si elles sont de même type et de même usage. Donc ici plutôt :
- Tu ne te sers pas de rdelta. Tu peux donc le supprimer.
- Vérifie si a est différent de 0 avant de diviser par a.
- Mets un '\n' avant la fin de ton return 0; (ou au moins un fflush(stdout).
- x1 = (-b - sqrt(delta) / (2 * a);
Il manque une parenthèse.
Après, tu peux mieux sécuriser les entrées. Par exemple, si l'utilisateur rentre une lettre, ton programme ne fonctionnera pas.
Ma petite contribution pour améliorer ton programme :
- Utilise double plutôt que float. D'une manière générale, il vaut mieux n'utiliser que des double (les float sont plutôt à utiliser dans des cas particuliers). Néanmoins, si tu souhaites vraiment utiliser les floats, utilise au moins sqrtf() au lieu de sqrt() pour le calcul de la racine
- float a,b,c,delta,rdelta,x1,x2; Pour la lisibilité, en général il est conseillé de faire une ligne par variables sauf si elles sont de même type et de même usage. Donc ici plutôt :
double a,b,c; double delta, rdelta; double x1, x2;
- Tu ne te sers pas de rdelta. Tu peux donc le supprimer.
- Vérifie si a est différent de 0 avant de diviser par a.
- Mets un '\n' avant la fin de ton return 0; (ou au moins un fflush(stdout).
- x1 = (-b - sqrt(delta) / (2 * a);
Il manque une parenthèse.
Après, tu peux mieux sécuriser les entrées. Par exemple, si l'utilisateur rentre une lettre, ton programme ne fonctionnera pas.
-L0Lock-
Messages postés
5998
Date d'inscription
dimanche 10 février 2013
Statut
Membre
Dernière intervention
18 mars 2018
1 164
20 nov. 2014 à 18:24
20 nov. 2014 à 18:24
Merci! :)
Si je mets des variables "double", j'ai un problème lorsque le programme me retourne les résultats du polynôme : les chiffres après la virgule sont changés par "#J".
Je reste donc en float, à moins que tu aies une solution à ce problème.
Si je mets des variables "double", j'ai un problème lorsque le programme me retourne les résultats du polynôme : les chiffres après la virgule sont changés par "#J".
Je reste donc en float, à moins que tu aies une solution à ce problème.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
20 nov. 2014 à 18:37
20 nov. 2014 à 18:37
Bien sûr qu'il y a une solution : il ne faut pas oublier de mettre %lf (L minuscule) au lieu de %f dans le scanf() (et uniquement dans le scanf())
-L0Lock-
Messages postés
5998
Date d'inscription
dimanche 10 février 2013
Statut
Membre
Dernière intervention
18 mars 2018
1 164
20 nov. 2014 à 18:45
20 nov. 2014 à 18:45
°u°
Merki, j'ai un super programme maintenant! :D
Sinon, une idée pour faire le calcul des racines complexes?
Je vois pas trop comment créer le nombre non-réel i tel que :
Merki, j'ai un super programme maintenant! :D
Sinon, une idée pour faire le calcul des racines complexes?
Je vois pas trop comment créer le nombre non-réel i tel que :
i²=-1.
Lapourax
Messages postés
3006
Date d'inscription
vendredi 15 mars 2013
Statut
Contributeur
Dernière intervention
17 février 2023
334
Modifié par Lapourax le 20/11/2014 à 21:25
Modifié par Lapourax le 20/11/2014 à 21:25
Lu' !
Si je ne m'abuse tu as besoin de la librairie complex pour ça.... J'ai pas d'exemple sous la main pour le moment
EDIT : Autant pour moi ça c'est en C++... '-______-
Du coup début de réponse ici
Si je ne m'abuse tu as besoin de la librairie complex pour ça.... J'ai pas d'exemple sous la main pour le moment
EDIT : Autant pour moi ça c'est en C++... '-______-
Du coup début de réponse ici
-L0Lock-
Messages postés
5998
Date d'inscription
dimanche 10 février 2013
Statut
Membre
Dernière intervention
18 mars 2018
1 164
20 nov. 2014 à 21:27
20 nov. 2014 à 21:27
Merci de ce lien.
20 nov. 2014 à 00:29
Merci à toi, au moins j'ai un programme qui fonctionne.
Par ailleurs, est-ce que qu'il y a moyen de simplifier ce programme par-ci par-là?
20 nov. 2014 à 09:05