Help une fonction qui a besoin de vous

Signaler
Messages postés
16
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
9 février 2005
-
Messages postés
16
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
9 février 2005
-
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...

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>


#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]);


system("PAUSE");
}


/****************************tri bulle*********************************/


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; }
}



/****************************tri par insertion ****************************/


int tri_ins(int tab[])
{
int nb,i,j,v; /* Déclarations */


for (i=0; i<nb; i++){ /* tri */


v=tab[i];
j=i;
while (tab[j-1]>v) {
tab[j]=tab[j-1];
j--;
}
tab[j]=v;
}
}
/****************************tri par extraction ****************************/


int tri_ext(int tab[])
{
int nb,i,j,v,min; /* déclarations */


for (i=0; i<nb; i++){ /* tri */
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;
}
}


/****************************tri shell ****************************/
int tri_shell(int tab[])
{
int i,b,j,k,l,h,v,n,nb; /* déclarations */
n=nb;


for ( k=1 ; k<=n/9; k=3*k+1); /* tri */
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 ;
}
}

/****************************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);}
}


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 */



pivot = T[a]; /* choix du pivot*/

for(i=a;i <= b;i++) {
if (T[i] < pivot) {
TI[bi] = T[i];
bi++; }
if (T[i] > pivot) {
TI[bs] = T[i];
bs--; }
}


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 */
}



/* FIN*/

10 réponses

Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Non de dieu !
Quel fouilli :) lol
Ca te fait pas peur ???

Rien qu'un ptit exemple


/****************************tri bulle*********************************/


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 )

Fin bref, VRAIMENT BONNE CHANCE !


void Aurevoir( void ); //Bonne journée
Messages postés
16
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
9 février 2005

au lieu d'enfoncer les gens c'est p'etre mieux de les aider !!! je dois rendre ca demain :'(
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Je ne t'enfonce pas. J'te conseille de tout reprendre à 0. Si ça c'est pas aidé !
Donc attend un peu, j'vais regarder ce que tu veux faire en gros :)


void Aurevoir( void ); //Bonne journée
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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
Messages postés
16
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
9 février 2005

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

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>


#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]);


system("PAUSE");
}





/****************************tri bulle*********************************/


int tri_bulle(int tab[])
{
int der,i,j,permut; /* Déclarations */


for (i=0; i<der; i++) /* tri */
for (j=der-1; j>i; j--) /* on compare un à un */
if (tab[j-1] > tab[j]) {


permut = tab[j-1]; /* permutation */
tab[j-1] = tab[j];
tab[j] = permut;
}
}



/****************************tri par insertion ****************************/


int tri_ins(int tab[])
{
int der,i,j,temp; /* Déclarations */
/* tri */
for (i=0; i<der; i++){


temp=tab[i];
j=i;
while (tab[j-1] > temp) { /*on decale les éléments */
tab[j] = tab[j-1];
j--;
}
tab[j]=temp;
}
}



/****************************tri par extraction ****************************/


int tri_ext(int tab[])
{
int der,i,j,permut,temp; /* déclarations */


for (i=0; i<der; i++){ /* tri */
temp=i;
for(j=i+1;j<der;j++)
if (tab[j]<tab[temp]) /* on compare les élément du tableau */
temp = j;


permut = tab[temp]; /* permutation */
tab[temp] = tab[i];
tab[i] = permut;
}
}





/****************************tri shell **********************************/


int tri_shell(int tab[])
{
int i,j,pas,temp,n,nb; /* déclarations */
n=nb;


for ( pas=1 ; pas<=n/9; pas=3*pas+1); /* tri */
for ( ; pas>0 ; pas /=3)
for ( i=pas ; i<n ; i++ ){
temp = tab[i] ;
j = i ;
while (j>pas && tab[j-pas]>temp) {
tab[j] = tab[j-pas] ;
j -= pas ;
}
tab[j] = temp ;
}
}




/****************************tri fusion ****************************/


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 */



pivot = T[g]; /* choix du pivot*/

for(i=g;i <= d;i++) {
if (T[i] < pivot) {
TI[bi] = T[i];
bi++; }
if (T[i] > pivot) {
TI[bs] = T[i];
bs--; }
}


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 */
}



/* FIN*/
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
#include <stdlib.h>
#include <stdio.h>
#include <time.h>


/*
Prototypes
*/
void InitTab( int );
void AfficheTab();
void Tri_Bull();
void Tri_Ins();
void Tri_Ext();
void Tri_Shell();



/*
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 ;)
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Et ya aucun commentaire :)
Tu verras comment ça aide :)
Biensur le mien est tout aussi crapet, mais bon il marche !


void Aurevoir( void ); //Bonne journée
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Un vrai sketch à vous 2, vivement le prochain épisode.

ciao...
BruNews, MVP VC++
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Lol
Rire ça entretient le corp :)
Longue vie à tous :p

Au plaisir de vous faire rire :s
Même si ma carriere en dépend :)
Et quelle carriere !!!


void Aurevoir( void ); //Bonne journée
Messages postés
16
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
9 février 2005

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