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 :

Progression de boucle while


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Invalidité
    Inscrit en
    mai 2019
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Invalidité

    Informations forums :
    Inscription : mai 2019
    Messages : 63
    Points : 17
    Points
    17
    Par défaut Progression de boucle while
    Bonjour a toutes et a tous ,
    Je bute sur le cheminement de ce tout petit bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     #include <stdio.h>
     int main(){
     
     int n,p;
     n=p=0;   
     while(n<=8) n += p++;
     printf("B : n= %d\n",n);
     
    return 0;
    }
    Si je décompose j'ai :
    je rentre dans ma boucle n ayant la valeur 0. soit while(n<=8) n=0+0 . J'incremente p .
    rebelote : while(n<=8)n=0+1; (n=1)
    " : while(n<=8)n=1+1; (n=2)
    ..................
    " : while(n<=8)n=7+1; (n=8)(fin de la boucle )
    printf("B : n= %d\n",n); soit n=8

    Pourtant le bon resultat est 10 !
    Mon raisonnement est mauvais , pourquoi ?
    merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    989
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 989
    Points : 4 997
    Points
    4 997
    Par défaut
    Bonjour,

    Et p, il est incrémenté chaque fois, donc :
    n = 0 + 0, p = 1
    n = 0 + 1, p = 2
    n = 1 + 2, p = 3
    n = 3 + 3, p = 4
    n = 6 + 4, p = 5
    stop car n > 8
    d'où n = 10

  3. #3
    Membre à l'essai
    Homme Profil pro
    Invalidité
    Inscrit en
    mai 2019
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Invalidité

    Informations forums :
    Inscription : mai 2019
    Messages : 63
    Points : 17
    Points
    17
    Par défaut
    Ok bien compris
    Merci

  4. #4
    Membre à l'essai
    Homme Profil pro
    Invalidité
    Inscrit en
    mai 2019
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Invalidité

    Informations forums :
    Inscription : mai 2019
    Messages : 63
    Points : 17
    Points
    17
    Par défaut
    Si je peux me permettre , quelle nuance entre ces 2 expressions :
    n += ++p; et
    n+= ++p;
    Espace entre le n et le + sur la 1ere

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    989
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 989
    Points : 4 997
    Points
    4 997
    Par défaut
    Les espaces n'ont aucune signification particulière, on pourrait aussi bien revenir à la ligne ou ne rien mettre.
    Il existe de très rares cas où une séparation est importante, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    x = a+++b;
    // sans espace correspond à 
    x = a++ + b ; // post-incrémenter a et ajouter b
    // alors que :
    x = a+ ++b; // espace obligatoire après a+ : ajouter a et la pré-incrémentation de b
    // on peut aussi l'écrire :
    x =
    /* la suite */ a   // juste la a sur cette ligne
     +  ++             // tient le plus et le plus-plus sont là (avec l'espace nécessaire)
    b;                 // et pour finir le b que l'on indiqué à pré-incrémenter

  6. #6
    Membre à l'essai
    Homme Profil pro
    Invalidité
    Inscrit en
    mai 2019
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Invalidité

    Informations forums :
    Inscription : mai 2019
    Messages : 63
    Points : 17
    Points
    17
    Par défaut
    Ok parfait . Merci de ton aide .
    Mais on peut pas se quitter comme ca !

    Je remarque que ces 2 codes presque similaire ne produisent pas le mm resultat . Je ne saisis pas la nuance ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main(){
      int n,p;
      n=p=0;
      while(n<5) n+=2 ; p++;
      printf("A: n = %d, p = %d\n",n,p);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main(){
      int n,p;
      n=p=0;
      while(n<5) { n+=2 ; p++ ; }
      printf("B: n = %d, p = %d\n",n,p);

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    989
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 989
    Points : 4 997
    Points
    4 997
    Par défaut
    Les accolades servent à quelque chose.
    Et le retour à la ligne, c'est comme les espaces et les commentaires, ça n'a aucun rôle particulier.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Invalidité
    Inscrit en
    mai 2019
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Invalidité

    Informations forums :
    Inscription : mai 2019
    Messages : 63
    Points : 17
    Points
    17
    Par défaut
    Apres reflexion ,
    Dans le 1 er cas :
    Tant que n n'atteind pas la valeur de 5 , j'incremente n et seulement n de 2 a chaque tour dans la boucle , tandis que p lui , est incrementé qu'une seule fois .
    Dans le 2 eme cas :
    Tant que n n'atteind pas la valeur de 5 ,Les 2 valeurs n et p entre accolade sont incrementé a chaque tour dans la boucle .
    c'est ca ?

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 7 486
    Points : 21 313
    Points
    21 313
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par chris7522 Voir le message
    Dans le 1 er cas :
    Tant que n n'atteind pas la valeur de 5 , j'incremente n et seulement n de 2 a chaque tour dans la boucle , tandis que p lui , est incrementé qu'une seule fois .
    p est incrémenté qu'une seule fois après la boucle oui. Parce qu'en C, ce qui fait le corps de boucle ce sont les accolades et si pas d'accolade, alors seule la première instruction est incluse (en fait c'est le contraire: un corps de boucle ne se compose que d'une seule instruction mais cette instruction peut tout à fait être un bloc entre accolades)

    Citation Envoyé par chris7522 Voir le message
    Dans le 2 eme cas :
    Tant que n n'atteind pas la valeur de 5 ,Les 2 valeurs n et p entre accolade sont incrementé a chaque tour dans la boucle .
    c'est ca ?
    Exact.

    Et si je peux en rajouter sur ton premier post, évite ce genre d'instruction n += p++;. Tu ne gagneras rien en perfs par rapport à deux instructions séparées et tu mettras 3h à te relire (d'ailleurs tu n'as effectivement pas réussi à te lire !!!)
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  10. #10
    Membre à l'essai
    Homme Profil pro
    Invalidité
    Inscrit en
    mai 2019
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Invalidité

    Informations forums :
    Inscription : mai 2019
    Messages : 63
    Points : 17
    Points
    17
    Par défaut
    Merci de ta reponse . Tu as raison pour toutes ces instructions qui pourrai etre bien plus simple . En fait , j'utilise un livre d'exercice en C qui passe en revu tous les cas de figure . D'ou mon harcèlement quotidien sur ce forum pour essayer de comprendre .
    Pas sur que tous ca me soit utile

Discussions similaires

  1. [XL-2007] Barre de progression pendant boucle While
    Par yaciin dans le forum Excel
    Réponses: 7
    Dernier message: 11/03/2014, 16h27
  2. Boucle while & read
    Par gibet_b dans le forum Linux
    Réponses: 4
    Dernier message: 29/04/2005, 15h38
  3. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

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