begin process at 2012 05 30 18:58:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Tri dans un tableau de structure


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Tri dans un tableau de structure

samedi 14 mars 2009 à 19:11:34 | Tri dans un tableau de structure

sonic1

Bonjour, ma question serait de savoir si on peut trier un tableau de structures de la même manière qu'un tableau simple. Voici un code ou j'essaie de trier un tableau de moyenne dans un tableau de structure mais ça ne fonctionne pas. Est-ce quelqu'un peut me donner une indication. Merci.

<code>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/* --- déclaration des constantes --- */
#define TAILLE_NOM 10
#define TAILLE_PRENOM 2*TAILLE_NOM
#define NB_NOTES 5 /* nombre de notes par étudiants */
#define MAX 25 /* nombre de notes pour tous les étudiants */
#define MAX_ETUDIANTS 50

/* --- declaration du type etudiant --- */
    struct etudiant {
            char nom[TAILLE_NOM]       ;
            char prenom[TAILLE_PRENOM] ;
            float notes[MAX];
            float moyennes[MAX/NB_NOTES];
            float somme;
            int age;
        } ;

/* --- variables globales --- */
int nbeleves = 0; /* variable qui va servir à mémoriser le nombre d' */
/* eleves                                                            */
int i, j, k,l;
float tempo;
struct etudiant tab_eleves[MAX_ETUDIANTS];

/* --- procédures et fonctions --- */
void saisie_eleves();
void affichage1();
void affichage2();
void moyennes();
void tri_tab();

int main(void)
{
  int choix = -1 ;
 
  /* -- boucle d'affichage du menu -- */
  while (choix != 0 )
  {
     printf(" \n------------------------------------------------------------------\n");
     printf("  -1- Saisie d'une liste d'élèves \n");
     printf("  -2- Affichage de la liste des noms, prénoms, âges et leurs notes\n");
     printf("  -3- Affichage de la liste des noms, prénoms, âges et leurs moyennes\n");
     printf("  -4- Affichage uniquement du tableau de moyennes\n");
     printf("  -5- Affichage du tri du tableau de moyennes\n");
     printf("  -0- Quitter\n");
     printf(" --------------------------------------------------------------------\n");
     printf("Choix :\n");
     scanf("%d",&choix);
    
     /* -- selecteur : appel des procedures -- */
     switch (choix)
     {
       case 1 : saisie_eleves();
                break ;

       case 2 : affichage1();
                break ;

       case 3 : affichage2();
                break;

       case 4 : moyennes();
                break;
               
       case 5 : tri_tab();
                break;

       case 0 : printf("Au revoir \n");
                break ;

       default: printf("Erreur de saisie\n");
                break;                  
     }
  }
 
  printf( "\n" );
 
  return EXIT_SUCCESS;
}   
 
void saisie_eleves()
{
  i = 0,j = 0, k = 0;

  /* déclaration d'une variable struct qui prend les champs nom, */
  /* prénom, âge, notes, somme et moyennes pour tab_eleves ().     */
  struct etudiant contenue ;
  int termine ;
  termine = 0;
 
  /* boucle de saisie qui démarre si l'entrée du champ nom est dif-*/
  /* -férent de 0                                                  */
  while ( ! termine )
   {
     printf( "Entrez un nom ( nom = \"fin\" pour terminer) :" );
     scanf( "%s", contenue.nom );
 
     /* fonction strcmp qui comparaît le nom entré et le mot fin   */
     termine = (( strcmp( contenue.nom, "fin" ) ) == 0 );
 
     /* si la saisie est différente de 0 représenté par le mot fin */
     /* on demande le reste des informations                       */
     if ( ! termine )
      {
        printf( "Entrez un prénom :" );
        scanf( "%s", contenue.prenom );
 
        printf( "Entrez un âge :" );
        scanf( "%d", &contenue.age );

        contenue.somme = 0;

        for( j = 0;j < NB_NOTES; j++ )
         {
           printf("notes : ");
           /* à chaque entrée, case suivante */
           scanf("%f",contenue.notes+j);
           /* calcul des 5 1eres notes entrées et dont la somme est affe- */
           /* -ctée au champ somme de la variable contenue                */
           contenue.somme += contenue.notes[j];
   
           /* tous les NB_NOTES lues au clavier, on calcule leur moyenne  */
           if ((j+1)%NB_NOTES == 0)
            {
              contenue.moyennes[(j+1)/NB_NOTES - 1] = contenue.somme/NB_NOTES;
              contenue.somme = 0;
            }
          }
         /* affectation du contenu de la variable struct au tableau */
         /* tab_eleve[] déclaré en variable globale                 */
         tab_eleves[nbeleves] = contenue ;
         nbeleves++ ;
      } /* fin de la 1ere condition if */
     printf( "\n" );
   } /* fin de la boucle while */
   /* on met a jour la variable de controle du tableau */
}


/* --- fonction affichage nom, prénom, âge et nombre de notes --- */
void affichage1()
{
  int i;
    printf( "\n----- Virification saisie ------\n" );

    for ( i = 0; i < nbeleves; i++ )
    {
        printf( "\neleve %2d : ", ( i + 1 ) );
        printf( "%10s %10s ", tab_eleves[i].nom, tab_eleves[i].prenom );
        printf( "%2d \n", tab_eleves[i].age );
        printf( "\nNotes :" );
        for ( j = 0; j < NB_NOTES; j++ )
            printf( "%6.2f", tab_eleves[i].notes[j] ); 
 
        printf( "\n" );
    }
}
   
