Je dois codé un programe en C pour créer un tableau d'identifiants alphanumériques. Il faut rentrer les identifiants de facon dynamique et en utilisant le tri par insertion avec la recherche dichotomique.

J'ai du mal avec la fonction Position Insertion si quelqu'un pouvait m'aider...je suis super novice en C.

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
#include <stdio.h>
#include <stdlib.h>
# define N 10
 
/* Déclaration des variables globales*/
char saisie[20+1]; /*Tableau de char pour la saisie*/
char* table[N][20]; /*Tableau des identifiants*/
 
void Presentation()
{
   /* Présentation du programme */
   printf("*******************************************\n");
   printf("* Tableau d'identifiants alpha-numeriques *\n");
   printf("*******************************************\n\n");
   /* Présentation du nb max d'identifiants */
   printf("Le nombre maximum d'identifiants est de %d\n\n", N);  
}
 
/*Saisie dans une variable de nom buf*/
void SaisieBuf()
{
   char buf[20+1];
   /* Demande de saisie de l'identifiant */
   printf("Veuillez entrer un identifiant :\n");
   /* Lecture de l'identifiant */
   scanf("%s",&buf);
   strcpy(saisie,buf);
   //printf("\n%s\n",saisie);
}
 
int TestUtilisateur()
{
   char rep[3];
   printf("Souhaitez-vous continuer la saisie ? oui / non \n");
   scanf("%s",&rep);
   if(strcmp(rep,"oui")==0) return 1;
   else {return 0;}
}
 
int NonDepassement(int TailleTab)
{
   if (TailleTab<N) return 1;
   else return 0;
}
 
void Insertion(int indice, int TailleTab)
{
   int j;
   for(j=indice;j<TailleTab;j++)
   {
      printf("%s \n",table[j]);        
      *table[j+1]=(char *)malloc(sizeof(table[j]));
      strcpy(*table[j+1],*table[j]);
   }
   *table[indice]=(char *)malloc(strlen(saisie));
   strcpy(*table[indice],saisie);
   free(saisie);
}
 
int PositionInsertion(char val[], int TailleTab)
{
   int gauche,droite,milieu;
   gauche=0;
   droite=TailleTab;
   while(gauche<droite)
   {
      milieu = (gauche+droite)/2;
      if(strcmp(val,table[milieu])<0) droite=milieu;
      else gauche=milieu;
   }
   return gauche;
}
 
void Affichage()
{
   int z;
   for(z=0;z<N;z++){printf("%s\n",*table[z]);}  
}
 
/*
void Doublon()
{}
*/
 
int main(int argc, char *argv[])
{
   int i=0;
   int indice;
   Presentation();
   while(NonDepassement(i)==1)
   {
      SaisieBuf();
      //printf("\n%s\n",saisie);
      indice=PositionInsertion(saisie,i);
      printf("\n%d\n",indice);
      i++;
      Insertion(indice,i);
      if(i>1)
      {
         if(TestUtilisateur()==0)break;
      }
   }
   Affichage();
   system("PAUSE");	
   return 0;
}