Problème de IF

Signaler
Messages postés
55
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
15 novembre 2011
-
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
-
Bonjour,

je voulais avoir votre avis sur une partie de mon code qui fait des choses vraiment bizarre...disons que la condition d'un if ne se fait pas ....
voilà mon code avec son if :

PenroseI::PenroseI(){}

PenroseI::PenroseI(Point pta,Point ptb,Point ptc):TriIso(pta,ptb,ptc)
{
    double phi=0;
    phi=((1+ sqrt((double)5))/2);
    double test=0;

    if(getsommet()=='c'){
        test=((getlongbase())/(getlongcotiso()));
        cout< sommet=b
            sommet = 'b';
            cout << "isoc\x8Ale en b" << endl;
            longbase=(c.Calclong(a));
            cout<<"La longueur de la base est : "<< longbase <<endl;
            longcotiso=(b.Calclong(c));
            cout<<"La longueur d'un cot\x82 isoc\x8Ale est : "<< longcotiso <<endl;

        }
        else if ((b.Calclong(c))==(c.Calclong(a))){//si bc=ca -> sommet=c
            sommet = 'c';
            cout << "isoc\x8Ale en c" << endl;
            longbase=(a.Calclong(b));
            cout<<"La longueur de la base est : "<< longbase <<endl;
            longcotiso=(a.Calclong(c));
            cout<<"La longueur d'un cot\x82 isoc\x8Ale est : "<< longcotiso <<endl;
        }
        else if ((c.Calclong(a))==(a.Calclong(b))){//si ca=ab -> sommet=a
            sommet = 'a';
            cout << "isoc\x8Ale en a" << endl;
            longbase=(c.Calclong(b));
            cout<<"La longueur de la base est : "<< longbase <<endl;
            longcotiso=(a.Calclong(c));
            cout<<"La longueur d'un cot\x82 isoc\x8Ale est : "<< longcotiso <<endl;
        }
        else{
            cout << "non isoc\x8Ale" << endl;
        }
    }
    else{
        cout<<"Ce n'est pas un triangle"<<endl;
    }
}

char TriIso::getsommet(){
    return(sommet);
}

void TriIso::setsommet(char sommet) {
   this->sommet = sommet;
}

double TriIso::getlongbase(){
    return(longbase);
}

void TriIso::setlongbase(double longbase) {
   this->longbase = longbase;
}

double TriIso::getlongcotiso(){
    return(longcotiso);
}

void TriIso::setlongcotiso(double longcotiso) {
   this->longcotiso = longcotiso;
}

et voilà ce que m'affiche ma console windows :

appel du constructeur simple : 0035A3D0 1 1
appel du constructeur simple : 0035A490 1 3
appel du constructeur simple : 0035A4D8 2 2
Ces points forment un triangle
isocèle en c
La longueur de la base est : 2
La longueur d'un coté isocèle est : 1.41421
1.61803                                                            <---------Valeur de phi
1.41421                                                            <---------Valeur de test
0.20382                                                            <---------Valeur de la sous traction de phi - test
Le triangle est un triangle de Penrose de type I   <---------Résultat du if dans Penrose
Appuyez sur une touche pour continuer...

Donc si quelqu'un pouvait m'aider à propos de ce if....

Merci,
Cordialement, ichigoZ710

2 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
Passes donc plutôt tes variables en float à la place de double et utilises :
if( ( fabs(phi - test) ) == 0,000001f )
{

}
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Salut,
Pas très conseillé de faire des tests de nullité avec des flottants....
Ce que j'ai l'habitude de faire:
if (abs(fMonFloat) < 1e6)
...

@+

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage