Boucle for et conditionnelle if en c++

Résolu/Fermé
Utilisateur anonyme - Modifié par mamiemando le 22/03/2017 à 09:58
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 22 mars 2017 à 10:13
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

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié par mamiemando le 22/03/2017 à 10:17
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