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 :

Aide appel de fonctions sur "main"


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut Aide appel de fonctions sur "main"
    salut, j'ai commencé a resoudre un exercice mais je suis bloquée dans le "main" .
    voila tout ce que j'ai pu faire! et j'aimerai savoir si c'est juste ou faux .
    L'EXERCICE :


    le voici: Les solutions
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    #include <stdio.h>
    #include <stdlib.h>
    #define true 1
    #define false 0
     
    typedef struct athelete{
        char nom;
        char matricule;
        int age;
        double taille;
        double recordpers;
    } athelete;
     
    void ref(athelete NA[], int n){
        int i;
        for(i=0;i<n;i++){
            printf("\nentrez le nom  : ");
            scanf("%s \n",&NA[i].nom);
            printf("\nentrez la matricule  : ");
            scanf("%s \n",&NA[i].matricule);
            printf("\nentrez l age  : ");
            scanf("%d \n",&NA[i].age);
            printf("\nentrez la taille  : ");
            scanf("%lf ",&NA[i].taille);
            printf("\nentrez le record personnel  : ");
            scanf("%lf ",&NA[i].recordpers);
        }
    }
     
    double RMA(athelete H[] , int n){
        int i;
        double s=0;
        for(i=0;i<n;i++){
            s = H[i].recordpers + s;
        }
        double M=(s / n);
        return M;
    }
     
    athelete recordinf(athelete NA[],int taille){
        athelete T[taille];
        double moy; int i,k;
        k=1; moy=0;
        for(i=0;i<taille;i++){
            moy=NA[i].recordpers + moy;
        }
        moy=moy/taille;
        for(i=0;i<taille;i++){
            if(NA[i].recordpers<moy) T[k++]=NA[i];
        }
        return *T;
    }
     
    athelete li_athelete(athelete NA[] , unsigned int taille){
        athelete T[taille];
        int permut;
        int i;
        T[taille]=recordinf(NA,taille);
        permut = true;
        while(permut){
            permut=false;
        for(i=0;i<taille;i++){
            if(T[i].recordpers < T[i+1].recordpers){
                athelete temp;
                temp=T[i];
                T[i]=T[i+1];
                T[i+1]=temp;
                permut = true;
            }
        }
        }
        return *T;
    }
     
    void affiche(athelete NA[], int taille){
        athelete T[taille];
        int i;
        T[taille]=recordinf(NA,taille);
        for(i=0;i<taille;i++){
            printf("%s \n",T[i].nom);
            printf("%s \n",T[i].matricule);
            printf("%d \n",T[i].age);
            printf("%lf \n",T[i].taille);
            printf("%lf \n",T[i].recordpers);
        }
    }
     
    int main()
    {
        athelete NA; /* ?????*/
        return 0;
    }
    Merci d'avance .
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Commençons par le début. La déclaration de la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct athelete{
        char nom;
        char matricule;
        int age;
        double taille;
        double recordpers;
    } athelete;
    Lorsque tu déclares char nom; par exemple tu déclares une variable qui ne pourra contenir qu'un seul caractère. nom correspond à un seul octet.
    Il va te falloir déclarer plutôt un pointeur sur un espace mémoire qu'il faudra allouer d'une manière ou d'une autre.
    Deux possibilités s'offrent à toi :
    • char nom[];
    • char *nom;

    Soit tu connais la longueur maximale des noms des athlètes, tu peux donc utiliser la première solution en spécifiant la taille.
    Soit tu ne connais pas sa longueur il te faudra alors allouer dans le tas (avec malloc()) la longueur désirée le moment venu.

    Cette démarche devra être utilisée pour toute variable devant contenir du texte.

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    J'ajoute une petite remarque. Une structure se déclare comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef stuct
    {
     
    } mastructure;
    Regarde comment toi tu l'as déclaré.

  4. #4
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    J'ajoute une petite remarque. Une structure se déclare comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef stuct
    {
     
    } mastructure;
    Regarde comment toi tu l'as déclaré.
    Techniquement je pense que c'est faisable

  5. #5
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    @gerald3d

    Quand ta quelque chose concernant le main à me dire dit le SVP ;

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Il faudrait peut-être nous dire ce que tu n'arrives pas à faire dans ton main() pour qu'on puisse t'aider.

    Pour la structure, tu peux la définir des deux façons. Dans ton cas, le premier "alias" athelete est tout de suite écrasé par le 2e et n'a pas d'intérêt. Au passage, on dit athlète et non athelète : http://www.larousse.fr/dictionnaires...l%C3%A8te/6098

    Le problème que tu dois avoir dans ton main(), c'est que tu ne sais pas comment appeler la fonction suivante je présume :
    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
    void ref(athelete NA[], int n){
        int i;
        for(i=0;i<n;i++){
            printf("\nentrez le nom  : ");
            scanf("%s \n",&NA[i].nom);
            printf("\nentrez la matricule  : ");
            scanf("%s \n",&NA[i].matricule);
            printf("\nentrez l age  : ");
            scanf("%d \n",&NA[i].age);
            printf("\nentrez la taille  : ");
            scanf("%lf ",&NA[i].taille);
            printf("\nentrez le record personnel  : ");
            scanf("%lf ",&NA[i].recordpers);
        }
    }
    ?

    A mon avis, la fonction devrait plutôt avoir le prototype suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    athelete * ref(int nombre);
    Elle alloue avec malloc() un espace pour recevoir nombre = NA structures athlètes, demande les données de chacun d'eux comme tu l'as fait et renvoie un pointeur sur cet espace (qu'il faudrait penser à libérer avec free() dans la suite).

    Ca vient peut-être de ton copier-coller mais tu devrais écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        double moy; int i,k;
        k=1; moy=0;
    plutôt d'une de ces façons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        // 1
        double moy=0;
        int k=1, i;
        // 2
        double moy=0;
        int k=1;
        int i;
    , plus communes et plus lisibles.

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Citation Envoyé par smoxi Voir le message
    @gerald3d

    Quand ta quelque chose concernant le main à me dire dit le SVP ;
    Si, à la base, les structures de données ne sont pas bonnes, je ne vois pas trop quel main miraculeux, pourrait faire fonctionner tout ça.

    Si ça t'aide à réfléchir de commencer par le main, pour l'instant la seulle chose que tu as écrite dans celui-ci ne me parrait pas très utile : un athlète tout seul, il te faudrait un tableau (ou une liste chainée mais c'est peut être un peu plus compliqué), non?
    Tu pourrais commencer par appeler tes fonctions d'écriture et d'affichage pour constater que la saisie n'est pas très au point (déjà mettre des " \n" après la valeur entrée me parrait assez risqué) après tu vas devoir choisir si tu veux suivre le conseil de gerald3d sur le nom (voir l'appliquer aussi au matricule) en tout cas ta ligne actuelle n'est correcte ni pour lire un caractère ni pour lire une chaine de caractères.

    Pour l'affichage le but c'est pas de présenter NA plutôt qu'un T tout bizarre qui vient d'être créé avec la fonction "recordinf"?

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 26/05/2006, 15h08
  2. appel de fonction sur un OnKeyUp
    Par titoumimi dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/02/2006, 10h46
  3. appel de fonction sur validation de formulaire
    Par PAYASS59 dans le forum Langage
    Réponses: 15
    Dernier message: 17/01/2006, 10h09

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