Boucle for et conditionnelle if en c++

Résolu
Utilisateur anonyme -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

l'exercice suivant m'est demandé pour moi il devrait afficher 577891 mais il affiche 577890 pourquoi

quand la boucle for arrive à la valeur m =9 elle l'exécute et cela donne 9 puis s'arrête car m doit être inférieur à n et non pas inférieur ou égal
et ensuite on fait le if du bas qui doit exécuter p-m =1 et non pas 0
quelqu'un peut il encore m'aider
cordialement

#include <iostream>

using namespace std;

int main() {
    int m;
    int p(10);
    int n(10);
    bool test(false);

    for ( m = n / 2; m < n ; ++m) {
        if (test and ((m + n) % 2 == 0)) {
            cout << m + 1 << " ";
        } else {
            cout << m << " ";
            test = not test;
        }
    }

    if (m > p) {
        cout << m + p << " ";
    } else {
        cout << p - m << " ";
    }
    return 0;
}

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Quelques conseils préalables

    - indente ton programme correctement
    - merci d'utiliser les balises de code (4e bouton au dessus de la boite dans laquelle tu tapes ton message), ça t'aurait d'ailleurs permis d'écrire ton texte en indiquant les numéros de lignes en modifiant ton texte une fois le rendu fait.
    - évite d'utiliser
    namespace std;
    ou du moins garde à l'esprit que dans un header, il faudra savoir t'en passer. Ici un
    using std::cout;
    dans ton
    main()
    serait bien plus propre.
    - pour les types de bases (
    int
    ,
    bool
    ...) tu peux initialiser comme tu l'aurais fait en C (par exemple
    int x = 7
    ).
    - personnellement je trouve que
    size_t
    ou
    unsigned int
    est mieux que
    int
    si tu ne manipules que des entiers positifs.
    - généralement les gens utilisent plutôt
    &&
    ou
    !
    , au lieu de
    and
    et
    not
    même s'ils existent en C++

    Passons maintenant au problème

    - À la fin de ton programme
    p == m
    et
    p == 10
    et c'est pour cela que le dernier chiffre écrit est
    0
    . Je ne sais pas si ça répond à ta question.

    - Si tu veux plus de détails, le plus simple est de regarder le comportement de ton programme avec un debogueu. Puis en exécutant ton programme pas à pas en regardant les valeurs de tes variables, tu devrais arriver à comprendre ce qui ne va pas (n'ayant pas l'énoncé, c'est compliqué pour moi de t'en dire plus !).

    Par exemple, si tu es sous linux tu peux déboguer avec
    gdb
    :

    g++ -g toto.c -o titi
    gdb titi


    Maintenant que
    gdb
    est lancé :

    b main
    r


    ... puis
    n
    pour avancer d'une instruction,
    p toto
    pour afficher la valeur de toto ; tu peux appuyer sur entrée pour répéter la dernière instruction gdb.

    Bonne chance
    0