A propos de l'instruction for en C
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

A propos de l'instruction for en C



  1. #1
    invitecce9331d

    A propos de l'instruction for en C


    ------

    Bonjour à tous et à toutes

    Est ce que quelqu'un pourrait m'expliquer la différence entre écrire la boucle for par défaut
    c.à.d:

    Code:
    for (Expr1;Expr2;Expr3)
    {
        Instructions;
    }
    Et l'utiliser avec suppression de l'initialisation , suppression de l'expression de contrôle , et la suppression du corps

    Merci d'avance

    -----
    Dernière modification par Philou67 ; 29/11/2010 à 14h50. Motif: Balise CODE ajoutée

  2. #2
    Philou67

    Re : A propos de l'instruction for en C

    Tu utilises les différentes formes selon ton besoin :
    - sans Expr1 (expression initiale), cela signifie que l'initialisation de ta boucle, par exemple, n'est pas exprimable sous forme d'une simple expression (ce qui est assez rare), ou bien que ta boucle n'a pas besoin d'être initialisée (la condition initiale est posée ailleurs, et héritée). Exemple :

    Code:
    int compter_jusqua_100(int depart) {
      for ( ; depart < 100 ; depart++) {
        // ...
      }
    }
    - sans Expr2 (expression de fin de boucle), cela signifie soit que tu souhaites réaliser une boucle infinie (possible sur des systèmes multi-tâche embarqué par exemple), ou que la condition de sortie est trop complexe pour s'exprimer avec une expression. Elle s'exprime alors avec une instruction break. Exemple
    Code:
    int compter_jusqua_100(int fin) {
      int compte;
      for (compte = 0 ; ; compte++) {
        if (compte == 100) {
          if (est_ce_fini(compte)) {
            break;
          }
          else {
            compte = 0;
          }
        }
    }
    Il est toutefois préférable d'éviter cette forme, et de préférer trouver une vraie condition de fin sous forme d'une expression plus simple. Exemple

    Code:
    int compter_jusqua_100(int fin) {
      int compte, fini;
      for (compte = 0, fini = 0 ; !fini ; compte++) {
        if (compte == 100) {
          if (est_ce_fini(compte)) {
            fini = 1;
          }
          else {
            compte = 0;
          }
        }
    }
    - sans le corps, ce type de construction n'est utilisée que dans les systèmes embarqués sans OS temps réel pour réaliser des attentes, des temporisations, sans exécuter aucune instruction. Cette construction ne fonctionne pas correctement sur les OS temps-réel préemptifs pour lesquels il faut utiliser les fonctions de temporisation de l'OS. En connaissant le nombre de cycle d'instruction de la boucle et la fréquence du processeur, on peut calculer la durée d'une boucle en fonction du nombre d'itération.
    :'( Plus j'apprends, et plus je mesure mon ignorance

  3. #3
    polo974

    Re : A propos de l'instruction for en C

    Citation Envoyé par jasmine.27 Voir le message
    Bonjour à tous et à toutes

    Est ce que quelqu'un pourrait m'expliquer la différence entre écrire la boucle for par défaut
    c.à.d:

    Code:
    for (Expr1;Expr2;Expr3)
    {
        Instructions;
    }
    Et l'utiliser avec suppression de l'initialisation , suppression de l'expression de contrôle , et la suppression du corps

    Merci d'avance
    rien n'est obligatoire! c'est ça le fun!

    EXpr1 est exécuté avant d'entrer dans la boucle, permet d'initialiser des choses

    Expr2 est exécute avant chaque entrée dans la boucle, entrée conditionnée par le résultat de cette expression, permet de contrôler la sortie de boucle (si vide, c'est ok)

    Expr3 est exécuté après chaque boucle, permet de compter les tours, cette expression est exécutée même en cas de continue au milieu des "Instructions" dans la boucle, c'est ce qui le change par rapport à juste du code en fin de boucle.

    Instructions sont "la charge utile" de la boucle, en général, tout un tas de trucs à faire de façon répétitives...
    mais ça peut être vide aussi par exemple quand on cherche le bout d'une liste (pour accrocher un nouvel élément par ex):
    Code:
    ...
    for(elm = debut; elm->next != NULL; elm = elm->next)
        ;
    // elm est en bout de liste, on peut y ajouter un nouvel element (deja existant)
    nouveau->next = NULL;  // signale la fin de liste
    elm->next = nouveau;
    ...
    Jusqu'ici tout va bien...

Discussions similaires

  1. Problème avec l'instruction TRIS [p18f4520 + picdem 2+]
    Par invite8d0b7120 dans le forum Électronique
    Réponses: 5
    Dernier message: 09/06/2010, 09h10
  2. L'instruction"sleep" réinitilise ma variable de comptage
    Par michel5002 dans le forum Électronique
    Réponses: 20
    Dernier message: 08/06/2010, 09h25
  3. petite question pour l'instruction btfsc et btfss
    Par LABTOOL48 dans le forum Électronique
    Réponses: 5
    Dernier message: 16/04/2010, 04h28
  4. L'instruction en France
    Par Etile dans le forum Discussions scientifiques
    Réponses: 11
    Dernier message: 14/01/2007, 19h57