Probleme for [Résolu]

Signaler
-
Messages postés
8
Date d'inscription
samedi 3 octobre 2020
Statut
Membre
Dernière intervention
8 octobre 2020
-
Hi, je tente de faire cette algo.


x
xx
xxx
xxxx
xxxxx

J'ai tenter quelque chose, mes sa ne fonctionne pas.

for (int b(0); b < 5; b++)
{
for (int k(1); 1 > k; ++b)
{
cout << "*x ";
}

6 réponses

Messages postés
5429
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
904
Salut Bill,

Tu dois déboguer ton code.

Cela fait partie du processus normal de programmation.

Le premier problème que tu devrais tenter de corriger est le suivant : dans ta boucle imbriquée, tu fais dépendre la condition de sortie de la valeur de k, qui vaut initialement 1.
  • lors de la première itération de cette boucle la condition 1 > 1 est fausse, donc la boucle imbriquée for n'est pas exécutée (ce n'est sans doutes pas ce que tu recherches)
  • à aucun endroit de ton code tu ne changes la valeur de k, donc la boucle imbriquée for n'est de ce fait jamais exécutée (c'est du code mort ou inaccessible, qui ne sert à rien)


Une fois que tu auras résolu ces problèmes là, tu en verras d'autres. Identifie leurs causes et corriges les, et répète ce processus jusqu'à ce que le code fasse ce que tu attends.

Dal
Hi,
J'ai tenter de modifier mon code me sa ne fonctionne toujours pas, est ce qu'il est possible de m'expliquer peut-être plus en détaille le fonctionnement de la boucle pour, car ses peut être un manque de compréhension.
Messages postés
464
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
8 octobre 2020
61
Bonjour,

Une boucle
for
est définie par quatre éléments.
for ( <initialisation> ; <condition nécessaire> ; <expression pour réitération> )
   <effectué à chaque itération>

<initialisation> : on y déclare et/ou initialise ici la variable qui évoluera à chaque itération.
<condition> : à chaque itération y compris au début, cette expression doit être vraie, dès qu'elle devient fausse la boucle s'arrête.
<expression pour réitération> : après avoir <effectué à chaque itération>, cette expression est effectuée, cela permet de passer au cas suivant.
<effectué à chaque itération> : l'instruction à effectuer, s'il y a plusieurs choses on les regroupe en les encadrant par des accolades {}.

Des exemples :
// i commence à 2
// on continue tant qu'il reste inférieur à 5
// on ajoute 1 avant de recommencer
for ( int  i{2} ;  i <= 5 ;  ++i ) {
    std::cout << i << "  ";
} // donc va afficher : 2  3  4  5

// i commence à 5, on continue tant qu'il est positif, ici i doit être décrémenté
for ( int  i{5} ;  i >= 0 ;  --i ) {
    std::cout << i << "  ";
} // donc va afficher : 5  4  3  2  1  0

// on commence à -3, tant que le carré de i reste inférieur à 50, on avance de 2 en 2
for ( int  i{-3} ;  i*i < 50 ;  i+=2 ) { 
    std::cout << i << "  ";
} // donc va afficher : -3  -1  1  3  5  7

// idem en commençant par -8
for ( int  i{-8} ;  i*i < 50 ;  i+=2 ) { 
    std::cout << i << "  ";
} // rien n'est exécuté, le carré de 8 ne vérifie pas la condition
Messages postés
8
Date d'inscription
samedi 3 octobre 2020
Statut
Membre
Dernière intervention
8 octobre 2020

Je comprend, mais lorsque j'essaie de faire une imbrication sa ne fonctionne pas.
J'ai mis mon initialisation a 0 et je veut que le compteur s'arrête a 10. Pour ce qui est de la expression pour réitération je veut qu'elle augmente de 1 à chaque fois.
Je ne vois pas mon erreur.
ça devrait donner quelque chose comme sa


x
xx
xxx
xxxx
xxxxx
jusqu'à 10.


for (int i(0); i > 10; i++)
{

for (int j(0); i < 10; i++)

{
cout << endl;
cout << "* ";
}


cout << endl;

}
Messages postés
5429
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
904
Ta première boucle n'est jamais exécutée, car
i > 10
est faux.

Fais déjà une seule boucle, dans laquelle tu affiches un seul x par ligne, donc un x suivi d'un retour à la ligne. Teste ton programme et vérifie qu'il fonctionne.

Lorsque tu auras fait cela, intègre une deuxième boucle, qui affiche un nombre de x par ligne augmenté de 1 à chaque itération suivis d'un retour à la ligne.

Tu auras alors terminé ton programme.
Messages postés
8
Date d'inscription
samedi 3 octobre 2020
Statut
Membre
Dernière intervention
8 octobre 2020

Ma première boucle fonctionne le problème est ma deuxième.
J'ai crée cette algo avec algobox sans problème cependant a c++ il y a quelque chose que je ne comprend pas


{
int i, j;

for (i = 0; i < 10; i++)
{
cout << "* " << endl;

for (j = 0; j< 10; j++)
cout << "* " << endl;
}


}
Messages postés
464
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
8 octobre 2020
61
Ce que ton code fait :
Faire 10 fois :
- écrire une étoile seule sur une ligne.
- et écrire 10 étoiles seules sur une ligne (tu ajoutes un retour à la ligne après chaque étoile.)
Donc ton code va écrire 10*11=110 lignes d'une seule étoile! Tu es loin du résultat.

Ce qu'il faut faire :
Faire 10 fois :
- écrire X étoiles (X vaut 1 la première fois, 2 la seconde, ...)
- et revenir à la ligne.

Une idée : Si
j
varie de 0 jusqu'à
i
inclus, combien y aura-t-il d'étoiles en fonction de
i
?
Messages postés
8
Date d'inscription
samedi 3 octobre 2020
Statut
Membre
Dernière intervention
8 octobre 2020

Oui, merci !