Problème dans la boucle for.

Résolu
brie -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
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.

3 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  3. brie
     
    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