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 :

problème tableau de structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Par défaut problème tableau de structure
    Voici mon problème je ne comprend pas pourquoi j'ai ces erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    C:\Users\SnaKe\Desktop\TPC\essai.c: In function `main':
    C:\Users\SnaKe\Desktop\TPC\essai.c:36: error: incompatible type for argument 1 of `classement'
    C:\Users\SnaKe\Desktop\TPC\essai.c: At top level:
    C:\Users\SnaKe\Desktop\TPC\essai.c:51: error: conflicting types for 'classement'
    C:\Users\SnaKe\Desktop\TPC\essai.c:11: error: previous declaration of 'classement' was here
    C:\Users\SnaKe\Desktop\TPC\essai.c:51: error: conflicting types for 'classement'
    C:\Users\SnaKe\Desktop\TPC\essai.c:11: error: previous declaration of 'classement' was here
    voici mon code:
    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
    #include<stdio.h>
     
    typedef struct
    {
        double nb1;
        double nb2;
        int nb3;
        double nb4;
    } stock;
     
    void classement(stock commande_trier, int N);
     
    int main(void)
    {
        int N, i, j;
     
        printf("Combien de commande voulez-vous entrer ?: ");
        scanf("%d", &N);
     
        stock commande[N]; /*Déclaration d'un tableau de structure*/
        int tableau_entier[N];
     
        /*Boucle d'enregistrement de N commande*/
        for (i=0;i<N;i++)
        {
            printf("Entrez la commande 1: ");
            scanf("%lf", &commande[i].nb1);
            printf("Entrez la commande 2: ");
            scanf("%lf", &commande[i].nb2);
            printf("Entrez la commande 3: ");
            scanf("%d", &commande[i].nb3);
            printf("Entrez la commande 4: ");
            scanf("%lf", &commande[i].nb4);
            printf("\n");
        }
        classement (commande, N);
        /*Affichage des commandes*/
        printf("Affichage des commandes par ordre chronologique:\n\n");
        printf("|----------------|---------------|---------------|--------------|\n");
        printf("|commande1\t | commande2\t | commande3\t | commande4\t|\n");
        printf("|----------------|---------------|---------------|--------------|\n");
        for (j=0;j<N;j++)
        {
            printf("|%lf\t | %lf\t | %d\t\t | %lf\t|\n", commande[tableau_entier[j]].nb1, commande[tableau_entier[j]].nb2, commande[tableau_entier[j]].nb3, commande[tableau_entier[j]].nb4);
            printf("|----------------|---------------|---------------|--------------|\n");
        }
        return 0;
    }
     
    int classement(stock commande_trier[], int N)
    {
        int i, j;
        int tableau_entier[N];
        int i_depart = 0;
        int i_min = 0;
        int i_encours;
     
        for (i=0;i<N;i++)
        {
            tableau_entier[i] = -1;
        }
        /* on recherche l'indice de départ */
        for (i=1;i<N;i++)
        {
            if (commande_trier[i].nb1 < commande_trier[i_depart].nb1)
            {
                i_depart = i;
            }
        }
        i_encours = i_depart;
        for (i=1;i<N;i++) /* on fait N-1 tours car on a déjà le départ */
        {
            /* on recherche le nouveau min */
            /* on recherche le 1er indice i_min valide */
            i_min = 0;
            while (i_min == i_encours || tableau_entier[i_min] != -1)
            {
                i_min++;
            }
            /* on recherche le vrai min */
            for(j=i_min+1;j<N;j++)
            {
                if (commande_trier[j].nb1 < commande_trier[i_min].nb1 && tableau_entier[j] < 0 && j != i_encours)
                {
                    i_min = j;
                }
            }
            /* on met à jour */
            tableau_entier[i_encours] = i_min;
            i_encours = i_min;
        }
        return tableau_entier[N];
    }
    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int classement(stock commande_trier[], int N)
    {
    ...
    }
    Le prototype de classement est faux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void classement(stock commande_trier[], int N);

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Par défaut
    Oui petite étourderie désolé mais je ne comprend pas les erreurs de mon compilo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    C:\Users\SnaKe\Desktop\TPC\essai.c: In function `main':
    C:\Users\SnaKe\Desktop\TPC\essai.c:36: error: incompatible type for argument 1 of `classement'
    C:\Users\SnaKe\Desktop\TPC\essai.c: In function `classement':
    C:\Users\SnaKe\Desktop\TPC\essai.c:65: error: subscripted value is neither array nor pointer
    C:\Users\SnaKe\Desktop\TPC\essai.c:65: error: subscripted value is neither array nor pointer
    C:\Users\SnaKe\Desktop\TPC\essai.c:83: error: subscripted value is neither array nor pointer
    C:\Users\SnaKe\Desktop\TPC\essai.c:83: error: subscripted value is neither array nor pointer
    et le code modifier:
    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
    #include<stdio.h>
     
    typedef struct
    {
        double nb1;
        double nb2;
        int nb3;
        double nb4;
    } stock;
     
    int classement(stock commande_trier[], int N);
     
    int main(void)
    {
        int N, i, j;
     
        printf("Combien de commande voulez-vous entrer ?: ");
        scanf("%d", &N);
     
        stock commande[N]; /*Déclaration d'un tableau de structure*/
        int tableau_entier[N];
     
        /*Boucle d'enregistrement de N commande*/
        for (i=0;i<N;i++)
        {
            printf("Entrez la commande 1: ");
            scanf("%lf", &commande[i].nb1);
            printf("Entrez la commande 2: ");
            scanf("%lf", &commande[i].nb2);
            printf("Entrez la commande 3: ");
            scanf("%d", &commande[i].nb3);
            printf("Entrez la commande 4: ");
            scanf("%lf", &commande[i].nb4);
            printf("\n");
        }
        classement (commande, N);
        /*Affichage des commandes*/
        printf("Affichage des commandes par ordre chronologique:\n\n");
        printf("|----------------|---------------|---------------|--------------|\n");
        printf("|commande1\t | commande2\t | commande3\t | commande4\t|\n");
        printf("|----------------|---------------|---------------|--------------|\n");
        for (j=0;j<N;j++)
        {
            printf("|%lf\t | %lf\t | %d\t\t | %lf\t|\n", commande[tableau_entier[j]].nb1, commande[tableau_entier[j]].nb2, commande[tableau_entier[j]].nb3, commande[tableau_entier[j]].nb4);
            printf("|----------------|---------------|---------------|--------------|\n");
        }
        return 0;
    }
     
    int classement(stock commande_trier[], int N)
    {
        int i, j;
        int tableau_entier[N];
        int i_depart = 0;
        int i_min = 0;
        int i_encours;
     
        for (i=0;i<N;i++)
        {
            tableau_entier[i] = -1;
        }
        /* on recherche l'indice de départ */
        for (i=1;i<N;i++)
        {
            if (commande_trier[i].nb1 < commande_trier[i_depart].nb1)
            {
                i_depart = i;
            }
        }
        i_encours = i_depart;
        for (i=1;i<N;i++) /* on fait N-1 tours car on a déjà le départ */
        {
            /* on recherche le nouveau min */
            /* on recherche le 1er indice i_min valide */
            i_min = 0;
            while (i_min == i_encours || tableau_entier[i_min] != -1)
            {
                i_min++;
            }
            /* on recherche le vrai min */
            for(j=i_min+1;j<N;j++)
            {
                if (commande_trier[j].nb1 < commande_trier[i_min].nb1 && tableau_entier[j] < 0 && j != i_encours)
                {
                    i_min = j;
                }
            }
            /* on met à jour */
            tableau_entier[i_encours] = i_min;
            i_encours = i_min;
        }
        return tableau_entier[N];
    }

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ce n'est pas l'en-tête de la fonction qui est erronné mais le prototype.
    Voir mon post précédent.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 327
    Par défaut
    Je ne comprend pas pourquoi je lui passe pourtant une variable de type stock et un entier que sa soit dans la déclaration du prototype ou à l'utilisation de la fonction non ?

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Oui, maintenant.
    Mais la fonction demande un tableau de meteo , pas un meteo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int classement(meteo releve_trier, int N)
    {
    ....
            if (releve_trier[i].temp_min < releve_trier[i_depart].temp_min)...
    D'où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int classement(meteo releve_trier[], int N);
    ....
    int classement(meteo releve_trier[], int N)
    {
    ...
    }

Discussions similaires

  1. problème tableau de structure
    Par alaninho dans le forum C
    Réponses: 9
    Dernier message: 24/08/2012, 14h18
  2. Problème de tableau de structures, étrange
    Par Kalyptus dans le forum Débuter
    Réponses: 15
    Dernier message: 08/06/2008, 01h05
  3. Problème avec un tableau de structure
    Par pek.plus.ultra59 dans le forum C
    Réponses: 47
    Dernier message: 01/04/2008, 16h17
  4. Problème avec un tableau de structure
    Par Sofute dans le forum C
    Réponses: 10
    Dernier message: 16/10/2007, 15h29
  5. Problème free() : Tableau de structures
    Par bit_o dans le forum C
    Réponses: 11
    Dernier message: 28/04/2007, 15h53

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