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 :

Instruction For incompréhensible.


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Instruction For incompréhensible.
    Plus que débutant (niveau ignare) je bute sur cette instruction: for (--pos; a[pos] == 0; --pos);. Quelqu'un pourrait-il m'aider?
    Merci d'avance.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    un for est une structure de contrôle assez simple, elle se décompose en trois parties séparées par des points-virgules :
    - instruction d'initialisation (exécutée à la première entrée dans la boucle),
    - condition(s) de bouclage (si l'instruction renvoie faux on sort de la boucle),
    - instruction(s) itérative(s) (exécutée(s) à chaque passage dans la boucle).
    Un for peut comporter un block de code (entre accolades) exécuté à chaque itération.
    S'il n'en a pas il est suivi d'un point-virgule.

    Avec ça tu devrais comprendre la ligne que tu nous présentes.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    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
    Hello,

    a est un tableau, pos est un index pour le parcourir. Cette boucle apparait surement dans un contexte proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::vector<int> a; // le tableau à parcourir
    int pos = a.size(); // pos == taille du tableau
     
    for(--pos; a[pos] == 0; --pos);
    // décrémenter pos pour soit "sauter" le dernier élément, soit si pos == taille pour "pointer" sur le dernier élément, puis
    // tant que l'élément "pos" du tableau est 0 on exécute le corps de la boucle
    // ici le corps de la boucle se résume à ";", cad rien
    // puis on décrémente pos pour passer à l'élément suivant
    Au final cette boucle recherche l'index du premier élément différent de 0, en partant de la fin (et seg fault si le tableau ne contient que des 0).

    Ca peut se réécrire (plus explicite, mais syntaxe plus compliquée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::vector<int> a;
     
    auto it = std::find(a.rbegin(), a.rend(), [](int elt)-> bool { return elt != 0 }); // ou peut être find_if, trou de mémoire *_*
    if(it != a.rend()) { // élément trouvé
       int pos = std::distance(a.rbegin(), it);
       int elt = *it; // ou elt = a[pos];
    }

  4. #4
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    std::find_if (prend un prédicat) et non std::find (qui prend une valeur).
    (Personnellement, j'utilise size_t pour les indices (mais il faut faire attention si on compte faire des "reverse" boucle avec).)

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

Discussions similaires

  1. Aide instruction "for"
    Par Invité dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 17/07/2010, 19h32
  2. Les structures de répétition - l'instruction FOR
    Par Imanou dans le forum Langage
    Réponses: 6
    Dernier message: 17/01/2008, 19h13
  3. Instruction For Each
    Par marsupilami34 dans le forum VBA Access
    Réponses: 4
    Dernier message: 15/01/2008, 16h32
  4. [DAO] Instruction For Each .. Next
    Par ancel17 dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/04/2007, 11h07

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