Encore un pb en c svp.......

cs_natacha86 Messages postés 16 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 9 février 2005 - 5 févr. 2005 à 17:14
cs_natacha86 Messages postés 16 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 9 février 2005 - 7 févr. 2005 à 19:29
j'ai essayer de séparer les fonctions mais ca ne marche pas...

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


#define MAX 1000000

/************************ tri rapide ****************************/



void init_tab(){


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


void affich_tab(int tab[],int taille) {


int i;


printf("\n\nLes valeurs apres le tri :");
for(i=0; i<taille;i++)
printf("\n%d ",tab[i]);
}


// 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];


init_tab();


rapide(tab, 0, nb-1);


affich_tab(tab,nb);
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\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 6 : tri_rapide();
break;


case 7 : break;


}


}

7 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
5 févr. 2005 à 18:05
C'est quoi le problème ? ca aiderait un peu
0
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
5 févr. 2005 à 18:18
moi c'est ton #define MAX 1000000 qui me fais peur. Blague a part tu alloue 4Mo sur la pile dans chaque fontion avec ton int tab[MAX];
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
5 févr. 2005 à 18:22
Alors déja tu fais un rand sans inclure la librairie <time.h>

En suite, tu dis à une fonction, d'aller dans la fonction suivante, mais la fonction suivante est déclarée en dessous.
En Sachant que ton compilateur lit ligne par ligne, c'est un peu normal qu'il refuse.

Donc solution, définit des prototypes pour tes fonctions.
Un prototype est le nom de la fonction, le type, et ses arguments placés à la suite de tes includes.

En gros ça donne ca :

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


#define MAX 1000000


void tri_rapide();
void init_tab();
void affich_tab(int ,int );
int permutation(int , int , int );

Bon j'ose te dire que ton code est crade, mais bon c'est toi qui voit pour sa clarté ;)


void Aurevoir( void ); //Bonne journée
0
cs_natacha86 Messages postés 16 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 9 février 2005
5 févr. 2005 à 18:46
je ne comprend rien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_natacha86 Messages postés 16 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 9 février 2005
5 févr. 2005 à 18:48
il plante au moment ou il rentre dans la fonction rapide, comme si il n'avait pas pris en compte le tableau de la fonction init_tab
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
6 févr. 2005 à 10:58
Bas, met ton tableau tab en variable globale, ca pourrait aider ...
0
cs_natacha86 Messages postés 16 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 9 février 2005
7 févr. 2005 à 19:29
je suis novice, des exemples pourrient m'aider merci...
0