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

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 à 21:12
cs_natacha86 Messages postés 16 Date d'inscription samedi 5 février 2005 Statut Membre Derniè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,

#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

errikke Messages postés 59 Date d'inscription samedi 11 janvier 2003 Statut Membre Dernière intervention 15 mai 2006
7 févr. 2005 à 22:23
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;
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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.
0
cs_natacha86 Messages postés 16 Date d'inscription samedi 5 février 2005 Statut Membre Derniè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 ...
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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.
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
8 févr. 2005 à 12:04
je suis une novice, tu peux m'expliquer en faisant des copier collé dans mon prog stp ?
0
Rejoignez-nous