Partage
  • Partager sur Facebook
  • Partager sur Twitter

la boucle while

Sujet résolu
    21 octobre 2016 à 21:53:52

    salut tous le monde 

    quelle est la différence entre : 

    while (tab1[i] != lettre && i<len             ){i++;}
    while (i<len             && tab1[i] != lettre ){i++;}


    car quand j'ai utiliser la premier instruction j'ai une erreur mais quand j'ai utilise la deuxième instruction le programme fonctionne correctement 

    voila une photo du code du programme pour que vous sachez ce que je veux faire 

    • Partager sur Facebook
    • Partager sur Twitter
      21 octobre 2016 à 22:22:18

      Bonsoir,

      while (i<len             && tab1[i] != lettre ){i++;}

      On test la première condition : i<len, si c'est faut, on sort de la boucle sans tester la deuxième conditions.

      C'est un ET, donc les deux valeurs doivent être vraies, pas utile de tester la deuxième condition du coup, si la première est fausse.

      while (tab1[i] != lettre && i<len             ){i++;}

      On test la première condition : tab1[i] != lettre, si i==lent, ça pose  problème, on dépasse la valeur de la taille du tableau. Ce n'est pas le cas si on inverse les conditions.

      C'est transparent, on ne le voit pas. L'emplacement des conditions ont aussi de l'importance.

      C'est comme faire :

      10*2/4=5
      4/2*10=20

      Je ne sais pas si c'est clair, je peux essayer de le redire autrement.

      Bonne continuation.

      -
      Edité par pctronique 21 octobre 2016 à 22:28:57

      • Partager sur Facebook
      • Partager sur Twitter
        21 octobre 2016 à 23:17:36

        déjà merci beaucoup pour ta réponse rapide 

        j'avoue que c'est très bien explique mais je n'arrive pas a distingué la différence entre les deux cas malgré que j'ai compris l'exemple avec les chiffre 

        dans ma tete je vois les chausses comme ca :

        supposant que j'ai choisie la lettre qui n'existe pas dans le tableau (lettre = p)

        on arrive à i=2 puis on incrément et ca devient i=3

        dans le 1ere cas : dans la boucle while on test  3<3 qui n'est pas réalisé donc on sort de la boucle sans incrémentation 

        dans le 2eme cas :dans la boucle while on test si tab[3]!=lettre or si r != p ce qui est juste puis on test si 3<3 ce qui est faux donc on sort de la boucle sans incrémentation 

        ce qui veux dire que c'est la même chose ? 

        • Partager sur Facebook
        • Partager sur Twitter
          21 octobre 2016 à 23:42:51

          __________________________
          |   a   |   b   | a && b |
          __________________________
          | false | false |  false |
          __________________________
          | false | true  |  false |
          __________________________
          | true  | false |  false |
          __________________________
          | true  | true  |  true  |
          __________________________
          char[] tab1 = {'a', 'z', 'e', 'r'};
          _________________________________________________________________________________________
          | i || len  || lettre || tab[i] || i<len  | tab[i]!=lettre | i<len && tab1[i] != lettre |
          _________________________________________________________________________________________
          | 0 ||   4  ||   k    ||   a    ||  true  |      true      |          true              |
          _________________________________________________________________________________________
          | 1 ||   4  ||   k    ||   z    ||  true  |      true      |          true              |
          _________________________________________________________________________________________
          | 2 ||   4  ||   k    ||   e    ||  true  |      true      |          true              |
          _________________________________________________________________________________________
          | 3 ||   4  ||   k    ||   r    ||  true  |      true      |          true              |
          _________________________________________________________________________________________
          | 4 ||   4  ||   k    || error  || false  |     error      |          false             |
          _________________________________________________________________________________________
          _________________________________________________________________________________________
          | i || len  || lettre || tab[i] || tab[i]!=lettre | i<len  | tab1[i] != lettre && i<len |
          _________________________________________________________________________________________
          | 0 ||   4  ||   k    ||   a    ||      true      |  true  |          true              |
          _________________________________________________________________________________________
          | 1 ||   4  ||   k    ||   z    ||      true      |  true  |          true              |
          _________________________________________________________________________________________
          | 2 ||   4  ||   k    ||   e    ||      true      |  true  |          true              |
          _________________________________________________________________________________________
          | 3 ||   4  ||   k    ||   r    ||      true      |  true  |          true              |
          _________________________________________________________________________________________
          | 4 ||   4  ||   k    || error  ||     error      | false  |          error             |
          _________________________________________________________________________________________


          Dès que la première condition est fausse, on ne regarde pas la deuxième condition, vu que c'est un ET.

          C'est le cas pour la condition "i<len && tab1[i] != lettre", on ne vois pas l'erreur.

          PS :

          Si la première condition dans la fonction ET est faut, on ne regarde pas la deuxième conditions (il est transparent).

          __________________________
          |   a   |   b   | a && b |
          __________________________
          | false | XXXXX |  false |
          __________________________
          | false | XXXXX |  false |
          __________________________
          | true  | false |  false |
          __________________________
          | true  | true  |  true  |
          __________________________

          Donc :

          _________________________________________________________________________________________
          | i || len  || lettre || tab[i] || i<len  | tab[i]!=lettre | i<len && tab1[i] != lettre |
          _________________________________________________________________________________________
          | 4 ||   4  ||   k    || error  || false  |     XXXXX      |          false             |
          _________________________________________________________________________________________




          -
          Edité par pctronique 22 octobre 2016 à 0:10:12

          • Partager sur Facebook
          • Partager sur Twitter
            22 octobre 2016 à 10:47:17

            woooooooooooooooooooooooooooooooooooooooooooooooooow jai compris

            merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci

            merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci

            merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci

            merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci

            merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci merci

            beaucoup

            j'ai sus ou été le problème car au début je croyais que len (ou tab1.length)=3 mais cette fonction conte le nombre d'élément en commençant par 1 ce qui nous donnera 1-2-3-4  

            • Partager sur Facebook
            • Partager sur Twitter

            la boucle while

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown