Les structures conditionnelles ???? IF IF IF ELSE ELSE ELSE...

Résolu/Fermé
Samiko5580 Messages postés 6 Date d'inscription mardi 16 octobre 2012 Statut Membre Dernière intervention 9 septembre 2014 - 16 oct. 2012 à 12:34
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 5 nov. 2012 à 08:32
Bonjour à tous,
Je viens de commencer mes études en programmations, j'ai un cours qui pose un certain ptit problème de compréhension, j'ai chercher pendant 2j sur le net et je ne trouve pas lé réponse à ma question ...

Quelqu'un connaîtrai comment bien utilisé la strucutres conditionnel au moment ou il y a deux if qui ce suit, un exemple concret ...

{
int a;
cin>>a;
if (a>0) \\Pourquoi ne pas mettre une instruction? exp: cout<<"Yes"; Vu que je l'ai partout.
if(a>1) \\ Quel raisonnement dois je avoir pour comprendre ?
cout<<a<<endlt;
else
cout<<a-1<<endl;
else
cout<<"Coucou";
}

Je ne comprend pas le raisonnement moi j'ai tendance à mettre un else if entre les deux et le profs me dit que ce n'est pas juste... Comprend pas bien le cas ou on met if if else else...

Si une bonne âme qui aurais un peut de patience pour me l'expliquer ce serait vraiment sympa.... Bien à vous et Bonne semaine ;)

2 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
16 oct. 2012 à 12:46
Salut.
if else forme une seule instruction, elles ne sont pas croisable.
Pour que ça soit plus clair, tu peut mettre des accolades, en partant du if le plus imbriqué :
if(a>0)
{
    if(a>1)
    {
         cout<<a;
     }
     else
     {
          cout<<a-1;
      }
}
else
{
      cout<<"coucou";
}
0
Samiko5580 Messages postés 6 Date d'inscription mardi 16 octobre 2012 Statut Membre Dernière intervention 9 septembre 2014
16 oct. 2012 à 12:53
if(a>0)
{ \\donc la je peux mettre une instruction ici ? cout<<"Hello"<<endl;
if(a>1)
{
cout<<a;
}
else
{
cout<<a-1;
}
}
else
{
cout<<"coucou";
}
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
16 oct. 2012 à 14:07
avec des accolades : oui, sans : non.
0
Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 97
16 oct. 2012 à 14:27
Si il n'y a pas d'accolade, on considère que seul l'instruction suivante est conpris dans le if

ex:

if (a>2)
      cout<<2
if (a>1)
      cout<<1
else
      cout<<3



et identique a:

if (a>2)
{
      cout<<2}
if (a>2)
{
      cout<<2
}
else
{
      cout<<3
}



Dans les cas précédant on teste forcément les 2 conditions alors que si l'on mets les accolades avec le premier if qui englobe tout, si la premier if est faux alors on ne testera pas le deuxième
et donc différnete si l'on met:

if (a>2)
{
cout<<2
if (a>1)
      cout<<1
else
      cout<<3
}
0
Samiko5580 Messages postés 6 Date d'inscription mardi 16 octobre 2012 Statut Membre Dernière intervention 9 septembre 2014
31 oct. 2012 à 17:49
Imaginons dans ce cas de figure par exemple, comment le résoudre ??? C'est là que je me perd :)
#include <iostream>

using namespace std;

int main()
{
    int nbA,nbB,nbC;

    cout<<"Introduisez 3 nombres et je vous les affiches dans l'ordre croissant. "<<endl;

    cout<<"Nombre A : ";
    cin>>nbA;
    cout<<"Nombre B : ";
    cin>>nbB;
    cout<<"Nombre C : ";
    cin>>nbC;

    if (nbA<nbB){

        if (nbB<nbC){

            cout<<nbA<<nbB<<nbC<<endl;
        }
        else{

            cout<<nbA<<nbC<<nbB<<endl;
        }
    }

    else
        if (nbC<nbB){

            if (nbB<nbA){

                cout<<nbC<<nbB<<nbA<<endl;
            }
            else{

                cout<<nbC<<nbA<<nbB<<endl;
            }


        }
        else{

            cout<<nbB<<nbC<<nbA<<endl;
        }




    return 0;
}
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
31 oct. 2012 à 18:35
je ne vois pas où est le problème, d'autant que l'indentation est nickel.
Dans ton cas, le else du premier if n'est pas suivie d'accolade, il ne concerne que l'instruction suivante. On peut considérer le if(nbC<nbB){}else{} comme une seule instruction dans ce contexte.
0
Samiko5580 Messages postés 6 Date d'inscription mardi 16 octobre 2012 Statut Membre Dernière intervention 9 septembre 2014
31 oct. 2012 à 18:41
Ce qui est bizarre c'est quand je tape: _ 2 1 3 il me met 1 3 2
_ 2 3 1 il me met 2 1 3
Pour le reste nickel je comprend vraiment pas :( Quelqu'un c'est m'expliqué mon érreur cars là je ne vois vraiment pas....
0