cs_natacha86
Messages postés16Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention 9 février 2005
-
5 févr. 2005 à 14:40
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
7 févr. 2005 à 15:08
bonjour, j'ai un probleme avec mon programme,
il ne veut pas sortir, j'ai fais un menu et apparement ya un bug mais je ne comprend rien.
le code est assez long, je vous conseil si vous voulez m'aider de le copier de regarde ce que ca fait (lancer un tri de 1 à 5 et essayer de sortir avec 7 vous verrez ce que ca fait, le 6 marche je ne sais pas pkoi non plus il est comme les autres)
merci d'avance...
void tri_bulle()
{
int nb,i,j,v,tab[MAX]; /* déclarations */
srand(time(NULL)); /* Initialisation du générateur aléatoire avec la fontion time */
printf("\n\n Nombre de valeurs a trier (du tableau) : ");
scanf("%d", &nb); /* Demande le nombre d'éléments à trier */
printf("\n");
for(i=0;i<nb;i++)
tab[i]=rand();
printf("Les valeurs avant le tri : ");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
for (i=0; i<nb; i++)
for (j=nb-1; j>i; j--)
if (tab[j-1]>tab[j])
{
v=tab[j-1];
tab[j-1]=tab[j];
tab[j]=v;
}
printf("\n\nLes valeurs apres le tri :");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
system("PAUSE");
main();
}
/****************************tri par insertion ****************************/
void tri_ins()
{
int nb,i,j,v,tab[MAX]; /* déclarations */
srand(time(NULL)); /* Initialisation du générateur aléatoire avec la fontion time */
printf("\n\n Nombre de valeurs a trier (du tableau) : ");
scanf("%d", &nb); /* Demande le nombre d'éléments à trier */
printf("\n");
for(i=0;i<nb;i++)
tab[i]=rand();
printf("Les valeurs avant le tri : ");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
for (i=0; i<nb; i++)
{
v=tab[i];
j=i;
while (tab[j-1]>v)
{
tab[j]=tab[j-1];
j--;
}
tab[j]=v;
}
printf("\n\nLes valeurs apres le tri :");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
system("PAUSE");
main();
}
/****************************tri par extraction ****************************/
void tri_ext()
{
int nb,i,j,v,min,tab[MAX]; /* déclarations */
srand(time(NULL)); /* Initialisation du générateur aléatoire avec la fontion time */
printf("\n\n Nombre de valeurs a trier (du tableau) : ");
scanf("%d", &nb); /* Demande le nombre d'éléments à trier */
printf("\n");
for(i=0;i<nb;i++)
tab[i]=rand();
printf("Les valeurs avant le tri : ");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
for (i=0; i<nb; i++)
{
min=i;
for(j=i;j<nb;j++)
if (tab[j]<tab[min])
min=j;
v=tab[min];
tab[min]=tab[i];
tab[i]=v;
}
printf("\n\nLes valeurs apres le tri :");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
system("PAUSE");
main();
}
/****************************tri shell ****************************/
void tri_shell ()
{
int i,j,k,l,p,n,nb,tab[MAX];
int b;
srand(time(NULL)); /* Initialisation du générateur aléatoire avec la fontion time */
printf("\n\n Nombre de valeurs a trier (du tableau) : ");
scanf("%d", &nb); /* Demande le nombre d'éléments à trier */
printf("\n");
for(i=0;i<nb;i++)
tab[i]=rand();
n=nb;
printf("Les valeurs avant le tri : ");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
for ( k=1 ; k<=n/9; k=3*k+1);
for ( ; k>0 ; k /=3)
for ( i=k ; i<n ; i++ )
{
l = tab[i] ;
j = i ;
while (j>k && tab[j-k]>l)
{
tab[j] = tab[j-k] ;
j -= k ;
}
tab[j] = l ;
}
printf("\n\nLes valeurs apres le tri :");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
system("PAUSE");
main();
}
void interclasse(int tab[], int inf, int mid, int sup)
{
int tab_aux[sup]; /* Tableau auxiliaire */
int i=inf,j=mid+1,k=inf;
/* Fusion dans le tableau auxiliaire */
while(i<=mid && j<=sup)
{
if (tab[i]<tab[j])
tab_aux[k++]=tab[i++];
else
tab_aux[k++]=tab[j++];
}
if (i>mid)
while(j<=sup)
tab_aux[k++]=tab[j++];
else
while(i<=mid)
tab_aux[k++]=tab[i++];
/* Recopie du tableau auxiliaire dans tab */
for(i=inf;i<=sup;i++)
tab[i]=tab_aux[i];
}
void fusion(int T[], int a, int b) {
int i,m;
if (a < b) {
m = (a+b)/2;
fusion(T, a, m); // m tjs < b
fusion(T, m+1, b); // m+1 tjs > a donc pas de bouclage possible
interclasse(T, a, m, b);
}
}
void tri_fusion() {
int i,nb,tab[MAX];
srand(time(NULL)); /* Initialisation du générateur aléatoire avec la fontion time */
printf("\n\n Nombre de valeurs a trier (du tableau) : ");
scanf("%d", &nb); /* Demande le nombre d'éléments à trier */
printf("\n");
for(i=0;i<nb;i++)
tab[i]=rand();
printf("Les valeurs avant le tri : ");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
fusion(tab, 0, nb-1);
printf("\n\nLes valeurs apres le tri :");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
system("PAUSE");
main();
}
/************************ tri rapide ****************************/
// réordonne le tableau et rend l'indice de séparation
int permutation(int T[], int a, int b) { int i, j, pivot, bi a, bs b, r, TI[b];
for(i=a;i <= b;i++) {
T[i] = TI[i];
if (T[i] == pivot) { r = i; }
}
return r;
}
void rapide(int T[], int a, int b) {
int separe;
if (a < b) {
separe = permutation(T, a, b);
rapide(T, a, separe-1);
rapide(T, separe+1, b);
}
}
void tri_rapide() {
int i,nb,tab[MAX];
srand(time(NULL)); /* Initialisation du générateur aléatoire avec la fontion time */
printf("\n\n Nombre de valeurs a trier (du tableau) : ");
scanf("%d", &nb); /* Demande le nombre d'éléments à trier */
printf("\n");
for(i=0;i<nb;i++)
tab[i]=rand();
printf("Les valeurs avant le tri : ");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
rapide(tab, 0, nb-1);
printf("\n\nLes valeurs apres le tri :");
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
system("PAUSE");
main();
}
/************************ programme principal ****************************/
int main()
{
/* déclarations */
int choix=0;
printf("\n\n\t\t\t ****************\n");
printf("\t\t\t *MENU PRINCIPAL*\n");
printf("\t\t\t ****************\n\n\n\n");
printf("\t TAPEZ :\n\n\n\n");
printf("\t\t1\t Pour :\t Lancer le prog de tri a bulle\n\n");
printf("\t\t2\t Pour :\t Lancer le prog de tri par insertion\n\n");
printf("\t\t3\t Pour :\t Lancer le prog de tri par ext\n\n");
printf("\t\t4\t Pour :\t Lancer le prog de tri shell\n\n");
printf("\t\t5\t Pour :\t Lancer le prog de tri fusion\n\n");
printf("\t\t6\t Pour :\t Lancer le prog de tri rapide\n\n");
printf("\t\t7\t Pour :\t Quitter le programme\n\n\n");
printf("\t CHOIX : ");
scanf("%d",&choix);
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 7 févr. 2005 à 15:08
Et ca t'évitera d'appeler main à la fin de chaque fonction car c'est pas terrible comme méthode....
Parce en fait quand tu fait 7, tu sort bien du main, mais comme il est appelé récursivement, et bah sortir du main sort de la dernière fonction qui l'a appelé, puis continu dans le main précédent à la suite du switch...
en gros si au premier choix tu tape 1 et 7 au 2ème, il va s'exécuter :
- entrée du prog -> main- choix 1> tri_bulle();
- fin de tri_bulle() => tu retourne dans main.
- 2ème main imbriqué- choix 7> tu sort bien du switch et du main mais tu ressort à la fin de tri_bulle.
- à la fin de tri_bulle, tu retombe dans le switch du premier main mais comme il n'y a pas de break, tu continue ce qu'il y a après