Aide par rapport a l'appel d'une méthode

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
-
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,

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


#define MAX 1000000



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


case 2 : tri_ins();
break;


case 3 : tri_ext();
break;


case 4 : tri_shell();
break;


case 5 : tri_fusion();
break;


case 6 : tri_rapide();
break;


default : cont=0; /* sortie du programme*/
}
}
}


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


void init_tab() {

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


system("PAUSE");
}

5 réponses

Messages postés
59
Date d'inscription
samedi 11 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2006

Il n'y a pas de retour a la fin de chaque methode. Pour une fonction renvoyant un
type void, il faut terminer par : return;
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
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.
Messages postés
16
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
9 février 2005

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 ...
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
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.
Messages postés
16
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
9 février 2005

je suis une novice, tu peux m'expliquer en faisant des copier collé dans mon prog stp ?