Problème dans la boucle for.

Résolu/Fermé
brie - 15 oct. 2011 à 21:45
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 16 oct. 2011 à 14:25
Bonsoir, je souhaite afficher le contour d'un rectangle de taille N*M; mon programme ne fonctionnait pas correctement jusqua ce que je retire les acolades {} de ma dernière boucle for (que jai surligne en gras) dans mon code. Maintenant il fonctionne mais je n'ai toujours pas compris la subtilité entre: for (...) {instruction}
et for(...) instruction

Voici mon code:


#include <iostream>
using namespace std;

int main(void)
{
int i, j, longueur, hauteur;
cout<<"entrez la longueur du rectangle"<<endl;
cin>>longueur;
cout<<"entrez la hauteur du rectangle"<<endl;
cin>>hauteur;
for (i=0;i<longueur;i++)
cout<<"*";
cout<<endl;
for (i=1;i<hauteur-1;i++)
{
cout<<"*";
for (j=1;j<longueur-1;j++)
{
cout<<" ";
}
cout<<"*";
cout<<endl;

}
for (i=0;i<longueur;i++)

cout<<"*";
cout<<endl;


return 0;
}



Jespere avoir été suffisament clair pour que vous puissiez m'expliquer. Merci d'avance.
A voir également:

3 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
16 oct. 2011 à 14:25
Salut,

quand je mets les accolades autour des 2 instructions jai une ligne verticale d'étoiles; et quand je ne mets pas les acolades jai une ligne horizontale.

Oui c'est ça.

avec accolades
i égal 0
for vérifie la condition
si ok
écrit une *
écrit un saute de ligne
i est incrémenté

i égal 1
for vérifie la condition
si ok
écrit une *
écrit un saute de ligne
i est incrémenté

i égal 2
.
.
.
jusqu'à quand i égal longueur

Ce qui donne ça
*
*
*


Sans accolades

i égal 0
for vérifie la condition
si ok
écrit une *
i est incrémenté

i égal 1
for vérifie la condition
si ok
écrit une *
i est incrémenté

i égal 2
.
.
.
jusqu'à quand i égal longueur

A la fin écrit un saut de ligne

Ce qui donne ça

********


1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
Modifié par lami20j le 15/10/2011 à 23:13
Salut,

SI j'ai bien compris c'était comme ça avant?
for (i=0;i<longueur;i++)  
{  
cout<<"*";  
cout<<endl;  
}


En ce cas les instructions sont écrit jusqu'à quand i égal avec la longueur.
A chaque passage dans la boucle le programme écrire un * suivi d'un fin de ligne

for (i=0;i<longueur;i++) 

cout<<"*"; 
cout<<endl;  

Dans ce cas c'est seulement l'écriture du * qui se fera jusqu'à quand i égal longueur
Ensuite un saut de ligne sera écrit.

Si pour for il n'y a qu'un instruction alors les accolades ne sont pas obligatoires.
for(...) 
   instruction1;


ou

for(...) 
{ 
  instruction1; 
}
c'est la même chose

En revanche s'il y a plusieurs instructions les accolades sont obligatoires
for(...) 
{ 
   instruction1; 
   instruction2; 


   instructionN; 
} 

Si on ne mets pas les accolades alors on est dans le cas
for(...) 
   instruction1;

lami20j
0
Merci bcp lami20j d'avoir pris le temps de me répondre. Je comprends mieux maintenant, enfaite quand je mets les accolades autour des 2 instructions jai une ligne verticale d'étoiles; et quand je ne mets pas les acolades jai une ligne horizontale.
0