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;
}


3 réponses

Timmydu26
Messages postés
80
Date d'inscription
mercredi 29 avril 2015
Statut
Membre
Dernière intervention
17 juin 2016
26
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
6554
Date d'inscription
vendredi 28 décembre 2007
Statut
Contributeur
Dernière intervention
27 juin 2021
456
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