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 de tri de tableau dans un programme


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 22
    Points : 14
    Points
    14
    Par défaut problème de tri de tableau dans un programme
    Salut,
    Je fais un programme de moyenne de notes, ecart type et médiane.
    J'ai presque aboutit, sauf que pour la partie pour avoir la médiane, je dois bien sur trier mon tableau de notes.
    Le problème c'est que mon tri ne marche que pour 2 et 3 notes.Après ça fait n'importe quoi. ( ma recherche de médiane marche bien, car j'avais testé sans
    tri, et j'avais bien la valeur centrale).
    Je n'arrive pas à trouver l'erreur
    Mon bout de programme sur le tri du tableau est situé ligne 68 à 80.
    Cordialement

    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
    95
    96
    97
    98
    99
    100
    101
     
    #include <stdio.h>         // Directives de preprocesseur.
    #include <stdlib.h>
    #include <math.h>
     
    int main (void)        // Debut de la fonction.
    {
        int N = 0, i = 0, mediane_1 = 0, j=0, k=0, t=0;// Creation des variables.
        float Ai = 0, S1 = 0, S2 = 0, M = 0;
        double V = 0, Ec = 0, noteMin = 20, noteMax = 0,tab[i],mediane = 0;
        printf ("Programme de calcul de la moyenne et ecart type de notes .\n"); // Message d'accueil.
        printf ("\nEntrez le nombre de cours : ");                               // Saisie du nombre de cours.
        scanf ("%d", &N);             // Nombre de cours stocke dans la variable "N".
     
        for (i=0;i<N;i++)            // Initialisation de la boucle for , avec i allant de 1 jusqu'a�N par pas de 1.
        {
          printf ("\nEntrez les notes : "); // Saisie des notes une par une.
    	  scanf ("%f", &Ai);
    	                                    // Stockage des notes dans la variable Ai.
    	  while(Ai < 0 || Ai > 20 )
          {
           printf("\nErreur!\nEntrez la note : "); // Affichage d'un message d'erreur lorsque Ai < 0
           scanf ("%f", &Ai);
          }                                       // et lorsque Ai > 20.L'utilisateur doit redonner une note.
          tab [i] = Ai;
          S1 = S1+Ai;                 // Incrementation de la somme des notes.
          S2 = S2+Ai*Ai;              // Incrementation du carre de la somme des notes.
     
          if (Ai > noteMax)           // Structure if permettant de trouver la note maximale.
          {
            noteMax = Ai;
          }
          else
          {
            noteMax = noteMax;
          }
          if (Ai < noteMin)           // Structure if permettant de trouver la note minimale.
          {
            noteMin = Ai;
          }
          else
          {
            noteMin = noteMin;
          }
        }  // Fin de la boucle For.
     
        M = S1/N;        // Calcul de la moyenne.
        V = S2/N-M*M;    // De la variance.
        Ec = sqrt (V);   // Et de l'ecart type.
        printf ("\nLa moyenne est : %f\nL'ecart type est : %lf\nNote maximale: %f\nNote minimale: %f\n", M, Ec, noteMax, noteMin); // Affichage de la moyenne, de l'�ecart type, de la note maximale et minimale.
     
        if (M < 10)                              // Structure if permettant d'ajouter des commentaires
          {
            printf ("Vous etes ajourne.\n");
          }                                      // en fonction de la moyenne ( M<10 : ajourne,M>10 :admis,
        else                                     // M>15 : avec mention tres� bien, M>12 : mention bien.
          {
            printf ("Vous etes admis.\n");
          }
        if (M >= 15)
          {
            printf ("Avec mention tres bien.\n");
          }
        else if (M >= 12)
          {
            printf ("Avec mention bien.\n");
          }
     
       for (t=1; t < N; t++)     //tri des notes
         {
     
         for(j=0; j < N - 1; j++)
          {
            if(tab[j] > tab[j+1])
             {
                k= tab[j] - tab[j+1];
                tab[j] -= k;
                tab[j+1] += k;
             }
          }
         }
     
          if (N%2 == 0) //pair                MEDIANE
    	  {
    		mediane = (tab[N/2]+tab[(N/2)-1])/2;
          }
    	  else if(N%2 == 1)  //impair
    	  {
    	   	mediane = N/2;
    		mediane_1 = ceil(mediane);
    		mediane = tab[mediane_1];
          }
       printf("\nRecapitulatif:\nVoici vos notes, votre moyenne et mediane!\n");
       for (i=0; i<N; i++)
          {
           printf("tab[%d] = %f\n", i, tab[i]);
          }
        printf ("Moyenne :%f\n",M);
        printf("Mediane :%f",mediane);
    return 0 ;                                    // Fin de la fonction.
    }

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Bonjour,

    Le main ne doit jamais contenir tout le code.
    Tu dois séparer ton code en plusieurs fonctions et essayer de choisir des noms de variables plus explicites.

    Ton algorithme de trie n'est pas heureux, essaye de voir du côté du buble sort (ce que tu essayes de faire). Si tu veux un trie plus performant, tu as déjà une fonction toute faite : qSort ( quick sort). Tu peux aussi rechercher d'autre algorithmes de tris (ex : rechercher le maximum, le placer à la fin et recommencer avec le tableau sauf le dernier élément), c'est toujours intéressant à connaître.

    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    k= tab[j] - tab[j+1];
                tab[j] -= k;
                tab[j+1] += k;
    Pourquoi ne pas passer directement par une valeur intermédiaire?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    k = tab[j];
    tab[j] = tab[j+1];
    tab[j+1] = k;

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Merci, je suis allez voir un autre algorithme de tri, j'ai fait une nouvelle fonction, mais toujours le même problème.Je vais faire une autre fonction pour la médiane demain, pour voir si c'est pas ça le problème.
    En attendant voici le programme arrangé

    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #include <stdio.h>         // Directives de preprocesseur.
    #include <stdlib.h>
    #include <math.h>
     
    void ordonnerTableau(double tab[], int N);
     
    int main (void)        // Debut de la fonction.
    {
        int N = 0, i = 0, mediane_1 = 0, j=0;// Creation des variables.
        float note = 0,somme_note = 0,somme_note_carre = 0,moyenne = 0;
        double variance = 0,ecart_type = 0, noteMin = 20, noteMax = 0,tab[i],mediane = 0;
        printf ("Programme de calcul de la moyenne et ecart type de notes .\n"); // Message d'accueil.
        printf ("\nEntrez le nombre de cours : ");                               // Saisie du nombre de cours.
        scanf ("%d", &N);             // Nombre de cours stocke dans la variable "N".
     
        for (i=0;i<N;i++)            // Initialisation de la boucle for , avec i allant de 1 jusqu'a�N par pas de 1.
        {
          printf ("\nEntrez les notes : "); // Saisie des notes une par une.
    	  scanf ("%f", &note);
    	                                    // Stockage des notes dans la variable Ai.
    	  while(note < 0 || note > 20 )
          {
           printf("\nErreur!\nEntrez la note : "); // Affichage d'un message d'erreur lorsque Ai < 0
           scanf ("%f", &note);
          }                                       // et lorsque Ai > 20.L'utilisateur doit redonner une note.
          tab [i] = note;
          somme_note = somme_note+note;                 // Incrementation de la somme des notes.
          somme_note_carre = somme_note_carre+note*note;              // Incrementation du carre de la somme des notes.
     
          if (note > noteMax)           // Structure if permettant de trouver la note maximale.
          {
            noteMax = note;
          }
          else
          {
            noteMax = noteMax;
          }
          if (note < noteMin)           // Structure if permettant de trouver la note minimale.
          {
            noteMin = note;
          }
          else
          {
            noteMin = noteMin;
          }
        }  // Fin de la boucle For.
     
        moyenne = somme_note/N;        // Calcul de la moyenne.
        variance = somme_note_carre/N-moyenne*moyenne;    // De la variance.
        ecart_type = sqrt (variance);   // Et de l'ecart type.
        printf ("\nLa moyenne est : %f\nL'ecart type est : %lf\nNote maximale: %f\nNote minimale: %f\n", moyenne, ecart_type, noteMax, noteMin); // Affichage de la moyenne, de l'�ecart type, de la note maximale et minimale.
     
        if (moyenne < 10)                              // Structure if permettant d'ajouter des commentaires
          {
            printf ("Vous etes ajourne.\n");
          }                                      // en fonction de la moyenne ( M<10 : ajourne,M>10 :admis,
        else                                     // M>15 : avec mention tres� bien, M>12 : mention bien.
          {
            printf ("Vous etes admis.\n");
          }
        if (moyenne >= 15)
          {
            printf ("Avec mention tres bien.\n");
          }
        else if (moyenne >= 12)
          {
            printf ("Avec mention bien.\n");
          }
     
         ordonnerTableau(tab,N);
     
     
          if (N%2 == 0) //pair                MEDIANE
    	  {
    		mediane = (tab[N/2]+tab[(N/2)-1])/2;
          }
    	  else if(N%2 == 1)  //impair
    	  {
    	   	mediane = N/2;
    		mediane_1 = ceil(mediane);
    		mediane = tab[mediane_1];
          }
       printf("\nRecapitulatif:\nVoici vos notes, votre moyenne et mediane!\n");
       for (i=0; i<N; i++)
          {
           printf("tab[%d] = %f\n", i, tab[i]);
          }
        printf ("Moyenne :%f\nMediane :%f",moyenne, mediane);
    return 0 ;                                    // Fin de la fonction.
    }
     
    void ordonnerTableau(double tab[], int N)
    {
    int i,j,FIN,AIDE;
    for (i=N-1 ; i>0 ; i=FIN)
         {
          FIN=0;
          for (j=0; j<i; j++)
                if (tab[j]>tab[j+1])
                {
                 FIN=j;
                 AIDE=tab[j];
                 tab[j]=tab[j+1];
                 tab[j+1]=AIDE;
                }
         }
    }

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Généralement, on utiliser des noms de variables en majuscules uniquement pour les constantes.
    Je pense que ton trie est juste mais il m'a fallu un certain temps pour le comprendre.
    i n'est plus un simple compteur de boucle, c'est l'indice du dernier élément à trier.

    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
    void ordonnerTableau(double tab[], int N)
    {
    int dernierElementATrier = N - 1;
    int dernierePermutation = 0;
    int i;
     
    while( dernierElementATrier != 0)
    {
           for(i = 0; i < dernierElementATrier - 1; ++i)
            /* ce serait peut être plus clair de faire i = 1; i < dernierElementATrier puis d'utiliser i-1 et i (?) */
                  if( tab[i] > tab[i+1] )
                  {
                         int valeurTemporaire  = tab[i];
                         tab[i] = tab[i+1];
                         tab[i+1] = valeurTemporaire;
                         dernierePermutation = i;
                  }
           /* Un fois sortie de la boucle, on sait que les éléments d'indices > dernierePermutation sont triés par ordre croissant (si a>b et b>c alors a>c).
               De plus, on sait que l'élément d'indice dernierePermutation + 1  est l'élément le plus grand sur l’intervalle [0; dernierePermutation + 1] ( principe du trie bulle ).
                Il ne reste donc qu'à trier l'interval [0; dernierePermutation] */
           dernierElementATrier = dernierePermutation;
    }
    Je pense que c'est déjà un peu plus clair, le deuxième commentaire me semble obligatoire.
    Peut être ne pas le laisser dans le corps de la fonction mais l'ajouter au commentaire de ta fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /** @brief Description de la fonction et de ce quelle fait, ici il faudrait aussi expliquer le principe de ton trie.
    @param double tab[] : tableau de double à trier
    @param int N : nombre d'élément du tableau à trier
    @return void
    */
    void ordonnerTableau(double tab[], int N);
    Si tu es en IUT, ils vont bientôt te demander des commentaires comprenant toutes ces informations.
    Les /** */, @brief, @param, @return permettent de générer une documentation doxygen.
    C'est très utile car tu n'as plus qu'à mettre toutes tes fonctions dans un même fichier, à générer la documentation pour voir toutes les fonctions que tu as déjà créé, à quoi elles servent et comment les utiliser ce qui peut t'éviter de réécrire des fonctions que tu as déjà écrites.

    J'ai un peu dérivé, mais je pensais que cela pourrait t'intéresser

  5. #5
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main (void)        // Debut de la fonction.
    {
        int ... i = 0, ...// Creation des variables.
    ...
        double ...tab[i],...
    Le tableau créé a 0 éléments

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    J'ai fais avec ta méthode de tri,sa ne marche toujours pas.
    J'ai toujours la même erreur, sa marche en dessous de 3 notes.
    Puis au dessus de 3, en fait le problème c'est que ça trie , mais je sais pas pourquoi il y'a une des notes qui est remplacée par l’écart type.
    Et cela je l'ai remarqué quel que soit les fonctions pour trier (je pense qu'elle marche toutes). Je n'arrive pas du tout à voir l'erreur, du pourquoi, du comment il y'a une valeur du tableau qui est remplacé par l'écart type.

    La j'ai fait une nouvelle fonction de trie par sélection, j'ai toujours la même erreur.
    (j'ai joint 2 consoles avec 4 et 5 notes ou on voit l'erreur)

    PS : mon tableau a bien une taille, elle est définie dans la boucle, ainsi que ses valeurs

    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    #include <stdio.h>         // Directives de preprocesseur.
    #include <stdlib.h>
    #include <math.h>
     
    void ordonnerTableau(double tab[], int N);
     
    int main (void)        // Debut de la fonction.
    {
        int N = 0, i = 0, mediane_1 = 0, j=0;// Creation des variables.
        float note = 0,somme_note = 0,somme_note_carre = 0,moyenne = 0;
        double variance = 0,ecart_type = 0, noteMin = 20, noteMax = 0,tab[i],mediane = 0;
        printf ("Programme de calcul de la moyenne et ecart type de notes .\n"); // Message d'accueil.
        printf ("\nEntrez le nombre de cours : ");                               // Saisie du nombre de cours.
        scanf ("%d", &N);             // Nombre de cours stocke dans la variable "N".
     
        for (i=0;i<N;i++)            // Initialisation de la boucle for , avec i allant de 1 jusqu'a�N par pas de 1.
        {
          printf ("\nEntrez les notes : "); // Saisie des notes une par une.
    	  scanf ("%f", &note);
    	                                    // Stockage des notes dans la variable Ai.
    	  while(note < 0 || note > 20 )
          {
           printf("\nErreur!\nEntrez la note : "); // Affichage d'un message d'erreur lorsque Ai < 0
           scanf ("%f", &note);
          }                                       // et lorsque Ai > 20.L'utilisateur doit redonner une note.
          tab [i] = note;
          somme_note = somme_note+note;                 // Incrementation de la somme des notes.
          somme_note_carre = somme_note_carre+note*note;              // Incrementation du carre de la somme des notes.
     
          if (note > noteMax)           // Structure if permettant de trouver la note maximale.
          {
            noteMax = note;
          }
          else
          {
            noteMax = noteMax;
          }
          if (note < noteMin)           // Structure if permettant de trouver la note minimale.
          {
            noteMin = note;
          }
          else
          {
            noteMin = noteMin;
          }
        }  // Fin de la boucle For.
     
        moyenne = somme_note/N;        // Calcul de la moyenne.
        variance = somme_note_carre/N-moyenne*moyenne;    // De la variance.
        ecart_type = sqrt (variance);   // Et de l'ecart type.
        printf ("\nLa moyenne est : %f\nL'ecart type est : %lf\nNote maximale: %f\nNote minimale: %f\n", moyenne, ecart_type, noteMax, noteMin); // Affichage de la moyenne, de l'�ecart type, de la note maximale et minimale.
     
        if (moyenne < 10)                              // Structure if permettant d'ajouter des commentaires
          {
            printf ("Vous etes ajourne.\n");
          }                                      // en fonction de la moyenne ( M<10 : ajourne,M>10 :admis,
        else                                     // M>15 : avec mention tres� bien, M>12 : mention bien.
          {
            printf ("Vous etes admis.\n");
          }
        if (moyenne >= 15)
          {
            printf ("Avec mention tres bien.\n");
          }
        else if (moyenne >= 12)
          {
            printf ("Avec mention bien.\n");
          }
     
         ordonnerTableau(tab,N);
     
     
          if (N%2 == 0) //pair                MEDIANE
    	  {
    		mediane = (tab[N/2]+tab[(N/2)-1])/2;
          }
    	  else if(N%2 == 1)  //impair
    	  {
    	   	mediane = N/2;
    		mediane_1 = ceil(mediane);
    		mediane = tab[mediane_1];
          }
       printf("\nRecapitulatif:\nVoici vos notes, votre moyenne et mediane!\n");
       for (i=0; i<N; i++)
          {
           printf("tab[%d] = %f\n", i, tab[i]);
          }
        printf ("Moyenne :%f\nMediane :%f",moyenne, mediane);
    return 0 ;                                    // Fin de la fonction.
    }
     
    void ordonnerTableau(double tab[], int N)
    {
    int i, min, j , valeurtemporaire;
     
    for(i =0; i < N -1; i++)
    {
      min = i;
    for (j = i+1; j < N ; j++)
    if (tab[j] < tab[min])
    min = j;
    if (min != i)
    {
        valeurtemporaire = tab[i];
        tab[i] = tab[min];
        tab[min] = valeurtemporaire;
    }
    }
    }
    Images attachées Images attachées   

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        int N = 0, i = 0, mediane_1 = 0, j=0;// Creation des variables.
        float note = 0,somme_note = 0,somme_note_carre = 0,moyenne = 0;
        double variance = 0,ecart_type = 0, noteMin = 20, noteMax = 0,tab[i],mediane = 0;
    Tu déclares tab comme étant un tableau de double à 0 éléments, c'est ce que diogene te faisais remarquer.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Ah oui en effet!
    Du coup j'ai mis i quelconque, mais ça fait planter le programme.
    En fait, je viens de voir qu'on ne peut pas déclarer un tableau à taille variable en C, on doit passer par des structures : malloc,realloc ... j'ai rien compris....
    Il n' y a vraiment pas un truc tout simple pour définir un tableau de taille N?




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int N = 0, i , mediane_1 = 0, j=0;// Creation des variables.
        float note = 0,somme_note = 0,somme_note_carre = 0,moyenne = 0;
        double variance = 0,ecart_type = 0, noteMin = 20, noteMax = 0,tab[i],mediane = 0;

  9. #9
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    double * tableau;
     
    tableau = (double*)malloc(sizeof(double)*nbElement);//allocation de ton tableau
     
    //utilisation de ton tableau
     
    free(tableau); //quand tu n'as plus besoin de ton tableau

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Merci, nickel, ça marche bien, et toutes les fonctions de TRI aussi.
    Merci pour le malloc. Je vais regarder des explications pour bien saisir le truc.

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

Discussions similaires

  1. [XL-2007] Problème de tri de date dans un tableau croisée dynamique
    Par marcelisa2 dans le forum Excel
    Réponses: 4
    Dernier message: 15/04/2013, 13h45
  2. [Tableaux] Problème de tri de tableau à 2 dimensions
    Par lebigboss dans le forum Langage
    Réponses: 1
    Dernier message: 09/05/2007, 16h34
  3. Réponses: 3
    Dernier message: 21/09/2006, 15h55
  4. Réponses: 9
    Dernier message: 11/08/2006, 21h58
  5. Problème de récupération de tableau dans hash DBM
    Par siaoly dans le forum Langage
    Réponses: 1
    Dernier message: 01/05/2006, 16h00

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