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

  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)
    {
    ...
    }

  7. #7
    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 enfin sa compile merci mais ne marche pas sa plante à l'affichage du tableau, je pense que c'est parce que tableau_entier n'est pas bien rempli.

  8. #8
    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
    5
    6
    7
    8
     
    int classement(stock commande_trier[], int N)
    {
    ...
        int tableau_entier[N];
    ...
        return tableau_entier[N];
    }
    ne vas pas te retourner le tableau tableau_entier mais l'élément d'indice N (donc hors du tableau) du tableau LOCAL tableau_entier
    Une fonction ne peut retourner un tableau.
    Elle peut retourner un pointeur sur le début d'un tableau alloué dynamiquement (mais pas d'un tableau local parce qu'il est détruit en sortie de la fonction)
    Sinon, il faut passer le tableau en paramètre de la fonction (et on aura l'adresse du premier élément du tableau).

  9. #9
    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
    Très bien c'est bon ce souci la est réglé, je continu mon code et je reviendrai le poster si j'ai encore des problèmes.

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