/* --- fonction affichage nom, prénom et moyenne --- */
void affichage2()
{
    printf( "\nNoms, prénoms et moyennes :\n" );
  
    for (i = 0; i < nbeleves; i++)
    {
        printf("\n%10s %10s %6.2f\n", tab_eleves[i].nom,
        tab_eleves[i].prenom, tab_eleves[i].moyennes[k]);
    }
}
   
/* --- fonction affichage tableau des moyennes --- */
void moyennes()
{
   printf("\nTableau des moyennes :\n");
   for (i = 0; i < NB_NOTES; i++)
   printf("\n%6.2f\n", tab_eleves[i].moyennes[k]);
}
 void tri_tab()
 {
     float tempo;
    /* --- TRI du tableau --- */
    for (i = 0 ; i < NB_NOTES ; i++)
     {
       /* boucle inverse, d'inversion des cases */
       while ( (k > 0) && (tab_eleves[i].moyennes[k] < tab_eleves[i].moyennes[k-1]) )
       {
         tempo = tab_eleves[i].moyennes[k-1] ;
         tab_eleves[i].moyennes[k-1] = tab_eleves[i].moyennes[k];
         tab_eleves[i].moyennes[k--] = tempo;
       }
     }
    printf("Les valeurs triées sont :\n");
    for (i = 0 ; i < NB_NOTES ; i++)
    printf("%6.2f", tab_eleves[i].moyennes[k]);
    printf("\n");
}
/* ------------------------------------------------- */ 
</code>
samedi 14 mars 2009 à 23:11:05 | Re : Tri dans un tableau de structure

juju12

Il ne faut pas oublier de copier l'ensemble des données : voilà par exemple une fonction qui échange deux éléments d'un tableau.

struct _M{...};
struct _M Array[N_MAX];

void _Swap(int i,int j) // échange des éléments i et j
{
   _M Buffer;
   memcpy(&Buffer,Array+i,sizeof(_M));
   memcpy(Array+i,Array+j,sizeof(_M));
   memcpy(Array+j,&Buffer,sizeof(_M));
   return;
}

dimanche 15 mars 2009 à 08:20:17 | Re : Tri dans un tableau de structure

coucou747

Administrateur CodeS-SourceS
salut

ta methode de tri est mauvaise.

tu peux coder une fonction qui compare deux structures et appeller qsort, ca sera beaucoup plus simple et beaucoup plus rapide.
dimanche 15 mars 2009 à 19:30:08 | Re : Tri dans un tableau de structure

sonic1

Juju12, merci pour ta réponse mais je ne comprend pas ta répone;

coucou47, j'ai étudié la fonction qsort mais je ne sais pas comment l'implémenter dans mon code. Est-ce que il faut que je modifie mon code avec des pointeurs de structures ? Si oui, je ne maîtrise pas encore les pointeurs, donc, si tu a un exemple, il sera le bienvenue. merci pour ta réponse .
lundi 16 mars 2009 à 01:54:22 | Re : Tri dans un tableau de structure

coucou747

Administrateur CodeS-SourceS
si tu cherchais un peu la doc sur le net, tu trouverais facilement a quoi sert memcpy et tu trouverais facilement des exemples pour qsort.


Cette discussion est classée dans : printf, tab, notes, moyennes, eleves


Répondre à ce message

Sujets en rapport avec ce message

Aide fonctions [ par Anonymal ] Bonsoir, voilà je dois faire un code où le professeur tape les 20 notes de ses 20 élèves, le programme calculant la moyenne et l'affichant, puis donne [AIDE] Finition mastermind SVP [ par ribery91720 ] Bonjour a tous, Voila j'ai fait un mastermind des plus basiques sans graphisme ni rien mais il ne marche pas dans tous les cas Je vous met mon code : triage du tableau [ par devamos ] bonsoir,s'il vous plait mes freres j'ai écri un petit programme qui tri un tableau de maniere croissante mais il ne veux plus marcher,,,,j'aimerais qu Problème générateur de grille de sudoku en C [ par Dovah ] Bonjour, je suis débutant en programmation, et pour m'entraîner j'ai décidé de créer un programme qui génère aléatoirement une grille de sudoku en C Programme en c++ [ par noussa44 ] Bonjour tout le monde, j'ai besoin svp de vore aide sur un programme que j'ai fait qui permet de trier des réels dans un tableau.Mais j'ai un problèm Problème de couleur dans tableau [ par hitachicm615 ] Bonjour,J'ai déclaré un tableau et pour le remplir par des croix ou des ronds j'ai tapé ceci dans un switchcase 1:                tab[0][5] = 'X';   aide sur un prog [ par jsuititidu27 ] Bonjour, j'ai besoin d'un petit coup de main. ceci est un exo qui demande d'écrire un programme de tri de chaines de caractères. J'ai donc écrit le co jeux mode console en c [ par fifiprog ] Bonsoir a tous je dois creer un jeux sur un damier 10x10 ou tout d'abord deux joueurs pourrons s'affronter c'est le jeux des loups et agneau le but es CONVERSION BINAIRE/HEXA [ par alex64100 ] BJR,je dois développer un prog d e conversion   binaire/héxaa partir de ce code  :#include #include #include /*  exo 2.Becrire un n Petite Question Sur remplier un tableau de type String(Chaine de carac) en langage c [ par Ayoubyoub ] [code=cpp]#include #include main(){ char tab[20]; int n,i; printf("Saisir Element du Tableau : \t"); scanf("%d",&n);


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales