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 :

Erreur fonction simple


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Points : 51
    Points
    51
    Par défaut Erreur fonction simple
    Bonjour,
    je débute dans le langage C et je ne comprend pas pourquoi le programme 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
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
     
    void calculeraire (double r, double a){
      a = M_PI*r*r;
    }
     
    int main () {
      double rayon = 1.5,aire;
      calculeraire (rayon,aire);
      printf ("Aire = %f\n",aire);
      return EXIT_SUCCESS;
    }
    ne marche pas après compilation : gcc -Wall aire.c -o aire
    En effet quand je l'appelle, le message suivant apparaît:

    aire.c: In function âmainâ:
    aire.c:11:16: attention : âaireâ is used uninitialized in this function [-Wuninitialized]

    Pourtant, dans le main calculeraire s'applique à 1.5 et aire et suite à l'appel de calculeraire (1.5,aire), aire va contenir M_PI*1.5*1.5 ?
    Merci.

  2. #2
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    le variable aire n"est initialiser
    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
     
    void calculeraire (double r, double &a){
      a = M_PI*r*r;
    }
     
    int main () {
      double rayon = 1.5,aire=1.5;
      calculeraire (rayon,aire);
      printf ("Aire = %f\n",aire);
      return EXIT_SUCCESS;
    }
    NB: on est pas sur le forum C ,voila le lien vers forum C

  3. #3
    Membre habitué Avatar de zhouyu
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Points : 143
    Points
    143
    Par défaut
    En effet tu ne passais pas ton paramètre 'a' par référence ou pointeur du coup quand tu appellais la fonction il ne modifiait pas le paramètre.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Rebonjour,
    ma variable aire est initialisée dans le main (?): double aire.
    Faut-il l'initialiser avec une valeur quelconque comme 1.5 ?
    Je ne comprends pas non plus pourquoi passer en argument &a dans calculeraire, c'est-à-dire l'adresse de la variable a.
    Ce ne serait pas plutôt *a, c'est-à-dire le contenu de la variable pointé par a qu'il faudrait passer en argument?
    Et dernière question: le fait d'écrire a = M_PI*r*r, ça veut dire que dans le contenu de a, on met M_PI*r*r, donc on modifie la variable a et dc pourquoi s'embêter avec les * et & ?

    Merci.
    PS: ok à l'avenir je ne confondrais plus C# et C

  5. #5
    Membre habitué Avatar de zhouyu
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Points : 143
    Points
    143
    Par défaut
    Par défaut les variables sont passé par copie.
    Donc quand tu appelles ta fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void calculeraire (double r, double a){
      a = M_PI*r*r;
    }
    il copie ton 'a' et lui assigne M_PI*r*r

    Mais celui que tu as donné en paramètre lui n'est pas modifié.
    Pour modifier le paramètre il faut soit le passer via les pointeur car tu lui donneras l'adresse mémoire de ton paramètre.
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void calculeraire (double r, double *a){
      *a = M_PI*r*r;
    }
    Ou alors par référence, c'est le même principe mais un peu caché ^^ il récupère l'adresse de la variable mais ça s'utilise "normalement".
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void calculeraire (double r, double &a){
      a = M_PI*r*r;
    }
    L'erreur que tu avais était justement que tu n'initialisais pas aire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double rayon = 1.5,aire;
    Et ta fonction ne modifiait pas non plus la variable donc tu faisais un printf sur une variable non initialisée .
    Essaie de toujours initialiser tes variables, en général on met 0 si tu ne connais pas sa valeur à la déclaration.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    Ok j'ai compris!
    Merci!

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

Discussions similaires

  1. Fonction simple, mais incapable de trouver l'erreur
    Par garheb dans le forum Haskell
    Réponses: 1
    Dernier message: 30/11/2012, 15h36
  2. Réponses: 5
    Dernier message: 18/03/2011, 15h35
  3. Réponses: 15
    Dernier message: 22/03/2007, 02h35
  4. [Crypt]Fonction simple de cryptage des données
    Par Agoye dans le forum Sécurité
    Réponses: 5
    Dernier message: 30/08/2006, 19h35
  5. méssage d'erreur fonction d'agrégat
    Par developpeur_mehdi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/03/2004, 12h42

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