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...
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define MAX 1000000
/****************************tri bulle*********************************/
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();
}
/****************************tri fusion ****************************/
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];
// choix du pivot
pivot = T[a];
for(i=a;i <= b;i++) {
if (T[i] < pivot) { TI[bi] = T[i]; bi++; }
if (T[i] > pivot) { TI[bs] = T[i]; bs--; }
}
/* On place le ou les pivots */
for(i=bi;i<=bs;i++) { TI[i] = pivot; }
/* recopie de TI */
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);
switch(choix)
{
case 1 : tri_bulle();
case 2 : tri_ins();
case 3 : tri_ext();
case 4 : tri_shell();
case 5 : tri_fusion();
case 6 : tri_rapide();
case 7 : break;
}
}