Recherche séquentielle qui pose problème

Recherche séquentielle qui pose problème - C - Programmation

Marsh Posté le 23-02-2005 à 09:59:03    

Bonjour,
 
je suis entrain de terminer un programme et il me reste à effectuer une fonction de recherche. J'ai utilisé un algo donné par mon prof qui fonctionne. J'ai juste dû l'adapté vu que ici j'ai droit à des chaines de caractères. Seul problème est que j'ai 7 warnings et que je ne parviens pas à les déchiffrer. Si vous saviez me traduire ca en language francais ce serait sympa :d
 
Voici le code:
 

Code :
  1. /************************************************************************/
  2. /* NOM: SIMONIS **** PRENOM: ARNAUD**************************************/
  3. /* GROUPE: 2125 *********************************************************/
  4. /* TRAVAIL: LC40 ********************************************************/
  5. /* DERNIERE MODIFICATION: 14/02/05 **************************************/
  6. /************************************************************************/
  7. #include<stdlib.h>
  8. #include<stdio.h>
  9. #include<conio.h>
  10. #include<string.h>
  11. //prototypes des fonctions
  12. void affichage(int, struct FICHE *);
  13. void encodage(int, struct FICHE *);
  14. void indexation(int, struct FICHE *, struct INDEX *);
  15. void tri(int, struct INDEX *);
  16. void affichage_index(int, struct FICHE *, struct INDEX *);
  17. void recherche(int, char, struct INDEX *,int *);
  18. //declaration de la structure fiche
  19. struct FICHE
  20. {
  21. char nom[20];
  22. int age;
  23. char info[50];
  24. };
  25. //declaration de la structure index
  26. struct INDEX
  27. {
  28. char nom[20];
  29. int indice;
  30. };
  31. /************************************************************/
  32. /* INPUT: nombre d'elements saisis, adresse du debut du  */
  33. /*       vecteur de la struct fiche                        */
  34. /* PROCESS: encode les infos dans la structure fiche        */
  35. /* OUTPUT: /            */
  36. /************************************************************/
  37. void encodage(int nbre_elem, struct FICHE *pt)
  38. {
  39. int i,j=0;
  40. for(i=0;i<nbre_elem;i++)
  41. {
  42.  printf("------Fiche numero %d-----",i+1);
  43.  printf ("\n\nVeuillez saisir le nom: " );
  44.  fflush(stdin);
  45.  gets(pt->nom);
  46.  printf ("\nVeuillez saisir l'age: " );
  47.  fflush(stdin);
  48.  scanf ("%d",&pt->age);
  49.  printf ("\nVeuillez saisir l'info: " );
  50.  fflush(stdin);
  51.  gets(pt->info);
  52.  pt++;
  53. }
  54. }
  55. /************************************************************/
  56. /* INPUT: nombre d'elements saisis, adresse du debut du  */
  57. /*       vecteur de la struct fiche                        */
  58. /* PROCESS: affiche les infos de la structure fiche         */
  59. /* OUTPUT: /            */
  60. /************************************************************/
  61. void affichage(int nbre_elem, struct FICHE *pt)
  62. {
  63. int i;
  64. for(i=0;i<nbre_elem;i++)
  65. {
  66.  printf("------Fiche numero %d-----",i+1);
  67.  printf ("\nnom: " );
  68.  puts (pt->nom);
  69.  printf ("age: %d",pt->age);
  70.  printf ("\ninfo: " );
  71.  puts (pt->info);
  72.  pt++;
  73. }
  74. }
  75. /************************************************************/
  76. /* INPUT: nombre d'elements saisis, adresse du debut du  */
  77. /*       vecteur de la struct fiche,adresse du debut du    */
  78. /*    vecteur de la struct index                        */
  79. /* PROCESS: cree le vecteur indexation                      */
  80. /* OUTPUT: /            */
  81. /************************************************************/
  82. void indexation(int nbre_elem, struct FICHE *pt, struct INDEX *pt2)
  83. {
  84. int i;
  85. for(i=0;i<nbre_elem;i++)
  86. {
  87.  strcpy (pt2->nom,pt->nom);
  88.  pt2->indice = i;
  89.  pt++;
  90.  pt2++;
  91. }
  92. }
  93. /************************************************************/
  94. /* INPUT: nombre d'elements saisis, ,adresse du debut du    */
  95. /*    vecteur de la struct index                        */
  96. /* PROCESS: ordonne le vecteur indexation                   */
  97. /* OUTPUT: /            */
  98. /************************************************************/
  99. void tri(int nbre_elem, struct INDEX *pt2)
  100. {
  101. int i,j,test,inser2;
  102. char inser[20];
  103. i=1;
  104. while(i<nbre_elem)
  105. {
  106.  strcpy (inser,(pt2+i)->nom);
  107.  inser2 = (pt2+i)->indice;
  108.  j = i-1;
  109.  test = strcmp(inser,(pt2+j)->nom);
  110.  while (test < 0 && j>= 0)
  111.  {
  112.   strcpy ((pt2+(j+1))->nom,(pt2+j)->nom);
  113.   (pt2+(j+1))->indice = (pt2+j)->indice;
  114.   j = j-1;
  115.  }
  116.  strcpy ((pt2+(j+1))->nom,inser);
  117.  (pt2+(j+1))->indice = inser2;
  118.  i++;
  119. }
  120. }
  121. /************************************************************/
  122. /* INPUT: nombre d'elements saisis, adresse du debut du  */
  123. /*       vecteur de la struct fiche,adresse du debut du    */
  124. /*    vecteur de la struct index                        */
  125. /* PROCESS: affiche les fiches triees via le vecteur d'index*/
  126. /* OUTPUT: /            */
  127. /************************************************************/
  128. void affichage_index(int nbre_elem, struct FICHE *pt, struct INDEX *pt2)
  129. {
  130. int i,j;
  131. for(i=0;i<nbre_elem;i++)
  132. {
  133.  j = (pt2+i)->indice;
  134.  //printf("\n------Fiche triee numero %d-----",i+1);
  135.  printf("------Fiche numero %d-----",i+1);
  136.  printf ("\nnom: " );
  137.  puts ((pt+j)->nom);
  138.  printf ("age: %d",(pt+j)->age);
  139.  printf ("\ninfo: " );
  140.  puts ((pt+j)->info);
  141.  printf ("\nindice de tri: %d",j);
  142. }
  143. }
  144. void recherche(int nbre_elem, char cible,struct INDEX *pt2,int *pt_pos)
  145. {
  146. int i,comp;
  147. i = 1;
  148. comp = strcmp((pt2+i)->nom,cible);
  149. while(i < nbre_elem+1 && comp < 0)
  150. {
  151.  i++;
  152. }
  153. if (comp = 0)
  154.  pt_pos = i;
  155. else pt_pos = -1;
  156. }
  157. //Code principal
  158. void main()
  159. {
  160. //declaration des structures et pointeurs  
  161. int choix,position=0,* pt_pos,k;
  162. struct FICHE tab[50], * pt;
  163. struct INDEX tab2[50], * pt2;
  164. int nbre_elem=0;
  165. char cible[20];
  166. pt = &tab[0];
  167. pt2 = &tab2[0];
  168. pt_pos = &position;
  169. do
  170. {
  171.  system("cls" );
  172.  printf("Veuillez faire votre choix parmis le menu suivant: " );
  173.  printf("\n\n    (1) Encodage de fiches" );
  174.  printf("\n   (2) Ajout de fiches" );
  175.  printf("\n   (3) Tri de fiches" );
  176.  printf("\n   (4) Affichage de fiches" );
  177.  printf("\n   (5) Recherche de fiches" );
  178.  printf("\n   (6) Quitter le programme" );
  179.  printf("\n\nChoix (1-6): " );
  180.  scanf ("%d",&choix);
  181.  switch (choix)
  182.  {
  183.  case 1 :system("cls" );
  184.    printf ("Combien de fiches voulez vous encoder? : " ); //encodage
  185.    scanf ("%d", &nbre_elem);
  186.    encodage(nbre_elem,pt);
  187.    indexation(nbre_elem,pt,pt2);
  188.    break;
  189.  case 2 :system("cls" );
  190.    printf ("none" ); //ajout
  191.       break;
  192.  case 3 :system("cls" );
  193.    tri(nbre_elem,pt2); //tri
  194.       break;
  195.  case 4 :system("cls" );
  196.    affichage_index(nbre_elem,pt,pt2);
  197.    getch();
  198.    //affichage(nbre_elem,pt); //affichage
  199.       break;
  200.  case 5 :system("cls" );
  201.    printf ("Veuillez saisir la cible de la recherche: " );
  202.    gets(cible);
  203.    recherche(nbre_elem,cible,pt2,pt_pos); //recherche
  204.       if (position = -1)
  205.     printf("La cible n'a pas ete trouvee" );
  206.    else
  207.    {
  208.     k = (pt2+position)->indice;
  209.     printf ("\nnom: " );
  210.     puts ((pt+k)->nom);
  211.     printf ("age: %d",(pt+k)->age);
  212.     printf ("\ninfo: " );
  213.     puts ((pt+k)->info);
  214.    }
  215.    getch();
  216.    break;
  217.  case 6 :system("cls" );
  218.    printf ("Vous venez de quitter le programme." ); //quitter
  219.       break;
  220.  default://system("cls" );
  221.    printf ("Vous avez effectue un mauvais choix" );
  222.       break;
  223. }
  224. }
  225. while (choix!=6);
  226. //appels des fonctions
  227. }


 
