2015-11-01 2 views
0

excuses pour le mur de texte.numéros de sortie du programme équation quadratique

m'a donné la tâche suivante du livre, je travaille à partir de:

"équations du second degré sont de la forme: ax^2 + bx + c = 0

Pour résoudre ces , on utilise la formule quadratique: (-b ± √ (b^2-4ac))/2a

il y a un problème, cependant: si b^2-4ac est inférieur à zéro, il échouera Écrire un programme qui peut calculer x pour un équat quadratique ion. Créer une fonction qui imprime les racines de l'équation quadratique donné a, b, c. Lorsque le programme détecte une équation sans racine réelle, faites-lui imprimer un message. Comment savez-vous que vos résultats sont plausibles? Pouvez-vous vérifier qu'ils sont corrects? "

J'ai écrit mon programme, mais, toutes les sorties que je reçois sont des nombres bizarres Par exemple:... 7.08141e + 268 est d'utiliser 4 de sorte que le sqrt devrait être 2 Je crois

EDIT. : J'ai modifié le code et recevoir les valeurs correctes pour le sqrt de a, b, c maintenant, mais, x1 et x2 donnent nan qui est juste faux.Espérons que ce code est un peu plus propre et une meilleure mise en page

double quad_x1(double b, double a, double c) { 
double x1 = (-b + sqrt(b * b - 4 * a * c))/(2 *a); 
return x1; 
} 

double quad_x2(double b, double a, double c) { 
double x2 = (-b - sqrt(b * b - 4 * a * c))/(2 * a); 
return x2; 
} 

double square_root_a(double a) { 
double sq_a=sqrt(a); 
if(sq_a<0){ 
throw invalid_argument("Input is less than zero."); 
} 
else { 
return sq_a; 
} 
} 

double square_root_b(double b) { 
double sq_b=sqrt(b); 
if(sq_b<0) { 
throw invalid_argument("Input is less than zero."); 
} 
else { 
return sq_b; 
} 
} 

double square_root_c(double c) { 
double sq_c=sqrt(c); 
if(sq_c<0) { 
throw invalid_argument("Input is less than zero."); 
} 
else { 
return sq_c; 
} 
} 

int main() 
{ 
try{ 
double a=4; 
double b=4; 
double c=4; 

double sq_a = square_root_a(a); 
double sq_b = square_root_b(b); 
double sq_c = square_root_c(c); 
double x1 = quad_x1(b, a, c); 
double x2 = quad_x2(b, a, c); 

cout<<"The square roots are: a = "<<sq_a<<" b = "<<sq_b<<" c = "<<sq_c<<'\n'; 
cout<<"The answer to the quadratic is:\n"; 
cout<<"x1 = "<<x1<<'\n'; 
cout<<"x2 = "<<x2<<'\n'; 
} 

catch (invalid_argument) { 
cerr<<"Invalid Input - Less than zero"<<'\n'; 
return 1; 
} 

return 0; 
} 
+0

Ajouter la sortie à votre question – Gabriel

+0

Vous devez affecter les résultats de vos appels de fonction aux vars: 'sq_a = racine_carrée (a, b, c);' –

+1

Un bon nombre de problèmes dans votre code, mais le principal est que sq_a, sq_b et sq_c ne sont jamais définis sur rien, d'où les valeurs non définies invalides qui sont en cours d'impression. – davestevens

Répondre

2

Vous n'appelez pas vos fonctions.

double square_root(double a, double b, double c); //send values to sqrt check 
    double quad_x1(double b, double a, double c); //send values to get x1 
    double quad_x2(double b, double a, double c); //send values to get x2 

Ce sont déclarations de fonctions pour les fonctions déjà définies ci-dessus. Ils n'ont absolument aucun effet. Les fonctions ne sont pas appelées.

Il est comme si vous aviez fait cela:

#include <iostream> 

void f() 
{ 
    std::cout << "global\n"; 
} 

int main() 
{ 
    void f(); // just a declaration, f() is not called 
} 

Un autre problème est que vous n'initialisez de sq_amain, sq_b, sq_c, x1 et x2 les variables. Ces variables sont de type double. Essayer de lire à partir d'eux est donc comportement indéfini, ce qui signifie que l'ensemble de votre programme est invalide.

Vous semblez avoir l'idée fausse que les noms de variables en C++ sont toujours globaux. Mais c'est loin de la vérité. Votre x1 en main n'a absolument rien à voir avec x1 en quad_x1. Vous avez sans doute l'intention de faire quelque chose comme:

x1 = quad_x1(b, a, c); 

Et ainsi de suite ...


Vous devriez commencer avec beaucoup des programmes plus simples à apprendre C++. Appeler une fonction et stocker le résultat dans une variable locale est à peu près la chose la plus fondamentale que vous puissiez faire. N'abordez pas les équations du second degré avant d'avoir bien compris. Commencez avec un programme qui utilise une fonction pour ajouter deux nombres.

+0

Merci pour vos conseils. ai modifié mon code ce qui a résolu mon problème. C'est ma première fois avec des fonctions mais je comprends maintenant comment le faire. –

+0

@MartinDickinson: De rien. Cependant, sur SO, il est recommandé de poser une * nouvelle * question plutôt que de modifier celle d'origine. Je vous suggère donc d'annuler votre modification et de poser à la place une nouvelle question renvoyant (via un lien) à celle-ci. –

+0

@MartinDickinson: Juste pour être clair: vous avez maintenant un nouveau problème, c'est pourquoi une nouvelle question serait la bonne chose à faire. Mais éditer une question ne devrait être fait que pour clarifier ou mieux expliquer un problème existant. –