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 :

Souci de compréhension du résultat


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 38
    Points
    38
    Par défaut Souci de compréhension du résultat
    Bonsoir,
    J'ai un souci avec ce programme car je ne comprends pas comment on obtient le résultat (en le faisant de tête). Plus précisément, j'obtiens 32100000 mais de tête je n'arrive qu'à 32100, il me manque 3 zeros.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    void modif (int * px){
         printf("%d", *px);
         if((*px) > 0){
                  (*px)--;
                  modif(px);
                  }
                  printf("%d", *px);
    }                      
     
    int main ( int argc, char** argv )
    { 
        int x = 3;
        modif(&x);
     
        system("PAUSE");
    }
    Merci d'avance pour vos explications.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Beh en fait ça vient simplement du fait qu'il y ait 2 fois printf dans ta fonction modif(), avec un appel récursif de modif() entre les 2:

    > Tu écris px
    > Si px>0 tu lui retires 1 et tu recommences (tu écris px, puis si px>0 tu lui retire 1, etc.)

    A ce point, modif() a été appelée plusieurs fois de façons imbriquées, et aucun des appel ne s'est donc terminé puisqu'à chaque fois une nouvelle occurrence de modif() a été appelée avant la fin (et donc avant le deuxième printf).

    Une fois px=0, il n'y a plus d'appel de modif() intercurrent et le modif() en cours peut se terminer, avec le deuxième printf qui renvoi 0, puis le modif() précédent se termine à sont tour écrivant à nouveau 0, puisque c'est maintenant ce que vaut px, et ainsi de suite autant de fois que modif() a été appelé sans s'être encore terminé.

    Tu te retrouves donc avec autant de 0 à la fin que de modif() appelés (soit x 0 "de trop"... (donc 3 dans ce cas où x=3))


    En fait c'est une boucle que tu devrais utiliser ici, l'emploi d'appels récursifs ne me semble absolument pas adapté dans cette situation très basique. C'est un procédé très puissant mais qui requiert une bonne compréhension de ses implications, et qui n'a d'intérêt que dans des utilisations bien particulières.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 66
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup un peu en retard...

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

Discussions similaires

  1. [XL-97] Filtre avec VBA : Des Soucis de compréhension
    Par Kalimera18 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/05/2009, 20h51
  2. Souci de compréhension d'organisation
    Par ldv dans le forum Zend Framework
    Réponses: 2
    Dernier message: 09/10/2008, 09h51
  3. [JTable][RowFilter] Souci de compréhension
    Par mavina dans le forum Composants
    Réponses: 1
    Dernier message: 11/09/2008, 10h33
  4. [MASM32] La fpu et la compréhension du résultat
    Par papiX dans le forum x86 32-bits / 64-bits
    Réponses: 8
    Dernier message: 19/04/2007, 16h12
  5. Petit soucis de compréhension
    Par AlexB59 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/10/2005, 10h18

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