IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème de boucle


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Par défaut Problème de boucle
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    for(i=0;i<NBCASESCOTE;i++)
    	{
    	  for(j=0;j<NBCASESCOTE;j++)
    	     {
     
    	      if ( matReserve[i][j]!=-1)
    	      {
    	      printf("BRAVO");
    	      }
     
    	     }
     
    	}

    J aimererai verifier que tout les elements de ma matrice sont different de -1, avant de faire BRAVO;

    Le probleme est que des qu il trouve un elememt qui est different de -1 il est ecrit Bravo, Comment regler ce probleme

    Merci d avance
    Cordialement

  2. #2
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Qatar

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 489
    Par défaut
    ton printf ne doit pas etre placer dans la boucle for..

    Poste ton programme entier pour voir de quoi il s'agit au juste..

    Ou bien mets un simple compteur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    unsigned int k=0;
    for(i=0;i<NBCASESCOTE;i++)
    	{
    	  for(j=0;j<NBCASESCOTE;j++)
               {
    	        if ( matReserve[i][j]==-1)
    	           k=k+1;
               }
            }
    if(k>0)
    return 0;
     
    else if(k==0)
    printf("Bravo");
    Je l'aurai fais comme ça.

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    int test=0;  //utilise une variable de teste
     
    for(i=0;i<NBCASESCOTE;i++)
    	{
    	  for(j=0;j<NBCASESCOTE;j++)
    	     {
     
    	      if ( matReserve[i][j]==-1)
    	      {
    	     test=1;
    	      }
     
    	     }
     
    	}
    if(!test)
    printf("Bravo");

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Par défaut
    Apres avoir essayé avec la variable test ca ne marche tjrs pas ...

    Comment faire alors ?

    Si vous pouviez expliciter un peu svp, j'aime bien comprendre mes copiés collés

    Merci encore !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Par défaut
    si je met un break apres printf c est bon ou pas ?

  6. #6
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Citation Envoyé par gotrunkssj Voir le message
    si je met un break apres printf c est bon ou pas ?
    (Tu parles bien de ton code de départ ?)


    Non car le meme problème de logique se passe : dès qu'il va trouver une valeur différente de -1, il va afficher bravo et sortir de la boucle interne, et donc ne pas vérifier toute une floppée d'éléments.


    Voici une explication sur les solutions qui ont été proposées :

    Il faut passer par une variable intermédiaire, et séparer les choses en 2 étapes :

    D'abord tu fais une vérification avec tes deux boucles for sur tous les éléments du tableau pour vérifier qu'aucun élément ne vaut -1. Par exemple, dans le premier exemple avec le "k", on compte le nombre de -1 dans le tableau tout simplement, grace à la variable compteur "k". (et on affiche rien du tout dans la boucle !)

    Ensuite, et seulement ensuite, tu regardes le nombres de -1 dans le tableau: s'il n'y en a aucun (k==0), c'est que c'est bon ! Alors on affiche bravo.


    ce que diogène précisait, c'est que cet algorithme assez simple (un peu plus complexe que ton essai, mais simple quand meme) peut etre beaucoup optimisé : En effet, dès qu'une seule valeur fait -1, tu sais déjà que tu n'affichera de toute façon pas bravo ! Il devient inutile de tester encore les autres valeurs du tableau (imagine si ton tableau a 10000 valeurs... c'est un gros gaspillage de temps si on a vu dès le début que ce n'était pas bon). Donc il devient inutile de continuer les boucles for.

    C'est pour cela que dans son exemple il teste directement la variable qui dit s'il y a un -1 ou pas ("test") dans les conditions de la boucle for.

    Peut être que la manière de tester est inabituelle pour toi :

    test = matrice[i][j] == -1

    ici a chaque passage de boucle : si matrice[i][j] == -1 alors la valeur "vraie" est placée dans test ("vrai" en C se traduit par un nombre entier quelconque différent de 0). Ensuite on teste si test est faux (dans les conditions de for) avant de continuer la boucle. Si test est vrai les boucles for s'arretent. Sinon elles continuent.

    Après les boucles : si test est vrai, il y a donc eu un élément égal à -1 donc on n'affiche pas bravo, sinon on dit bravo.

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par DjoT8 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    int test=0;  //utilise une variable de teste
     
    for(i=0;i<NBCASESCOTE;i++)
    	{
    	  for(j=0;j<NBCASESCOTE;j++)
    	     {
     
    	      if ( matReserve[i][j]==-1)
    	      {
    	     test=1;
    	      }
     
    	     }
     
    	}
    if(!test)
    printf("Bravo");
    Dans ce cas, il est interressant d'arrêter l'exploration du tableau dès que test passe à 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int test=0;  //utilise une variable de test
    for(i=0;i<NBCASESCOTE && !test  ;i++)
        for(j=0;j<NBCASESCOTE && !test  ;j++)	     
           test = matReserve[i][j] == -1;
    if(!test) printf("Bravo");

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39
  3. Problème de boucle
    Par TheUltimaSephiroth dans le forum C
    Réponses: 8
    Dernier message: 10/10/2005, 13h58
  4. Problème de boucle
    Par Louis-Guillaume Morand dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2005, 09h10
  5. Problème de boucle
    Par basclln dans le forum C++
    Réponses: 19
    Dernier message: 02/04/2005, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo