Problème de IF

ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011 - 21 oct. 2007 à 09:24
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 21 oct. 2007 à 18:05
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

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

}
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
21 oct. 2007 à 18:05
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
0
Rejoignez-nous