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 :

Ou est mon erreur?


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chomeur
    Inscrit en
    Janvier 2017
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Chomeur

    Informations forums :
    Inscription : Janvier 2017
    Messages : 3
    Par d�faut Ou est mon erreur?
    Bonjour,

    J'apprend le c++ depuis quelques jours maintenant et je suis bloqu� a un exercice "de base" . J'ai r�ussi a corriger toutes les erreurs qu'a rep�rer codeblocks mais mon projet ne fait toujours pas ce que je voudrais. Je m'explique.

    J'aimerais que mon "logiciel" face ceci: On rentre la largeur et la hauteur d'un rectangle puis son nom. Le logiciel "dessine" ensuite un rectangle avec des * (jusque la, mon logiciel fonctionne). Mais, j'aimerais que si l'on rentre une largeur ou une hauteur n�gative, le logiciel affiche un message du style "Vous ne pouvez pas rentrer de donn�es n�gatives".

    Et c'est la que ca se gatte, quoi que je face d�sormais, mon logiciel m'indique mon message d'erreur. Ca vient surement de la ligne de code 31 mais je n'arrive pas a voir ou est mon erreur. HELP!



    Je met juste un lien de l'image au cas ou j'ai rat�e l�Aper�u: http://image.noelshack.com/fichiers/...e-exercice.png

    Merci infiniment de votre lecture!

    Ps: il n'y a pas moyen de publier des lignes de code sans avoir a faire de capture d��cran?

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par d�faut
    Tu r�alises tes tests sur des entiers non sign�s (cf. d�claration ligne 21), donc contraints sur l'intervalle [0..UINT_MAX]. Active bien tous les warnings de ton compilateur, c'est en r�gle g�n�rale quelque chose qu'il est capable de d�tecter.

    Citation Envoy� par JoanDeulofeu Voir le message
    Ps: il n'y a pas moyen de publier des lignes de code sans avoir a faire de capture d��cran?
    Copier-coller ton code entre balises [ code ] ... [/ code ] (sans les caract�res d'espacement).

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chomeur
    Inscrit en
    Janvier 2017
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Chomeur

    Informations forums :
    Inscription : Janvier 2017
    Messages : 3
    Par d�faut
    Citation Envoy� par Matt_Houston Voir le message
    Tu r�alises tes tests sur des entiers non sign�s (cf. d�claration ligne 21), donc contraints sur l'intervalle [0..UINT_MAX]. Active bien tous les warnings de ton compilateur, c'est en r�gle g�n�rale quelque chose qu'il est capable de d�tecter.
    Alors je vais peut �tre passer pour un idiot mais je d�bute et j'ai pas tout compris. �a veut dire quoi " contraints sur l'intervalle [0..UINT_MAX] " ? Je r�alise mes tests sur des "unsigned int" car je veux que l'utilisateur puisse rentr� des nombres positifs OU n�gatifs. Du coup, je suis bien obliger de m��tre "unsigned int", non?

    Sinon, voici le code entier du programme :

    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
     #include <iostream>
     
    using namespace std;
     
    void creerRectangle (int l, int h, string nomFigure)
    {
        for (int hauteur(0); hauteur< h; hauteur++)
        {
     
            for (int largeur(0); largeur< l; largeur++)
            {
            cout << "*";
            }
            cout << endl;
        }
        cout << nomFigure << " est terminer! C'est merveilleux." << endl;
    }
     
    int main()
    {
        unsigned int largeur(0), hauteur(0);
        string nomFigure("sans nom");
     
        cout << "Quelle est sa largeur ?" << endl;
        cin >> largeur;
        cout << "Quelle est sa hauteur ?" << endl;
        cin >> hauteur;
        cout << "Quel nom voulez vous donner a votre rectangle ?" << endl;
        cin >> nomFigure;
     
        if (largeur < 0 )
        {
            cout << "La largeur doit etre positive." << endl;
        }
        else if (hauteur < 0 )
        {
            cout << "La hauteur doit etre positive." << endl;
        }
        else
        {
            creerRectangle(largeur, hauteur, nomFigure);
        }
     
        return 0;
    }
    Et comment activer tout les warnings aussi stp? ^^

  4. #4
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par d�faut
    Non justement, les entiers non sign�s (sans signe, donc) mod�lisent une partie de l'ensemble des entiers naturels. Lorsqu'on les convertit en entiers relatifs ils correspondent donc � des nombres positifs ou nuls. Ici tu as besoin au contraire d'entiers sign�s, ce qui est le comportement par d�faut (lorsqu'unsigned n'est pas pr�cis�). Si tu veux �tre explicite tu peux ajouter le mot-clef signed.

    Citation Envoy� par JoanDeulofeu Voir le message
    Alors je vais peut �tre passer pour un idiot
    Certainement pas, lis la derni�re maxime de la signature de ternel au-dessus.


    Citation Envoy� par JoanDeulofeu Voir le message
    Et comment activer tout les warnings aussi stp? ^^
    �a, �a d�pend de ton compilateur / IDE ; je te laisse te r�f�rer � sa documentation ou chercher en ligne. Avec GCC / CLang on peut choisir de sp�cifier, par exemple, -Wall -Wextra.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Chomeur
    Inscrit en
    Janvier 2017
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Chomeur

    Informations forums :
    Inscription : Janvier 2017
    Messages : 3
    Par d�faut
    Citation Envoy� par Matt_Houston Voir le message
    Non justement, les entiers non sign�s (sans signe, donc) mod�lisent une partie de l'ensemble des entiers naturels. Lorsqu'on les convertit en entiers relatifs ils correspondent donc � des nombres positifs ou nuls. Ici tu as besoin au contraire d'entiers sign�s, ce qui est le comportement par d�faut (lorsqu'unsigned n'est pas pr�cis�). Si tu veux �tre explicite tu peux ajouter le mot-clef signed.
    D'ACCORD !!!! J'ai pas compris ca quand j'ai appris les types de variables! Merci beaucoup de votre aide, �a fait au moins 4 heures que je gal�rais.

    Ca y est du coup, mon programme marche , merci encore!

  6. #6
    Responsable Syst�mes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Ao�t 2011
    Messages
    18 270
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Gestion de parcs informatique
    Secteur : High Tech - Mat�riel informatique

    Informations forums :
    Inscription : Ao�t 2011
    Messages : 18 270
    Par d�faut
    Pour t'expliquer la diff�rence entre signed et unsigned int :

    Je pars du postulat qu'un int est cod� sur 16 bits. Tu as donc 2 puissance 16 valeurs possibles soit 65536 (2 car en binaire on a 0 ou 1 comme valeurs possible pour 1 bit). Les valeurs possibles seront donc de 0 � 65535.

    Parlons des nombres n�gatifs maintenant. Une convention a �t� mise en place pour utiliser le bit de poids fort (le bit le plus � gauche) pour g�rer le signe 0 : nombre positif 1 :nombre n�gatif.

    Il ne te reste donc plus que 15 bits pour le nombre ->2 puissance 15=32768 valeurs possibles.
    donc les valeurs possible seront de 0 � 32767 ou de -32767 � -0, ce qui donne -32767 � 32767. Je montre le -0, car en informatique, il existe et est �quivalent � 0 m�me si il n'a pas de sens en math�matique pure.

    Pour indiquer qu'on travaille en arithm�tique non sign� (ce qui signifie sans signe, donc positif), on utilise un unsigned int, �a veut dire que sans pr�cision, on est en arithm�tique sign�.

    Cela avait une tr�s grosse importance avant, ou l'on avait pas beaucoup de m�moire, et ou en �tait limit� � 16 bits. Cela en a moins maintenant ou on a des processeurs 64 bits, et des registres 128 ou 256 bits pour les instructions CPU SSE

    Je pense qu'un int est maintenant sur 32 bits, � v�rifier au niveau norme.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    r�ponse � ton ps: Si, il suffit de coller le code dans une balise &#91;code&#93; (le bouton #). Ou pour quelques mots, il y a &#91;c&#93; ou &#91;codeinline&#93;

    R�ponse � ta question:
    Quel est le type de tes variables?

  8. #8
    Membre tr�s actif
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Mai 2014
    Messages
    227
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par d�faut
    On va surement te le dire plusieurs fois donc je me permet d'afficher directement le code en format texte :

    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
     
    int main()
    {
       unsigned int largeur(0), hauteur(0);
       string nomFigure("sans nom");
     
       cout << "Quelle est sa largeur ?" << endl;
       cin >> largeur;
       cout << "Quelle est sa hauteur ?" << endl;
       cin >> hauteur;
       cout << "Quel nom voulez vous donner a votre rectangle ?" << endl;
       cin >> nomFigure;
     
       if (largeur <= -1)
       {
          cout << "La largeur doit etre positive." << endl;
       }
       else if(hauteur <= -1)
       {
          cout <<"La hauteur doit etre positive." << endl;
       }
       else
       {
          creerRectangle(largeur, hauteur, nomFigure);
       }
     
       return 0;
    }
    Ton code fonctionne bien, tu peux aussi simplifier de la sorte si tu n'as qu'une instruction apr�s ton if :

    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
     
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        unsigned int largeur{0} hauteur{0};
        string nomFigure{"Sans nom"};
     
        cout << "Quelle est sa largeur ?" << endl;
        cin >> largeur;
        cout << "Quelle est sa hauteur ?" << endl;
        cin >> hauteur;
        cout << "Quel nom voulez vous donner a votre rectangle ?" << endl;
        cin >> nomFigure;
     
        if( largeur < 0 )
            cout << "La largeur doit etre positive." << endl;
        else if( hauteur < 0 )
            cout << "La hauteur doit etre positive." << endl;
        else
            creerRectangle(largeur, hauteur, nomFigure);
     
       return 0;
    }
    Et chez moi il n'y a aucune erreur car j'ai d�sactiver certain param�tre mais en soit, n'utilisa pas d'unsigned int, utilise un int car, unsigned int ( entier sign� ) ne te permet que de stocker des nombres positif ou une valeur nul. Donc le fait de faire un comparaison de la sorte doit surement t'afficher des erreurs

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. D�butant, quelle est mon erreur ?
    Par vladimire dans le forum Servlets/JSP
    R�ponses: 5
    Dernier message: 15/05/2009, 23h43
  2. [VC#] - Je ne comprends pas ou est mon erreur !
    Par epc dans le forum Windows Forms
    R�ponses: 32
    Dernier message: 03/11/2008, 19h10
  3. O� est mon erreur ?
    Par diaruga dans le forum C#
    R�ponses: 6
    Dernier message: 04/08/2008, 11h56
  4. [MySQL] Mais ou est mon erreur de syntax?
    Par pierrot10 dans le forum PHP & Base de donn�es
    R�ponses: 5
    Dernier message: 07/10/2006, 15h59
  5. O� est mon erreur ?
    Par Fusio dans le forum Langage
    R�ponses: 5
    Dernier message: 07/04/2006, 17h29

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