Voici les warnings:
 

Code :
  1. --------------------Configuration: lc41 - Win32 Debug--------------------
  2. Compiling...
  3. lc41.c
  4. C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc41.c(192) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char '
  5. C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc41.c(192) : warning C4024: 'strcmp' : different types for formal and actual parameter 2
  6. C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc41.c(199) : warning C4047: '=' : 'int *' differs in levels of indirection from 'int '
  7. C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc41.c(201) : warning C4047: '=' : 'int *' differs in levels of indirection from 'const int '
  8. C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc41.c(261) : warning C4047: 'function' : 'char ' differs in levels of indirection from 'char [20]'
  9. C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc41.c(261) : warning C4024: 'recherche' : different types for formal and actual parameter 2
  10. C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc41.c(261) : warning C4761: integral size mismatch in argument; conversion supplied
  11. lc41.obj - 0 error(s), 7 warning(s)


 
Merci d'avance :)


Message édité par nolimites le 23-02-2005 à 11:17:06
Reply

Marsh Posté le 23-02-2005 à 09:59:03   

Reply

Marsh Posté le 23-02-2005 à 11:17:36    

voila les numéros de lignes sont à présent corrects :)

Reply

Marsh Posté le 23-02-2005 à 11:23:14    

Bah les messages d'erreurs sont clairs, pourtant...un char est différent d'un const char *, idem pour int et int *, int* et const int...etc.
Tu passes des paramètres à tes fonctions qui ne sont pas du bon type...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 23-02-2005 à 12:01:35    

Ouep par exemple pour strcmp qui coince sur le 1er warning : La syntaxe exacte est :
 
int strcmp( const char *string1, const char *string2 );
 
Toi tu passes en 2ème paramètre un nombre entier ou caractère (char) au lieu d'un pointeur sur une chaine de caractères ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed