cs_natacha86
Messages postés16Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention 9 février 2005
-
7 févr. 2005 à 21:12
cs_natacha86
Messages postés16Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention 9 février 2005
-
8 févr. 2005 à 12:04
quel est le probleme de ma méthode init_tab ? le programme s'arrete aprse etre passé dans cette méthode, il plante, et ne rentre pas dans la méthode de tri_bulle...
j'ai pas mis tout le programme, c'est normal qu'il y ait un grand menu,
/************************ programme principal ****************************/
void main(void)
{
/* déclarations */
int choix=0,cont;
cont=1;
while(cont==1){
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 :
init_tab();
tri_bulle();
break;
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();
printf("Les valeurs avant le tri : "); /* affichage du tableau */
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
}
int tri_bulle()
{
int nb,i,j,v,tab[MAX]; /* 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;
}
printf("\n\nLes valeurs apres le tri :"); /* affichage du tableau */
for(i=0; i<nb;i++)
printf("\n%d ",tab[i]);
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 8 févr. 2005 à 09:13
Tu déclares un tableau de 1000000 int en local dans la fonction c'est à dire sur la pile => elle explose et ton programme plante en sortie de la fonction. On ne déclare jamais de tels tableaux en static, on les alloue dynamiquement avec malloc ou new. Ou alors prend une valeur de MAX un peu plus raisonnable...
errikke -> 'return' est inutile à la fin d'une fonction retournant void.
cs_natacha86
Messages postés16Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention 9 février 2005 8 févr. 2005 à 10:26
c'est le prof qui nous a demandé de faire des test et des grphique par rapport au temps ! c'est pour ca, il faut tester jusqu'a 1000000.
J'suis pas si stupide quand mem
mais si vous voulez poser un post pour m'aider a ce que j'avais demander vous avez le droit ...
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 8 févr. 2005 à 10:39
Si c'est votre prof qui vous a dit de déclarer en local des tableaux de cette taille c'est qu'il a jamais programmé de sa vie (mon post répondait exactement à la question et au problème qui était un stack overflow).
Une autre petite chose ta fonction init_tab initialise un tableau en local donc en sortie de la fonction le contenu est perdu. Il faudrait la passer en global.
voici ce que tu peux faire :
- déclare int* tab en var global
- faire tab = malloc(MAX*sizeof(int)) and init_tab;
- rajouter une fonction free_tab qui va faire free(tab);
=> comme cela toute les fonctions auront accès au tableau qui sera créé dynamiquement.
Vous n’avez pas trouvé la réponse que vous recherchez ?