Equation 2eme degré

bupole Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
akybienvenu Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai voulu créer un programme afin de resoudre une equation du 2émé degrée en prennant en consodération si le Delta<0(les racines imaginaires) ms à chaque fois que je compile je trouve un probleme dans mon programme pilote(main) comme montre la capture si desous

vous trouvrer mon code source en bas veuillez m'aider svp merci d'avance

Equation.h
#ifndef EQUATION_H
#define EQUATION_H


class Equation
{
    public:
        Equation(int a,int b,int c);
        int get_a();
        void set_a(int a);
        int get_b();
        void set_b(int b);
        int get_c();
        void set_c(int c);
        void saisie();
        void afficher();
        void calcul(int a,int b,int c);
    private:
        int a;
        int b;
        int c;
};

#endif // EQUATION_H


Equation.cpp

#include "Equation.h"
#include<iostream>
#include<string.h>
#include<math.h>

using namespace std;

Equation::Equation(int a,int b,int c){
    this->a=a;
    this->b=b;
    this->c=c;
}

int Equation::get_a(){
    return a;
}

int Equation::get_b(){
    return b;
}

int Equation::get_c(){
    return c;
}

void Equation::set_a(int a){
    this->a=a;
}

void Equation::set_b(int b){
    this->b=b;
}

void Equation::set_c(int c){
    this->c=c;
}

void Equation::saisie(){
    cout<<"Entrer a : ";
    cin>>a;
    cout<<"Entrer b : ";
    cin>>b;
    cout<<"Entrer c : ";
    cin>>c;
}

void Equation::afficher(){
    cout<<a<<"X² + "<<b<<"X + "<<c;
}

void Equation::calcul(int aa,int bb,int cc){
    float d,rd,rdi;
        float x1,x2,x;
        if (a==0){
            cout<<"L'equation n'as pas de solutions";
        }
        d=pow(b,2)-4*a*c;
        rd=sqrt(d);
        if (d>0){
            x1=(-b-rd)/2*a;
            x2=(-b+rd)/2*a;
            rd=sqrt(d);
            cout<<"L'equation a 2 solutions : \n";
            cout<<"X1 = "<<x1<<"\n";
            cout<<"X2 = "<<x2<<"\n";
        }
        else if(d==0){
            x=-b/2*a;
            cout<<"L'equation a 1 solution : \n";
            cout<<"X = "<<x<<"\n";
        }
        else if(d<0){
            rdi=sqrt((-1)*d);
            cout<<"L'equation a 2 solutions imaginaires : \n";
            cout<<"X1 = ("<<(-1)*bb<<" - "<<rdi<<"i)/"<<2*a;
            cout<<"X2 = ("<<(-1)*bb<<" + "<<rdi<<"i)/"<<2*a;
        }
}


main.cpp

#include<iostream>
#include<string.h>
#include "Equation.h"
#include<math.h>

using namespace std;

int main()
{
    int choix;
    do{
        int a,b,c;
        Equation E;
        E.saisie();
        E.afficher();
        E.calcul(a,b,c);
        cout<<"pour refaire taper 1 sinon taper une autre touche";
        cin>>choix;
    }while(choix=1);
    return 0;
}


A voir également:

3 réponses

Timmydu26 Messages postés 80 Date d'inscription   Statut Membre Dernière intervention   30
 
Il y a quelque truc que je comprend pas...
La 1ere es pourquoi tu réserve 3 int au debut du main, mais tu ne les initialse pas... Donc on ne sais pas quelle valeur ils ont. De plus le a b et c de ton objet n'ont rien a voir avec les 3 ints que tu reserve si tu code normalement....
Quand tu crréer une classe tu dois ecrire un constructeur et un destructeurs.... Et c'est le contructuer qui vient reserver la taille necessaire quand tu declare ton equation dans ton main.
Rajoute un destructeurs a ta classe equation.
puis enleve la déclaration de tes trois int a,b et c de ton main.
Puis change la fonction en: void Equation::calcul() et utilise dans ton calcul directement les attributs de ton equation;a b et c. PArce que dans ta fonction tu melange a,b et c avec aa, bb et cc... D'ailleurs aa et cc tu ne les utilise pas...
0
akybienvenu Messages postés 48 Date d'inscription   Statut Membre Dernière intervention  
 
c'est juste bonne expliquation
0
SypayV Messages postés 6586 Date d'inscription   Statut Contributeur Dernière intervention   449
 
Bonjour,

Je pense que le problème vient de la conception.

Ta classe n'est pas sensée s'occuper de la saisie ni de l'affichage.
Tout ce qu'elle doit faire c'est :
- Initialisation - Prendre 3 valeurs
- Calcul - Effectuer le calcul
- Retour - Résultat du calcul.

Pensé comme ça, on voit tout de suite que ta classe se transforme en simple fonction (Puisqu'il n'y a aucune contrainte de durée de vie des variables membres entre les fonctions).
0
akybienvenu Messages postés 48 Date d'inscription   Statut Membre Dernière intervention  
 
je pense que ton erreur se trouve E.calcul(); pas besoin de mettre les variables dans la parenthèse
tu a déjà déclarer tes variables en prive donc tu ne dois pas les placer dns la parenthèse
comme tu la fais c'est comme si tu utilisais simplement les fonstions pour travailler et non la class
0