Probleme for

Résolu/Fermé
Bill - Modifié le 2 oct. 2020 à 01:29
Bimoil Messages postés 29 Date d'inscription samedi 3 octobre 2020 Statut Membre Dernière intervention 21 novembre 2020 - 4 oct. 2020 à 01:42
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 ";
}
A voir également:

6 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 2 oct. 2020 à 14:54
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
0
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.
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
3 oct. 2020 à 11:49
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
0
Bimoil Messages postés 29 Date d'inscription samedi 3 octobre 2020 Statut Membre Dernière intervention 21 novembre 2020
Modifié le 3 oct. 2020 à 18:37
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;

}
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
3 oct. 2020 à 18:42
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bimoil Messages postés 29 Date d'inscription samedi 3 octobre 2020 Statut Membre Dernière intervention 21 novembre 2020
Modifié le 3 oct. 2020 à 19:00
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;
}


}
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
3 oct. 2020 à 21:08
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
?
0
Bimoil Messages postés 29 Date d'inscription samedi 3 octobre 2020 Statut Membre Dernière intervention 21 novembre 2020
Modifié le 4 oct. 2020 à 01:44
Oui, merci !
0