Structure: Exemple de recherche et de tri

Author:

 list, list
Download

#include 
#include 

typedef struct  { unsigned long id;
                  char *nom;
				  char *pays;
                } client ;
 int id_cmp(const void *s1, const void *s2); //prototype de comparateur
int main( )
{

  client list_client[ ] = { {3, "sakoba", "France"}, {5, "Bernard", "Belgique"},
						{4, "Nicolas", "US"}, {2,  "Alex", "Espagne"}, {1, "Bill", "Angleterre"} };
  client requete;
  client *estTrouve = NULL; // résultat de la recherche
  int nbrClient = sizeof( list_client ) / sizeof ( client );

  printf( "Tapez le nombre des clients: ");
  scanf( "%lu", &requete.id );

  printf( "nListe des Clients:nn"
          "%16s %16s %16s %16sn", "Index", "ID", "nom", "Pays" );

  for ( int i = 0; i < nbrClient ; i++ )
    printf( "%16d %16u %16s %16sn", i, list_client[i].id, list_client[i].nom, list_client[i].pays );

  qsort( list_client, nbrClient, sizeof( client ), id_cmp );

  printf( "nListe triée des Clients:nn"
          "%16s %16s %16s %16sn", "Index", "ID", "nom", "Pays" );
  for ( i = 0; i < nbrClient ; i++ )
    printf( "%16d %16u %16s %16sn", i, list_client[i].id, list_client[i].nom, list_client[i].pays );

  estTrouve = (client *) bsearch( &requete, list_client, nbrClient,
                             sizeof( client ), id_cmp  );
  if ( estTrouve == NULL )
    printf( "Aucun client trouvé avec cet ID %lu.n", requete.id );
  else
    printf( "Voici le client qui a ID %lu : %s. %3sn",
            requete.id, estTrouve->nom, estTrouve->pays );
  return 0;
} 

int id_cmp(const void *s1, const void *s2)
{
  client *p1 = (client *)s1;
  client *p2 = (client *)s2;

  if      ( p1->id <  p2->id ) return -1;
  else if ( p1->id == p2->id ) return  0;
  else return 1;
}

/*
Tapez le nombre des clients: 4

Liste des Clients:

           Index               ID              nom             Pays
               0                3           sakoba           France
               1                5          Bernard         Belgique
               2                4          Nicolas               US
               3                2             Alex          Espagne
               4                1             Bill       Angleterre

Liste triÚe des Clients:

           Index               ID              nom             Pays
               0                1             Bill       Angleterre
               1                2             Alex          Espagne
               2                3           sakoba           France
               3                4          Nicolas               US
               4                5          Bernard         Belgique
Voici le client qui a ID 4 : Nicolas.  US

*/

Leave a Reply

Your email address will not be published. Required fields are marked *