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 :

boucle for paramêtres


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 294
    Points : 128
    Points
    128
    Par défaut boucle for paramêtres
    Bonjour,

    Que fait une telle boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (k++, l = n -1; k < l; k++, l--) {}
    Merci d'avance.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Elle incrémente k jusqu'à une borne supérieure l, qui elle même est décrémentée à chaque itération.

    En général, dans une boucle, la condition d'arrêt est fixe. Un peu comme si à chaque itération, tu avançais vers un mur qui ne bouge pas. Là, tu avances vers un véhicule arrivant en sens inverse...

    Les conditions initiales en elles-mêmes sortent également de l'ordinaire, bien qu'il n'y ait pas vraiment de complexité.

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    En fait, une boucle for se lit sous la forme de for (valeur(s) de départ ; condition(s) d'arrêt ; évolutions des valeurs)

    Tu as donc
    • deux valeurs de départ:
      • k dont la valeur équivaut à k
      • n dont la valeur équivaut à n-1
    • une condition d'arrêt
      • lorsque k n'est pas plus petit (donc qu'il est égal ou plus grand) que l
    • deux évolutions de valeur :
      • k est incrémenté
      • l est décrémenté
    Ce genre de boucle n'est clairement pas destiné à se retrouver "toute seule" car elle n'aurait sans doute qu'un intérêt bien piètre dans ce cas (il y a de fortes chances pour qu'elle se trouve imbriquée dans une autre boucle )

    En effet, la première instruction k++ aura un effet assez particulier dans le sens où si k vaut 2 à l'origine, la valeurs prise en compte pour la boucle sera 2, mais que la valeur de k vaudra... 3 et que la deuxième instruction k++ aura pour résultat d'incrémenter encore la valeur de k.

    De la même manière, l vaudra systématiquement (lorsque tu rentre pour la première fois dans la boucle) n-1 et sera systématiquement décrémenté avant de retourner dans la boucle.

    L'évolution des valeur ressemblerait donc à quelque chose comme (pour n == 10 et k == 1 à la base)
    • k =1, l=9
    • k=2, l=8
    • k=3, l=7
    • k=4, l=6
    • STOP (k=5 n'est pas plus petit que l=5 )
    (soit 4 itérations)

    Au final, lorsque tu ne rentreras plus dans la boucle, k (qui valait 2 avant la boucle) ne vaudra plus 2 mais 2+1 (première incrémentation) + (nombre de fois qu'on est passé dans la boucle).

    Mais il faut savoir que, si tu venais à écrire une telle boucle dans mon équipe, tu passerais par la fenêtre avant même d'avoir pu dire "ouf", à cause des effets de bord qu'elle produira et que celui qui a pondu un tel code mérite une bonne séance de
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 294
    Points : 128
    Points
    128
    Par défaut
    Merci pour cette réponse très détaillée.
    Pourquoi cela n'incrémentait pas deux fois k?
    O a bien k++ en début de boucke et k++en fin de boucle.

  5. #5
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par koala01 Voir le message
    En effet, la première instruction k++ aura un effet assez particulier dans le sens où si k vaut 2 à l'origine, la valeurs prise en compte pour la boucle sera 2, mais que la valeur de k vaudra... 3 et que la deuxième instruction k++ aura pour résultat d'incrémenter encore la valeur de k.
    for(k++; k<42; ++k); est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    k++;
    while(k<42) {
       ++k;
    }
    Il n'y a pas de différences ici de pré / post incrémentation.

    On à donc k==6 et l==5 après 4 itérations.

    @xavierdestev, k est incrémenté une fois "avant" la boucle, et une fois à chaque itération.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 294
    Points : 128
    Points
    128
    Par défaut
    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Modification des paramètres d'entrée dans une boucle FOR
    Par reppier dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 15/06/2009, 15h23
  2. paramètres variables et boucle for
    Par xam44 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 03/03/2009, 14h18
  3. Boucle FOR avec 2 paramètres
    Par dinozo13 dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 17/11/2008, 17h34
  4. PB : Requête Paramétrée dans boucle For
    Par papy75 dans le forum Accès aux données
    Réponses: 5
    Dernier message: 08/05/2008, 11h35
  5. aide vba boucle for each paramétrée en range
    Par gotlieb dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/07/2006, 08h55

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