Equation 2eme degré

Fermé
bupole Messages postés 8 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 1 septembre 2016 - Modifié par bupole le 16/12/2015 à 00:48
akybienvenu Messages postés 48 Date d'inscription samedi 26 décembre 2015 Statut Membre Dernière intervention 4 novembre 2019 - 26 déc. 2015 à 22:22
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 mercredi 29 avril 2015 Statut Membre Dernière intervention 17 juin 2016 30
16 déc. 2015 à 13:40
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 samedi 26 décembre 2015 Statut Membre Dernière intervention 4 novembre 2019
26 déc. 2015 à 22:22
c'est juste bonne expliquation
0
SypayV Messages postés 6583 Date d'inscription vendredi 28 décembre 2007 Statut Contributeur Dernière intervention 19 février 2023 449
25 déc. 2015 à 19:59
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 samedi 26 décembre 2015 Statut Membre Dernière intervention 4 novembre 2019
Modifié par akybienvenu le 26/12/2015 à 22:20
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