Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème avec la boucle do while

Langage C

    3 février 2024 à 16:33:25

    #include <stdio.h>
    #include <stdlib.h>
    
    int  B[20][20];
    int  L,C; 
    
      int main()
    do
         {
         printf ("veuillez entrer la valeur de la ligne\n");
         scanf ("%d",&L);
         printf ("veuillez entrer la valeur de la colonne\n");
         scanf ("%d",&C);
         }while ((L<=0 && L>20) && (C<=0 && C>20) && (L!=C));
     Boujour,je suis josué kouamé, je  ne sais pas pourquoi la condition ne s'applique pas merci . (code block 20.03)

    -
    Edité par JosueKouame 3 février 2024 à 16:49:40

    • Partager sur Facebook
    • Partager sur Twitter
      3 février 2024 à 17:40:39

      Hello,

      Si je comprends bien, tu souhaites quitter le do....while si

      • L>0 et L<21 et si
      • C>0 et C<21 et si
      • L!=C

      Remplace alors ta condition par

      } while((L<1 || L>20) || (C<1 || C>20) || (L==C));

      ça fonctionnera. Pourquoi ? Car il faut reposer les questions si L (ou C) est inférieur à 1 ou si L (ou C) est supérieur à 20 ou si L est égal à C.

      A noter que les parenthèses à l'intérieur du while() ne sont pas nécessaires dans ce cas-ci.

      -
      Edité par edgarjacobs 3 février 2024 à 18:26:54

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        4 février 2024 à 9:28:31

        La condition fait exactement ce qui est écrit. Le probleme c'est que ce qui est écrit ne correspond pas à ce qu'on souhaiterait. Qu'il ne faut pas avoir peur de décrire explicitement si veut comprendre où est la différence.

        Quoi qu'il en soit : une condition comme  x<1 && x>20  est toujours fausse.  Un nombre ne peut pas à la fois être plus petit que 1 et plus grand que 20.

        Si (supposons) on cherche à vérifier qu'il est plus petit que 1 ou bien plus grand que 20, c'est un ou entre les deux inégalités, opérateur || à la place de &&.

        Ps ne pas hésiter à écrire les conditions composées sur plusieurs lignes pour faciliter la relecture

        while (   x < a || x > b
               || y < c || y > d );



        -
        Edité par michelbillaud 4 février 2024 à 10:09:51

        • Partager sur Facebook
        • Partager sur Twitter
          6 février 2024 à 11:40:55

          Bonjour à tous,

          Lorsqu'on fait une boucle à répéter tant que certaines conditions ne sont pas réunies, il est souvent plus naturel de :

          • recenser les conditions en question
          • utiliser l'opérateur de négation

          Ainsi, par exemple, en supposant que les conditions à réunir pour l'on puisse sortir de la boucle soient :

              L > 0 && L < 21 &&
              C > 0 && C < 21 && L != C

          on peut écrire la condition de test suivante afin de répéter le code tant que ces conditions ne sont pas réunies :

          while ( !(L > 0 && L < 21 &&
                    C > 0 && C < 21 && L != C) );

          on peut aussi faire un while (1) pour répéter le bloc systématiquement et faire un simple test if avec un break pour sortir de la boucle.


          • Partager sur Facebook
          • Partager sur Twitter
            7 février 2024 à 4:18:11

            @Dlks:

            J'ai déjà fait de façon automatique la conversion d'un programme Pascal en C.

            J'avais des boucles  do ... until  que j'ai converti en  do ... while  en faisant bêtement l'inverse de la condition

            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              7 février 2024 à 8:57:18

              Les macros pour faire semblant de programmer en Pascal

              #define REPEAT       do {
              
              #define UNTIL(cond)  } while( !(cond) )


              Ps: à part ça, le découpage en fonctions est votre ami pour maîtriser la complication

              do {
                   printf ("veuillez entrer la valeur de la ligne\n");
                   scanf ("%d",&L);
                   printf ("veuillez entrer la valeur de la colonne\n");
                   scanf ("%d",&C);
              }while ( ! coordonnees_valides(L, C));
              
              
              

              avec

              bool coordonnees_valides(int L, int C) 
              {
                  if (L <= 0 || L > 20) return false;
                  if (C <= 0 || C > 20) return false;
                  if (L == C)           return false;  // sûr ?
                  return true;
              }
              


              Avec la programmation dans le style "examinons successivement les raisons qui permettraient de conclure de suite". Très courant en programmation de gestion (*), où il faut parfois vérifier des dizaines de conditions sur le contenu d'un formulaire par exemple. C'est beaucoup plus facile à relire et maintenir que des conditions imbriquées

              (*) une pensée émue pour le EVALUATE FALSE en Cobol !



              -
              Edité par michelbillaud 8 février 2024 à 15:34:23

              • Partager sur Facebook
              • Partager sur Twitter

              problème avec la boucle do while

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown