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 :

Demande aide (debutant) => Fonctions


Sujet :

C

  1. #1
    Invité
    Invité(e)
    Par défaut Demande aide (debutant) => Fonctions
    Bonjours à tous, je me présente, Yaël 19 ans, étudiant en première année d'un BTS IRIS (Informatique Réseau).

    Nous apprenons actuellement le langage C, et nous avons un TP sur la mise en œuvre des structures, et je doit avouer que les fonctions ce n'est pas totalement claire pour moi..

    Pour résumé mon exercice, je dois calculer la moyenne, la somme, le maximum et le minimum d'une série de nombres saisies et afficher mes résultats dans un switch. La partie calcule et la partie d'affichage étant tous deux appelés dans des fonctions propres.

    Je vais vous épargner tous le code, en gros j'ai fait sous Visual Studio :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void ()
    {
    calculs (minimum, maximum, somme, moyenne, nombre);
    affichages (minimum, maximum, somme, moyenne);
    }
    à la fin de ma fonction principale de l'exercice
    puis dans la partie calcule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    float calculs (int minimum, int maximum, float somme, float moyenne, int nombre)
    {
    		return moyenne;
    		return somme;
    		return maximum;
    		return minimum;
    }
    après avoir fait toutes mes formules

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    float affichages(int minimum, int maximum, float somme, float moyenne)
    {
    return 0;
    }
    mes fonctions marchent bien entre elles après plusieurs bidoullages
    mais au moment d'appeler la fonction affichage, je n'arrive pas a récupérer les valeurs de mes variables, car le résultat fait 0 pour tous mes résultats...
    j'ai beau regarder, mais je n'arrive pas trop à comprendre..

    Je mets en lien mon code complet, si ce n’est pas très explicite
    Je vous remercie d'avance pour tous les conseils que vous pourrez me donner pour améliorer mon code !


    PS: je m'excuse d'avance si c'est pas la bonne rubrique, je vien de m'inscrire, je suis un peu perdu.. à tres vite

    Yaël
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut
    une fonction de peut avoir qu'un seul return!
    soit tu fait une fonction pour chaque calcul (moyenne, min ect...) soit tu utilise des pointeurs. pour un truck aussi simple je ferai une fonction par type de calcul qui renvoie le résultat et prend un tableau de nombre en entrée du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    float moy(float tab_float[],unsigned int taille_tab_float){
     
    float resultat = 0;
     
    //calcul de la moyenne...
     
    return resultat;
    }

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour et bienvenue,

    En C, les paramètre de fonctions sont passés par valeur. Cela signifie que lorsque ce sont des variables que tu transmets, celles-ci sont d'abord évaluées comme n'importe quelle autre expression, et que c'est leur contenu qui est transmis à la fonction.

    Cela signifie également que la fonction appelée n'a aucune vue sur ces variables. D'une manière plus précise, tu utilises en fait des variables locales. Les paramètres de tes fonctions sont considérés comme tels. Cela signifie donc que, bien qu'elles portent le même nom, elles sont complètement distinctes de celles de la fonction appelante.

    On en parlait notamment dans les discussions suivantes :

    http://www.developpez.net/forums/d75...-ca-ne-marche/
    http://www.developpez.net/forums/d77...bles-globales/

    D'autre part, une fonction, en mathématique, est également une expression qui peut être évaluée. Elle ne peut donc avoir qu'une seule valeur à la fois. Tu peux mettre plusieurs « return » dans ta fonction mais, dès que l'un d'eux est atteint, le programme quitte ta fonction en renvoyant la valeur qu'il porte.

    Si tu as besoin de renvoyer plusieurs valeurs distinctes à la fois, il y a deux façons de le faire :
    • Soit tu transmets en paramètre non pas les valeurs de tes variables mais les adresses en mémoire de celles-ci, donc des pointeurs, pour que ta fonction aille écrire directement dedans ;
    • Soit tu définis une structure, composée de tous les arguments que tu veux passer, et tu la renvoies en une fois comme un objet unique.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ta deuxième solution me semble le plus approprié a mon niveau, le cours sur les pointeurs et les tableaux on y'est pas encore, mais on va très vite y arriver

    Soit tu définis une structure, composée de tous les arguments que tu veux passer, et tu la renvoies en une fois comme un objet unique.
    J'aimerais avoir plus d'éclaircissement sur ta solution, j'ai du mal à voir.
    Il ne faut pas que je fasse une fonction pour chaque calcule.. Je dois faire une fonction principale appelé par le main, qui elle appelle une fonction calcule et une fonction affichage (total : 3).. donc je comprend pas comment faire pour renvoyer plusieurs valeurs depuis ma fonction calcule, alors que tous ceci n'est fait sans pointeurs ni quoi que ce soit de trop "compliqué"


    PS: Merci pour la correction et les conseils

    See you
    Dernière modification par Invité ; 15/11/2009 à 18h07.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par Pepit074 Voir le message
    Ta deuxième solution me semble le plus approprié a mon niveau, le cours sur les pointeurs et les tableaux on y'est pas encore, mais on va très vite y arriver
    C'est également la plus propre, mais la solution à pointeurs n'est pas difficile non plus, et elle est relativement répandue. C'est donc une bonne chose de la survoler dès que possible.

    J'aimerais avoir plus d'éclaircissement sur ta solution […] je comprend pas comment faire pour renvoyer plusieurs valeurs depuis ma fonction calcule, alors que tous ceci n'est fait sans pointeurs ni quoi que ce soit de trop "compliqué"
    En C, la notion de fonction et celle de « sous-programme » se confondent. Il n'empêche qu'une fonction en C se comporte de la même façon qu'une fonction mathématique : c'est une expression qui est évaluée, au même titre qu'une constante ou une équation. C'est pour cette raison que, pour un ou des paramètres donnés, une fonction correspond toujours à une valeur et une seule. En C, on peut éventuellement utiliser « void » pour dire que la fonction n'a pas de type et que l'on ne peut donc pas en déduire la valeur (donc, pas de return) dans le cas où cette fonction ne sert qu'à appeler un sous-programme. Mais, dans tout les cas, elle ne peut jamais valoir deux valeurs différentes à la fois.

    Une « structure » est − pour faire simple − une variable composée en réalité de sous-variables. Par exemple :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct coord
    {
        float x; /* Abscisse */
        float y; /* Ordonnée */
    };

    Ici, « coord » est le nom que tu donnes à la structure proprement dite. Par conséquent « struct coord » devient un nom de type. Tu peux donc instancier des variables avec, de la même façon que tu le fais avec les types natifs :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int                 i,j,k;
    struct coord        a,b,c;

    Chacune de tes variables « a », « b » et « c » est maintenant formée, en réalité, d'exactement deux float mis bout à bout en mémoire (avec éventuellement du padding), float auquels tu peux accéder :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    a.x = 5.2;
    a.y = 3.85;
     
    b.x = 4.25;
    b.y = 2.3;
     
    …

    Évidemment, tu ne peux pas utiliser les opérateurs arithmétiques et logiques (notamment les comparateurs < et > ) sur a,b ou c. Par contre, tu peux utiliser l'opérateur d'affectation pour copier le contenu intégral de l'une dans l'autre :


    Dès lors, puisque tu as un nouveau type de données, rien ne t'empêche de déclarer une fonction dont la valeur soit de ce type :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    struct coord mafonction();

    Sémantiquement, tu déclares une fonction dont la valeur est un point du plan, et un seul.

    Par contre, tu peux continuer à passer le nombre de paramètre que tu veux. Ces paramètres peuvent être de n'importe quel type, y compris les tiens, struct coord par exemple.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    struct coord mafonction (struct coord mesparametres);

  6. #6
    Invité
    Invité(e)
    Par défaut
    Très bien, je te remerci pour ta réponse tres complete, je vais dès ce pas me creuser la tete et faire fonctionner tous sa

    Bonne soirée !

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

Discussions similaires

  1. demande aide création fonction split
    Par chrtophe dans le forum Débuter
    Réponses: 10
    Dernier message: 11/01/2015, 11h10
  2. [XL-2002] Demande d'aide sur la fonction autofilter
    Par Disabled30 dans le forum Excel
    Réponses: 77
    Dernier message: 07/10/2014, 13h56
  3. [MySQL] demande d'aide sur une fonction
    Par kairi084 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 13/05/2012, 13h51
  4. demande d'aide debutant java
    Par kamal620 dans le forum Langage
    Réponses: 3
    Dernier message: 12/11/2007, 12h20
  5. Réponses: 4
    Dernier message: 13/03/2006, 15h21

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