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 :

Fonction alterne (Problème de compréhension)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 67
    Par défaut Fonction alterne (Problème de compréhension)
    Bonsoir je débute dans le c++ et je vois actuellement les fonctions , dans mon livre Programmer en langage c++ de Claude delannoy il y à un code qui est le suivant :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <iostream>
     
    using namespace std;
     
    int & alterne(int &, int &);
     
    int main()
    {
    int n = 1, p = 3, q = 5;
     
       alterne(n,p) = 8;
       cout <<" n = " << n <<" p = " << p << endl;
       alterne(p,q) = 12;
       cout <<" p = " << p <<" q = " << q <<endl;
     
    }
     
    int & alterne (int & n1, int & n2)
    {
    static bool indic = true;
     
       if (indic)
       {
            indic = false;
            return n1;
       }
       else
       {
           indic = true;
           return n2;
       }
    }
    Et le résultat donner je n'arrive pas à le comprendre : n = 8 p = 3 et p = 3 q = 12
    Mais pour moi selon ma compréhension j'arrive à un résultat différent qui est le suivant : n = 8 p = 3 et p = 12 et q = 5 or ce n'est pas juste mais je n'arrive pas à comprendre comment il arrive au premier résultat que je vous ait donner ici.

    Pouvez vous svp m'aider à comprendre pourquoi il met p = 3 et q = 12 dans l'appel de la deuxième fonction ?

    Je vous remercie d'avance et vous souhaite une excellente soirée / journée.

    Aigle-Royal

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Mis à part que ce code est abusivement tordu, je ne vois pas bien ce qu'il y a de compliqué à lire.
    Le premier appel retourne n et le second appel retourne q. Ensuite, ben tu as une assignation..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Ce que tu ne sembles pas comprendre c'est la notion static

    L'initialisation se fait que la première fois qu'on utilise la variable indic. Mais la variable étant statique dans un bloc (une fonction ici), elle reste en mémoire.
    Donc
    1. premier appel : création de la variable indic, initialisation à true. Ensuite le test est vrai, on met la variable à false et on retourne n1
    2. deuxième appel : variable indic existe toujours et vaut false. Ensuite le test est faux, on met la variable à true et on retourne n2
    3. troisième appel (que tu peux tester) : variable indic existe toujours et vaut true. Ensuite le test est vrai, on met la variable à false et on retourne n1


    Le mieux pour comprendre la notion static c'est avec un compteur ... qui est plus parlant qu'une alternance.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 67
    Par défaut Réponse au message à Foetus
    Bonjour Foetus

    Merci vous m'avez éclairer c'est en effet la notion de static que je n'avais pas compris, mais suite à votre
    retour j'ai compris maintenant le code et ce que static produit.

    Je vous remercie encore une fois bonne journée à vous.

    Aigle-Royal

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/04/2013, 16h23
  2. Réponses: 10
    Dernier message: 26/11/2012, 10h45
  3. problème de compréhension d'une fonction
    Par anas_matlab dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/05/2011, 12h52
  4. onclipevent (problème de compréhension)
    Par stephane eyskens dans le forum Flash
    Réponses: 8
    Dernier message: 24/09/2003, 15h09
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

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