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 :

moyenne arithmétique en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 29
    Par défaut moyenne arithmétique en C
    Bonjour, je souhaite faire un programme qui calcule la moyenne arithmétique de deux notes avec l'utilisation de sous programme intitulé moyenne et l'appeler dans le main
    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
    #include <stdio.h>
    #include <stdlib.h>
    float moyenne (float* a, float* b)
    {
        float* moy;
        *moy=(*a+*b)/2;
        return *moy;
    }
    int main()
    {
        int moy1, moy2, moytot;
        printf("saisissez la premiere moyenne\nmoy1=");
        scanf("%f\n",moy1);
        printf("saisissez la deuxieme moyenne\nmoy2=");
        scanf("%f\n", moy2);
        moytot=moyenne(moy1,moy2);
        printf("la moyenne des deux notes est \n");
        scanf("%f", moytot);
        return 0 ;
    }
    bien évidemment ça marche pas ;(
    please help

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 : 12 840
    Billets dans le blog
    1
    Par défaut
    Même problème qu'ici http://www.developpez.net/forums/d10...ice-langage-c/

    Toutefois, dans ce cas précis, ta fonction n'ayant pas à modifier les éléments qu'elle reçoit, l'utilisation de pointeurs est inutile.

    PS: pas de "\n" au scanf() et inutile de faire saisir la moyenne via scanf vu qu'elle est calculée par ta fonction...
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Salut,

    il faut compiler son code avant de poster...

    Pour ton problème :
    - scanf prend en paramètre des pointeurs, toi tu passe des int ... (alors qu'avec %f, scanf s'attend à dépiler un float...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    float moyenne (float* a, float* b)
    {
        float* moy;
        *moy=(*a+*b)/2;
        return *moy;
    }
    Ensuite, ta fonction moyenne prend en paramètre des pointeurs sur float, tu passe des int ... (même pas des pointeur sur int ...)

    De plus le passage par pointeurs est inutile puisque tu retourne la valeur.

    Voilà,
    un conseil revois les pointeurs et les variables en générale.

    Si tu as d'autres soucis hésites pas.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hai,
    Citation Envoyé par NeoKript Voir le message
    Salut,

    il faut compiler son code avant de poster...

    Pour ton problème :
    - scanf prend en paramètre des pointeurs, toi tu passe des int ... (alors qu'avec %f, scanf s'attend à dépiler un float...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    float moyenne (float* a, float* b)
    {
        float* moy;
        *moy=(*a+*b)/2;
        return *moy;
    }
    Ensuite, ta fonction moyenne prend en paramètre des pointeurs sur float, tu passe des int ... (même pas des pointeur sur int ...)

    De plus le passage par pointeurs est inutile puisque tu retourne la valeur.

    Voilà,
    un conseil revois les pointeurs et les variables en générale.

    Si tu as d'autres soucis hésites pas.
    Il ne faut pas qu'il hésite, mais toi, tu devrais peut-être hésiter à répondre : ne pas corriger l'utilisation d'un pointeur non initialisé (pointeur qui est d'ailleurs absolument inutile).

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par droggo Voir le message
    Hai,

    Il ne faut pas qu'il hésite, mais toi, tu devrais peut-être hésiter à répondre : ne pas corriger l'utilisation d'un pointeur non initialisé...
    Attends, c'est pas sympa de le casser comme ça. C'est vrai qu'il est passé à coté de cette erreur (et moi aussi d'ailleurs) mais ce qu'il a dit était juste et correct...
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par droggo Voir le message
    Hai,

    Il ne faut pas qu'il hésite, mais toi, tu devrais peut-être hésiter à répondre : ne pas corriger l'utilisation d'un pointeur non initialisé (pointeur qui est d'ailleurs absolument inutile).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float* moy; 
    *moy=(*a+*b)/2;
    Héhé, en effet je n'avais pas vu le pointeur non initialisé, ça m'apprendra à répondre trop vite ^^

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Lai,

    Désolé pour les termes utilisés, plutôt maladroits. Dans ma tête, ça voulait dire "tourner 7 fois la langue dans ta bouche avant de cliquer sur 'valider'".

    (Et j'aurais dû faire de même, et corriger ma phrase avant de faire ce fameux clic. )

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 29
    Par défaut pas encore compris ;(
    pas besoin de se disputer, merci tous pour vos efforts
    j'ai pas compris pourquoi pas besoin de pointeurs, quand est ce qu'on a besoin alors dans les fonctions?
    sinon j'ai fait une petite modification au niveau du code mais ça donne un résultat très bizarre!!!
    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
    #include <stdio.h>
    #include <stdlib.h>
    float moyenne (float* a, float* b)
    {
        float* moy;
        *moy=(*a+*b)/2;
        return *moy;
    }
    int main()
    {
        int moy1, moy2, moytot;
        printf("saisissez la premiere moyenne\nmoy1=");
        scanf("%f\n", &moy1);
        printf("saisissez la deuxieme moyenne\nmoy2=");
        scanf("%f\n", &moy2);
        moytot=moyenne(&moy1,&moy2);
        printf("la moyenne des deux notes est \n%f", &moytot);
        return 0 ;
    }
    encore merci les gars

  9. #9
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par zolafencer Voir le message
    pas besoin de se disputer, merci tous pour vos efforts
    j'ai pas compris pourquoi pas besoin de pointeurs, quand est ce qu'on a besoin alors dans les fonctions?
    sinon j'ai fait une petite modification au niveau du code mais ça donne un résultat très bizarre!!!

    encore merci les gars
    Salut, il faut vraiment que tu revois les pointeurs.

    C'est normal que tu ai des choses bizares....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("la moyenne des deux notes est \n%f", &moytot);
    -> Ici tu affiche l'addresse de la variable et non ça valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    float moyenne (float* a, float* b)
    {
    float* moy;
    *moy=(*a+*b)/2;
    return *moy;
    }
    moy n'est pas initialisé, il pointe vers une case aléatoire...

    En fait pour faire simple, tu utilise des pointeurs quand tu veux modifier des variables passées en paramètre à une fonction. Toi, tu te sert uniquement des valeurs pour retourner unenouvelle variable (la moyenne), donc pas besoin de pointeurs.

    - Tu fais des castde int / float ..


    Te donner la réponse, ce n'est pas t'aider mais bon ...
    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
    #include <stdio.h>
    #include <stdlib.h>
    float moyenne (float a, float b)
    {
    float moy;
    moy=(a+b)/2;
    return moy;
    }
    int main()
    {
    float moy1, moy2, moytot;
    printf("saisissez la premiere moyenne\nmoy1=");
    scanf("%f", &moy1);
    printf("saisissez la deuxieme moyenne\nmoy2=");
    scanf("%f", &moy2);
    moytot=moyenne(moy1,moy2);
    printf("la moyenne des deux notes est %f\n", moytot);
    return 0 ;
    }
    Voilà, mais un conseil, reprend les pointeurs depuis le début !

    Bonne soirée,
    NeoKript

  10. #10
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Citation Envoyé par NeoKript Voir le message
    float moy1, moy2, moytot;
    ... float, tu as laissé int.

    vu que tu as des int, il coupe la partie décimale lors de la division par 2 ainsi :

    (5+2) / 2 = 3... et non 3.5
    De même, lorsque tu récupères tes nombres avec scanf, tu met %f, mais c'est des int... du coup la variable ne contient pas du tout la bonne valeur.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 29
    Par défaut
    ah mais oui qu'est ce que je suis bête!!!
    désolée j'ai pas vu que j'ai laissé int et non float.
    C'est bon merci

  12. #12
    Membre émérite

    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Septembre 2010
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Septembre 2010
    Messages : 450
    Par défaut
    Citation Envoyé par zolafencer Voir le message
    j'ai pas compris pourquoi pas besoin de pointeurs, quand est ce qu'on a besoin alors dans les fonctions?
    Un pointeur est nécessaire dès lors que tu as besoin de manipuler une même variable dans plusieurs fonctions différentes.
    Si vous moinsez, merci de répondre pour argumenter!
    Ma présentation

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par YannPeniguel Voir le message
    Un pointeur est nécessaire dès lors que tu as besoin de manipuler une même variable dans plusieurs fonctions différentes.
    On évitera donc d'aborder le sujet des globales
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Membre émérite

    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Septembre 2010
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Septembre 2010
    Messages : 450
    Par défaut
    Je ne sais pas pour toi, mais moi je n'en utilise que pour les constantes.
    Si vous moinsez, merci de répondre pour argumenter!
    Ma présentation

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par YannPeniguel Voir le message
    Je ne sais pas pour toi, mais moi je n'en utilise que pour les constantes.
    Ah, moi je passe plutôt par les macro pour ça. Non, j'ai beau réfléchir, je reste toujours à zéro globale...
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Bonsoir,

    Ici vous n'avez pas besoin des poiteurs car comme le dit Sve@r les valeurs passées en argument ne sont pas modifiées, vous travaillez avec mais vous ne les modifiez pas.
    Par exemple si vous aviez voulu faire une fonction qui ajoute 1 à une variable a, la vous auriez eu besoin de pointeurs.

    Pour votre problème, c'est dans le dernier printf() que vous avez fait une erreur:

    printf("la moyenne des deux notes est \n%f", &moytot);

    L'opérateur & désigne l'adresse, ainsi vous avez demander d'afficher l'adresse de la variable moytot.
    Vous avez sûrement confondu avec scanf() mais si scanf() prend les adresses des variables entieres, c'est pour pouvoir en modifier la valeur comme ce que j'ai dit plus haut à propos de l'utilité des pointeurs dans les arguments d'une fonction

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 29
    Par défaut
    j'ai compris vos remarque, merci bcp
    pour NeoKript, j'ai lu plusieurs tuto de pointeurs mais je comprnais toujours pas, je me suis dit alors que ce serait mieux si j'e faisais des exo et que lors des corrections je comprendrai à fur et à mesure les pointeurs. D'ailleurs vos remarques m'ont servis. Ils faut que je fasse d'avantage d'exo pour assimiler encore plus ce maudit chapitre.
    Cependant, j'ai changé mon code mais je ne sais tjrs pourquoi ça ne marche pas encore (je veux dire il m'affiche un résultat bizarre) !!
    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
    #include <stdio.h>
    #include <stdlib.h>
    float moyenne (float a, float b)
    {
        float moy;
        moy=(a+b)/2;
        return moy;
    }
    int main()
    {
        int moy1, moy2, moytot;
        printf("saisissez la premiere moyenne\nmoy1=");
        scanf("%f", &moy1);
        printf("saisissez la deuxieme moyenne\nmoy2=");
        scanf("%f", &moy2);
        moytot=moyenne(moy1,moy2);
        printf("la moyenne est %f", moytot);
        return 0 ;
    }

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

Discussions similaires

  1. Comment peut-on dire : une bdd est petite, moyenne ou grosse
    Par Pierrinot dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 20/10/2004, 08h40
  2. Requete moyennes mensuelles
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/09/2004, 10h43
  3. probleme de moyenne
    Par prez dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/08/2004, 17h38
  4. [SGBD] Pour moyenne base avec SQL ?
    Par PyRoFlo dans le forum Bases de données
    Réponses: 10
    Dernier message: 13/03/2004, 18h54
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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