cs_natacha86
Messages postés16Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention 9 février 2005
-
8 févr. 2005 à 13:28
cs_natacha86
Messages postés16Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention 9 février 2005
-
9 févr. 2005 à 00:31
Re bonjour a tout le monde,
voila j'ai mis tout le prog si vous voulez tester, en fait le pb viens de la fonctino tri_shell(), je ne sais pas pkoi elle plante!!! :'( sinon quand elle fonctionne elle ne trie pas bien mais bon ca je m'arrangerai, depuis que j'ai mis une fonction init et affich, cette fonction tri_shell ne fonctionne plus alors que les autres oui, VA SAVOIR !!! lol
merci si vous avez le courage de m'aider...
#define MAX 1000000
#define taille
int tab[taille];
/************************ programme principal ****************************/
int main()
{
/* déclarations */
int choix=0,cont;
cont=1;
while(cont==1){
/* affichage du menu */
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);
/* menu */
switch(choix)
{
case 1 :
init(tab);
tri_bulle(tab);
affich(tab);
break;
case 2 :
init(tab);
tri_ins(tab);
affich(tab);
break;
case 3 :
init(tab);
tri_ext(tab);
affich(tab);
break;
case 4 :
init(tab);
tri_shell(tab);
affich(tab);
break;
case 5 :
init(tab);
tri_fusion(tab);
affich(tab);
break;
case 6 :
init(tab);
tri_rapide(tab);
affich(tab);
break;
default : cont=0; /* sortie du programme*/
}
}
}
/****************************initialisation du tableau******************/
int init(int tab[]) {
int nb,i; /* 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++) /* Remplissage du tableau aléatoirement */
tab[i]=rand()%1000;
printf("Les valeurs avant le tri : "); /* affichage du tableau */
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
}
/****************************affichage du tableau trié******************/
int affich(int tab[]) {
int nb,i; /* déclarations */
printf("\n\nLes valeurs apres le tri :"); /* affichage du tableau */
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
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);}
}
int tri_fusion(int tab[]) {
int nb;
fusion(tab, 0, nb-1); /* apel de la fonction fusion */
}
/************************ 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]; /* déclarations */
for(i=bi;i<=bs;i++) /* On place le ou les pivots */
TI[i] = pivot;
for(i=a;i <= b;i++) { /* recopie de TI */
T[i] = TI[i];
if (T[i] == pivot)
r = i;
}
return r;
}
void rapide(int T[], int a, int b) {
int separe; /* déclarations */
if (a < b) {
separe = permutation(T, a, b); /* apel de la fonction permutation */
rapide(T, a, separe-1); /* apel de la fonction rapide */
rapide(T, separe+1, b); }
}
int tri_rapide(int tab[]) {
int nb; /* déclarations */
rapide(tab, 0, nb-1); /* appel de la fonction rapide */
}
int tri_bulle(int tab[])
{
int nb,i,j,v; /* Déclarations */
for (i=0; i<nb; i++) /* tri */
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; }
}
le programme est censé deviné c'est quoi les valeur nb, i, j et v ???
J'pense que tout le prog est à revoir malheureusement.
Y'a pas que la fonction tri shell qui ne va pas
ensuite, taille n'est pas défini, tu veux accéder à des fonctions que tu déclares apres. ( 2fois que je te le dis ça )
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 8 févr. 2005 à 15:33
Juste une question.
J'essai de refaire ton prog :)
Mais je ne comprend rien ;)
C'est quoi le but ???
Disons la fonction Tri_Bull ???
Elle sert à quoi ???
void Aurevoir( void ); //Bonne journée
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_natacha86
Messages postés16Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention 9 février 2005 8 févr. 2005 à 15:41
ca sert a rien d'autre qu'a trier,
c'set pour comparer toutes les sortes de tris, et calculer le temps, faire des graphiques..
j'ai essayer de mettre des commentaires, et de le rendre plus lisibles, je c pas si je peux faire plus ...
tout les tris fonctionne mem avec taille, j'ai mis comme le prof a dis, c'est bizzar, ya que shell qui tri pas bien !
sinon laisse tomber, t'facon je crois que j'v abandonné l'informatique ca me saoule, g deja mon bts c pas mal ;-) lol
/************************ programme principal ****************************/
int main()
{
/* déclarations */
int choix=0,cont;
cont=1;
while(cont==1){
/* affichage du menu */
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);
/* menu */
switch(choix)
{
case 1 :
init(tab);
tri_bulle(tab);
affich(tab);
break;
case 2 :
init(tab);
tri_ins(tab);
affich(tab);
break;
case 3 :
init(tab);
tri_ext(tab);
affich(tab);
break;
case 4 :
init(tab);
tri_shell(tab);
affich(tab);
break;
case 5 :
init(tab);
tri_fusion(tab);
affich(tab);
break;
case 6 :
init(tab);
tri_rapide(tab);
affich(tab);
break;
default : cont=0; /* sortie du programme*/
}
}
}
/****************************initialisation du tableau******************/
int init(int tab[]) {
int nb,i; /* 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++) /* Remplissage du tableau aléatoirement */
tab[i]=rand()%1000;
printf("Les valeurs avant le tri : "); /* affichage du tableau */
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
}
/****************************affichage du tableau trié******************/
int affich(int tab[]) {
int nb,i; /* déclarations */
printf("\n\nLes valeurs apres le tri :"); /* affichage du tableau */
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
void interclasse(int tab[], int g, int mid, int d)
{
int tab_aux[d]; /* Tableau auxiliaire */
int i=g, j=mid+1 , ga=g;
/* Fusion dans le tableau auxiliaire */
while(i<=mid && j<=d)
if (tab[i]<tab[j])
tab_aux[ga++]=tab[i++];
else
tab_aux[ga++]=tab[j++];
if (i>mid)
while(j<=d)
tab_aux[ga++]=tab[j++];
else
while(i<=mid)
tab_aux[ga++]=tab[i++];
/* Recopie du tableau auxiliaire dans tab */
for(i=g;i<=d;i++)
tab[i]=tab_aux[i];
}
void fusion(int T[], int g, int d) {
int i,m;
if (g < d) {
m = (g+d)/2;
fusion(T, g, m); /* m tjs < b */
fusion(T, m+1, d); /* m+1 tjs > a donc pas de bouclage possible */
interclasse(T, g, m, d);}
}
int tri_fusion(int tab[]) {
int nb;
fusion(tab, 0, nb-1); /* appel de la fonction fusion */
}
/************************ tri rapide ****************************/
/* réordonne le tableau et rend l'indice de séparation */
int permutation(int T[], int g, int d) {
int i, j, pivot, bi g, bs d, r, TI[d]; /* déclarations */
for(i=bi;i<=bs;i++) /* On place le ou les pivots */
TI[i] = pivot;
for(i=g;i <= d;i++) { /* recopie de TI */
T[i] = TI[i];
if (T[i] == pivot)
r = i;
}
return r;
}
void rapide(int T[], int g, int d) {
int separe; /* déclarations */
if (g < d) {
separe = permutation(T, g, d); /* apel de la fonction permutation */
rapide(T, g, separe-1); /* apel de la fonction rapide */
rapide(T, separe+1, d); }
}
int tri_rapide(int tab[]) {
int nb; /* déclarations */
rapide(tab, 0, nb-1); /* appel de la fonction rapide */
}
/*
Variables Globales
*/
int Tab[256];
int EspaceOccupe;
int main()
{
menu:
system("cls");
int choix;
int NbrRempli;
printf("\n\n\t\t\t ****************\n");
printf("\t\t\t *MENU PRINCIPAL*\n");
printf("\t\t\t ****************\n\n\n\n");
printf("1: Lancer le prog de tri a bulle\n");
printf("2: Lancer le prog de tri par insertion\n");
printf("3: Lancer le prog de tri par ext\n");
printf("4: Lancer le prog de tri shell\n");
printf("5: Lancer le prog de tri fusion\n");
printf("6: Lancer le prog de tri rapide\n");
printf("7: Quitter le programme\n\n\n");
printf("Choix : ");
scanf("%i",&choix);
printf("Nombre de case à remplir :");
scanf("%i",&NbrRempli);
InitTab(NbrRempli);
switch(choix)
{
case 1:
AfficheTab();
Tri_Bull();
system("pause");
goto menu;
break;
case 2:
AfficheTab();
Tri_Ins();
system("pause");
goto menu;
break;
case 3:
AfficheTab();
Tri_Ext();
system("pause");
goto menu;
break;
case 4:
AfficheTab();
Tri_Shell();
system("pause");
goto menu;
break;
case 5:
printf("\nTri fusion\n");
system("pause");
goto menu;
break;
case 6:
printf("\nTri rapide\n");
system("pause");
goto menu;
break;
case 7:
goto quitter;
break;
default:
goto menu;
break;
}
quitter:
printf("\nMerci...\n");
system("Pause");
return 0;
}
void InitTab(int Nbr)
{
EspaceOccupe = Nbr;
srand(time(NULL));
int i=0;
while(i<Nbr)
{
Tab[i] = rand()%1000;
i++;
}
}
void AfficheTab()
{
int i=0;
while(i<EspaceOccupe)
{
printf("Tab[%i] : \t%i\n", i, Tab[i]);
i++;
}
}
void Tri_Bull()
{
int i,j,v; /* Déclarations */
for (i=0; i<EspaceOccupe; i++) /* tri */
for (j=EspaceOccupe-1; j>i; j--)
if (Tab[j-1]>Tab[j])
{
v=Tab[j-1];
Tab[j-1]=Tab[j];
Tab[j]=v;
}
printf("\nApres le tri : \n");
AfficheTab();
}
void Tri_Ins()
{
int i,j,v;
for (i=0; i<EspaceOccupe; i++)
{
v=Tab[i];
j=i;
while (Tab[j-1]>v)
{
Tab[j]=Tab[j-1];
j--;
}
Tab[j]=v;
}
printf("\nApres le tri : \n");
AfficheTab();
}
void Tri_Ext()
{
int i,j,v,min;
for (i=0; i<EspaceOccupe; i++)
{
min=i;
for(j=i;j<EspaceOccupe;j++)
if (Tab[j]<Tab[min])
min=j;
v=Tab[min];
Tab[min]=Tab[i];
Tab[i]=v;
}
printf("\nApres le tri : \n");
AfficheTab();
}
void Tri_Shell()
{
int i,b,j,k,l,h,v,n;
n=EspaceOccupe;
for ( k=0 ; 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("\nApres le tri : \n");
AfficheTab();
}
J'ai pas fait les autres fonctions de tri car ça devenait en effet incompréhensible ;)
cs_natacha86
Messages postés16Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention 9 février 2005 9 févr. 2005 à 00:31
merci pour ton aide, je n'ai pas pu venir plus tot, je travaillais :-)
bon j'ai essayé de faire de mon mieux, avec ton aide heureusement,
a bientot !!
chao