IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

problème "petit programme"


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut problème "petit programme"
    Slt, je débute en programmation et là j'ai quelques difficultées pour faire fonctionner un petit programme. en faite le programme demande à l’utilisateur de taper 10 entiers qui seront stockés dans un tableau. Le programme doit ensuite afficher soit "le tableau est croissant", soit "le tableau est décroissant

    Voici mon code source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        int i; int t[10]; bool croissant=true; bool decroissant=true; bool constant;
     
        cout<<"Veuillez entrer successivement 10 entiers: "<<endl;
     
        for( i=0; i<10; i++ )
        {
            cin>>t[i];
        }
     
        for( i=0; i<10 ; i++ )
        {
     
            if( t[i] < t[i+1] )
            {
     
                croissant = true;
            }
        }
     
     
         for ( i=10; i > 0; i-- )
         {
             if( t[i] > t[i+1] )
            {
     
                decroissant = true;
            }
         }
     
     
             if ( croissant && !decroissant)
             {
                  cout<<"le tableau est croissant "<<endl;
             }
             if ( decroissant && !croissant )
             {
                  cout<<"le tableau est decroissant "<<endl;
             }
     
        return 0;
     
    }
    Pourriez vous m'aider a déceler mon erreur ?
    Merci d'avance

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par elbigo Voir le message
    Pourriez vous m'aider a déceler mon erreur ?
    Quelle erreur ? compilation, link, crash à l'exécution, mauvais résultats donné par ton programme, avec quelle données en entrée ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut
    c'est plutot mauvais résultat donné par le programme, après avoir entré les 10 entiers, le programme ne m'affiche pas à la fin : le tableau est croissant ou décroissant

  4. #4
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    1/ les entiers que tu saisis sont bien ordonnés?

    2/ tes deux booleen sont a true dès l'initialisation.
    --> ils sont déclaré à true au début
    --> rien ne les positionne a false.


    je verrai plutot un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    using namespace std;
     
    int main()
    {
        int i; int t[10]; bool croissant=true; bool decroissant=true; bool constant;
     
        cout<<"Veuillez entrer successivement 10 entiers: "<<endl;
     
        for( i=0; i<10; i++ ) {
            cout<<"i = "<< i << std::endl;
            cin>>t[i]; // rempli entre 0 et 9
        }
     
        for( i=0; i< 9 ; i++ ) { // 9 + 1 = 10
            cout<<"i = "<< i << ":" << t[i] << ":" << t[i+1] << std::endl;
     
             if( t[i] > t[i+1] ) { // ici on commence a i=0,i+1=1 
                                      // et on finis a i=8,i+1=9
                croissant = false;
                // pas besoin de continuer la boucle 
                //  Une rupture dans la croissance est detectée 
                break;
             }
        }
     
        for ( i=9; i > 0; i-- )  { // cf remarque pour l'autre boucle
            cout<<"i = "<< i << ":" << t[i] << ":" << t[i+1] << std::endl;
            if( t[i] > t[i+1] ) {
                decroissant = false;
                // pas besoin de continuer la boucle 
                //  Une rupture dans la croissance est detectée 
                break;
            }
         }
         if ( croissant && !decroissant) {
              cout<<"le tableau est croissant "<<endl;
         } else if ( decroissant && !croissant ) {
              cout<<"le tableau est decroissant "<<endl;
         } else {
              std::cout << "??" << std::endl;
        }
     
        return 0;
     
    }

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Tu as plusieurs problèmes

    problème de boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        for( i=0; i<10 ; i++ )
        {
     
            if( t[i] < t[i+1] )
    Lorsque i = 9 (dernière valeur valide de ton tableau), tu testes entre t[9] et t[10]. t[10] est hors des limites de ton tableau ==> Comportement indéfini

    un problème dans le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        for( i=0; i<10 ; i++ )
        {
     
            if( t[i] < t[i+1] )
            {
     
                croissant = true;
            }
        }
    avec les données 4, 2, 6, tu vas dire que ton tableau est croissant (alors que c'est faux) car dans ta boucle telle qu'elle est faite, le denier test vrai efface toutes autres valeurs de ton boolean.

    Autre chose (mais c'est moins grave pour l'instant), ta variable bool constant; n'est pas utilisée (ni initialisée). Un compilateur bien réglé avec un niveau de warning bien configuré aurait dû te le signaler.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut
    ah ok merci. je vois plus claire avec ton code source

  7. #7
    Membre habitué
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for ( i=9; i > 0; i-- )  { // cf remarque pour l'autre boucle
            cout<<"i = "<< i << ":" << t[i] << ":" << t[i+1] << std::endl;
            if( t[i] > t[i+1] ) {
                decroissant = false;
                // pas besoin de continuer la boucle 
                //  Une rupture dans la croissance est detectée 
                break;
            }
    dans cette partie du code ça serait pas plutot decroissant = true, je m'enmèle un peu les pinceaux avec les booléens.

  8. #8
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Citation Envoyé par elbigo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for ( i=9; i > 0; i-- )  { // cf remarque pour l'autre boucle
     
            cout<<"i = "<< i << ":" << t[i] << ":" << t[i+1] << std::endl;
            if( t[i] > t[i+1] ) {
                decroissant = false;
                // pas besoin de continuer la boucle 
                //  Une rupture dans la croissance est detectée 
                break;
            }
    dans cette partie du code ça serait pas plutot decroissant = true, je m'enmèle un peu les pinceaux avec les booléens.
    positionner decroissant a true ne servirait a rien car il s'agit de sa valeur initiale (au moment ou tu l'a déclaré).
    En fait c'est une erreur dans l'opérateur de comparaison choisi pour le if. le code serait plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            if( t[i] < t[i+1] ) {
                decroissant = false;
                // pas besoin de continuer la boucle 
                //  Une rupture dans la croissance est detectée 
                break;
            }

  9. #9
    Membre habitué
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for( i=0; i< 9 ; i++ ) { // 9 + 1 = 10
            cout<<"i = "<< i << ":" << t[i] << ":" << t[i+1] << std::endl;
     
             if( t[i] > t[i+1] ) { // ici on commence a i=0,i+1=1 
                                      // et on finis a i=8,i+1=9
                croissant = false;
                // pas besoin de continuer la boucle 
                //  Une rupture dans la croissance est detectée 
                break;
             }
    j'ai compris ton explication d'avant mais par contre pour cet exemple je ne comprend pas pourquoi la boucle va de i=0 à i=9 alors que tu as mis en commentaire // 9 + 1 ? ça ne serait pas plutot for ( i =0; i <= 10 ) là on inclut 10 ?

  10. #10
    Membre habitué
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut
    c'est bon jabbounet, j'ai tout compris merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème sur petit programme
    Par tamerla dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 19/01/2014, 11h32
  2. [SQL-Server] Problèmes de guillemets et quotes dans un INSERT
    Par gregb34 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/05/2006, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo