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 avec une fonction dont le retour est void


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Août 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Erreur avec une fonction dont le retour est void
    bonjour,

    je prépare une seconde cess. en programmation, et dans un exercice dont je n'ai pas la solution, j'ai une erreur:

    voici l’énoncé :

    On écrit un programme d’analyse du degré de difficulté d’une étape du tour de France. Une étape se représente par un tableau à un indice. On y consigne, kilomètre par kilomètre, les altitudes du terrain (en mètres). Un tableau de cellules permet donc de représenter le relief d’une étape de Km au plus.

    le compilateur me donne une erreur à la ligne 29 : error:variable or fields "analyse_montees_descentes" declared void??????


    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
    93
    94
     
    /**Directives de précompilations-----------------------------------------**/
    #include <math.h>
    #include <stdio.h>
    #include <myconio.h>
     
    /**definition de variable --------------------------------------------------**/
    #define TAILLE 600
    /**Programme principal --------------------------------------------------**/
    void analyse_montees_descentes(int*,int, int*,int*,int*,int*,int*,int*,int*) ;
    void min_max (int*,int,int*,int*);
     
    /**prototype des Fonctions-----------------------------------------------**/
     
    int main()
    {
        /** Déclarartions ---------------------------------------------------**/
     
        int altitudes[TAILLE] =
                 {100, 130, 160, 210, 205, 200, 205, 160, 110, 120, 115, 90};
     
        int taille,
            d_montee=0, d_descente=0, d_plat=0,  /*Distances*/
            h_montee=0, h_descente=0;          /*Cumul des dénivelés*/
        int MAXVAL=0, MINVAL=altitudes[0];
        taille = 12;
     
        /** Traitement ------------------------------------------------------**/
        analyse_montees_descentes(altitudes,taille,&d_montee,
                                  &d_descente,&d_plat,&h_montee,&h_descente,&MAXVAL,&MINVAL) ;
     
        /** Encodage --------------------------------------------------------**/
     
     
     
        /** calculs ---------------------------------------------------------**/
        min_max(altitudes,taille,&MAXVAL,&MINVAL);
     
        /** Affichages ------------------------------------------------------**/
        printf("Analyse de l'etape\n\n");
        printf("Montee totale de %d metres sur %d km\n",h_montee, d_montee);
        printf("Descente totale de %d metres sur %d km\n",
                                                        h_descente,d_descente);
        printf("Plat sur %d km\n", d_plat);
     
        return 0;
    }
     
    /**-----autres fonctions    -----**/
     
    void min_max(int *altitudes, int taille,int *maxi, int *mini)
    {
        int indice=0 ;
            while (indice<taille)
            {
                if (altitudes[indice]>*maxi)
                    *maxi = altitudes[indice];
     
                if(altitudes[indice]<*mini)
                    *mini=altitudes[indice];
                indice++;
            }
     
     
    }
     
    void analyse_montees_descentes(altitudes,taille,*d_montee,
                                 *d_descente,*d_plat,*h_montee,*h_descente,*maxi,*mini)
    {
        int indice;
     
        /**si ça monte**/
        for (indice=0;indice>taille;indice++)
        {
     
            if (altitudes[indice]>altitudes[indice-1])
            {
                if((altitudes[indice]-altitudes[indice-1])<((*maxi-*mini)*0.1) )
                    *d_plat++;/**on incrémente les kilometres de plat**/
                else
                    *h_montee=*d_monte+altitudes[indice]-altitudes[indice-1];
                    *d_montee++;
            }
            else (altitudes[indice]>=altitudes[indice-1])
            {
                if((altitudes[indice]-altitudes[indice-1])<((*maxi-*mini)*0.1) )
                    *d_plat++;/**on incrémente les kilometres de plat**/
     
                else
                    *h_descente=*h_descente+altitudes[indice]-altitudes[indice-1];
                    *d_descente++;
            }
        }
    }
    d'avance merci,

  2. #2
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void analyse_montees_descentes(altitudes,taille,*d_montee,
                                 *d_descente,*d_plat,*h_montee,*h_descente,*maxi,*mini)
    Les paramètres de définition de ta fonction ne sont pas des types. Il faut reprendre la même signature que ta déclaration.
    En outre tu n'a pas besoin de déclarer une fonction dans un fichier cpp. ça a un intérêt uniquement si tu sépare tes déclarations (.h) de tes implémentations (.cpp), ce qui est toujours une bonne idée.
    For crying out loud !

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Prends une pause, prends éventuellement un café

    Ensuite reviens et ouvres tes yeux ... notamment lignes 67 et 68



    [Indice: 9 ]

  4. #4
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    Salut à toi! ^^

    Alors déjà j'ai remarqué quelques petits problèmes. Je n'ai pas de compilateur avec moi ni linux sous la main donc je ne peux pas vérifier mes dires, mais globalement en C je définit toujours le type des arguments de mes fonctions.

    Donc ligne 67 tu dois déclarer le type de chacun de tes arguments pour commencer ^^.

    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
     
    /**Directives de précompilations-----------------------------------------**/
    #include <math.h>
    #include <stdio.h>
    #include <myconio.h>
     
    /**definition de variable --------------------------------------------------**/
    #define TAILLE 600
     
    /**Programme principal --------------------------------------------------**/
    void analyse_montees_descentes(int*,int, int*,int*,int*,int*,int*,int*,int*) ;
    void min_max (int*,int,int*,int*);
     
    int main()
    {
        /** Déclarartions ---------------------------------------------------**/
     
        int altitudes[TAILLE] = {100, 130, 160, 210, 205, 200, 205, 160, 110, 120, 115, 90};
     
        int taille,
            d_montee=0, d_descente=0, d_plat=0,  /*Distances*/
            h_montee=0, h_descente=0;          /*Cumul des dénivelés*/
        int MAXVAL=0, MINVAL=altitudes[0];
        taille = 12;
     
        /** Traitement ------------------------------------------------------**/
        analyse_montees_descentes(altitudes, taille, &d_montee, &d_descente, &d_plat, &h_montee, &h_descente, &MAXVAL, &MINVAL) ;
     
        /** Encodage --------------------------------------------------------**/
     
        /** calculs ---------------------------------------------------------**/
        min_max(altitudes,taille,&MAXVAL,&MINVAL);
     
        /** Affichages ------------------------------------------------------**/
        printf("Analyse de l'etape\n\n");
        printf("Montee totale de %d metres sur %d km\n",h_montee, d_montee);
        printf("Descente totale de %d metres sur %d km\n", h_descente,d_descente);
        printf("Plat sur %d km\n", d_plat);
     
        return 0;
    }
     
    /**-----autres fonctions    -----**/
     
    void min_max(int *altitudes, int taille, int *maxi, int *mini)
    {
        int indice=0 ;
    	while (indice<taille)
    	{
    		if (altitudes[indice]>*maxi)
    			*maxi = altitudes[indice];
     
    		if(altitudes[indice]<*mini)
    			*mini=altitudes[indice];
    		indice++;
    	}
    }
     
    void analyse_montees_descentes(int* altitudes, int taille, int* d_montee, int* d_descente, int* d_plat, int* h_montee, int* h_descente, int* maxi, int* mini)
    {
        int indice;
     
        /**si ça monte**/
        for (indice=0;indice>taille;indice++)
        {
     
            if (altitudes[indice]>altitudes[indice-1])
            {
                if((altitudes[indice]-altitudes[indice-1])<((*maxi-*mini)*0.1) )
                    *d_plat++;/**on incrémente les kilometres de plat**/
                else
                    *h_montee=*d_monte+altitudes[indice]-altitudes[indice-1];
                *d_montee++;
            }
            else (altitudes[indice]>=altitudes[indice-1])
            {
                if((altitudes[indice]-altitudes[indice-1])<((*maxi-*mini)*0.1) )
                    *d_plat++;/**on incrémente les kilometres de plat**/
     
                else
                    *h_descente=*h_descente+altitudes[indice]-altitudes[indice-1];
                *d_descente++;
            }
        }
    }

    Edit: Visiblement quand j'écrivais mon message les deux réponses précédentes ont été plus rapide, du coup la réponse a déjà été donnée ^^

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Août 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Oups quel con.... merci pour votre aide, c'est souvent des erreurs débiles....

    par contre, j'ai maintenant une erreur de compilation à la ligne 76: error: invalide types 'int[int] for array subscript????

    merci à tous...

  6. #6
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    D'ailleurs je crois que tu as aussi une erreur dans la condition d'arrêt de ta boucle For...

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Comme l'a dit ChipsAlaMenthe regarde bien la condition de ta boucle for (indice=0;indice>taille;indice++)[indice: < ou > ]

    Et pour ton problème réfléchit un peu

    Quels vont être les index de tableau de if (altitudes[indice]>altitudes[indice-1]) pour un nombre qui varie entre 0 et 12?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Août 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par foetus Voir le message
    Comme l'a dit ChipsAlaMenthe regarde bien la condition de ta boucle for (indice=0;indice>taille;indice++)[indice: < ou > ]

    Et pour ton problème réfléchit un peu

    Quels vont être les index de tableau de if (altitudes[indice]>altitudes[indice-1]) pour un nombre qui varie entre 0 et 12?
    j'ai corrigé l'erreur de la boucle for comme ceci: for(indice=1; indice<taille;indice++).... merci

    lors de la première boucle il comparera Si altitudes[1]>altitudes[0] ainsi de suite ...

    j'ai toujours la même erreur 76: error: invalide types 'int[int] for array subscript

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    L'erreur est quand même super explicite: tu as dû te paner sur le type de ton tableau.

    Dans ta déclaration anticipée [ligne 11], tu définis ton tableau [1ier argument] en int*.
    Alors que dans ton implémentation à partir de la [ligne 67], il y a de fortes probabilités que tu l'aies déclaré en simple entier int

  10. #10
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    Si tu veux comprendre et tester des possibilités, je te conseille d'aller jeter un oeil ici

    ==> http://c.developpez.com/faq/?page=Les-tableaux

    Tu as l'utilisation des tableaux et le passage en paramètres des tableaux/pointeurs. Ca pourra t'être très utile

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par PadawanDuDelphi Voir le message
    En outre tu n'a pas besoin de déclarer une fonction dans un fichier cpp. ça a un intérêt uniquement si tu sépare tes déclarations (.h) de tes implémentations (.cpp)
    C'est quand-même bien de le faire dès qu'on commence à avoir 3 ou 4 fonctions. On écrit la fonction X qui va appeler la fonction Y (dont on a une vague idée) puis on écrit la fonction Y. Si on veut que ça compile, il faut bien penser alors à écrire la fonction Y avant la X. Ou alors on ne s'embête pas et on écrit d'abord les protos puis on code la Y quand on veut...

    Citation Envoyé par fredattack Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        /** Traitement ------------------------------------------------------**/
        analyse_montees_descentes(altitudes,taille,&d_montee,
                                  &d_descente,&d_plat,&h_montee,&h_descente,&MAXVAL,&MINVAL) ;
    Essaye de réserver les noms "tout majuscules" pour les macros. C'est une convention mais ça rend les choses plus facilement lisibles.

    Ensuite si t'es familier avec les structures, alors tu peux regrouper les éléments de même nature dans une structure. Te suffit alors de passer la structure à ta fonction (un seul paramètre au lieu de 15) qui pourra alors accéder à tous lesdits éléments...

    Citation Envoyé par fredattack Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #define TAILLE 600
     
        int altitudes[TAILLE] =
                 {100, 130, 160, 210, 205, 200, 205, 160, 110, 120, 115, 90};
     
        int taille,
        taille = 12;
    Et pourquoi tu n'utilises pas directement #define TAILLE 12 ??? En plus ça t'éviterait de le passer en paramètre à toutes les fonctions qui manipulent le tableau...


    Citation Envoyé par fredattack Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    else (altitudes[indice]>=altitudes[indice-1])
    par contre, j'ai maintenant une erreur de compilation à la ligne 76: error: invalide types 'int[int] for array subscript????
    Ben oui. Ben peut-être que si tu écrivais explicitement l'instruction "if" le compilo verrait mieux que tu veux là aussi faire une évaluation...
    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]

Discussions similaires

  1. Erreur avec une fonction créée
    Par ptitemeuh dans le forum Débuter
    Réponses: 6
    Dernier message: 08/12/2011, 10h14
  2. appeler une fonction dont le nom est dans un parametre
    Par djams9 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 15/06/2011, 11h42
  3. [MySQL] Erreur avec une fonction
    Par nO_life dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 20/08/2008, 22h39
  4. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

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