Erreur - Appel de fonction (suite)

Mendoza -  
 Mendoza -
Bon, je reprend la suite ici, étant donné que le 1er topic à été mis en résolu.

Donc :

J'ai un souci avec un autre code dans lequel j'essaie de faire la même chose mais avec un fichier généré avec des nombres aléatoires.


int main(int argc, char **argv)
{
clock_t start;
float temps;
int *tabBulle=malloc(MAX*sizeof(int));
int *tabInsert=malloc(MAX*sizeof(int));
int *tabRapide=malloc(MAX*sizeof(int));
srand(time(NULL));
FILE* fichier1=NULL;
FILE* fichier2=NULL;
FILE* fichier3=NULL;
FILE* fichier4=NULL;
fichier1=fopen("casMoyen.txt", "w+");
fichier2=fopen("triBulle.txt", "w+");
fichier3=fopen("triInsertion.txt", "w+");
fichier4=fopen("triRapide.txt", "w+");
if(fichier1 != NULL && fichier2 != NULL && fichier3 != NULL && fichier4 != NULL)
{
printf("Succesfull\n");
int i, nbrAleatoire;
for (i=MIN;i<MAX;i++)
{
nbrAleatoire = rand() % MAX;
fprintf(fichier1, "%d ", nbrAleatoire);
tabBulle[i]=nbrAleatoire;
tabInsert[i]=nbrAleatoire;
tabRapide[i]=nbrAleatoire;
}
start=clock();
triBulle(tabBulle, MAX);
temps=(float)(clock()-start)/(float)CLOCKS_PER_SEC;
printf("\nTri a bulle : %g seconde(s)\n", temps);

start=clock();
triInsertion(tabInsert, MAX);
temps=(float)(clock()-start)/(float)CLOCKS_PER_SEC;
printf("\nTri a insertion : %g seconde(s)\n", temps);

start=clock();
triRapide(tabRapide, MIN, MAX-1);
temps=(float)(clock()-start)/(float)CLOCKS_PER_SEC;
printf("\nTri rapide : %g seconde(s)\n", temps);

int j;
for (j=MIN;j<MAX;j++)
{
fprintf(fichier2, "%d ", tabBulle[j]);
fprintf(fichier3, "%d ", tabInsert[j]);
fprintf(fichier4, "%d ", tabRapide[j]);
}

fclose(fichier1);
fclose(fichier2);
fclose(fichier3);
fclose(fichier4);
}
else
{
printf("Failed\n");
}

free(tabBulle);
free(tabInsert);
free(tabRapide);

return 0;
}

La création du fichier casMoyen avec ses nombres aléatoires a l'air de fonctionner mais dès que j'essaie de trié le fichier (juste après le for), ça tourne en boucle (c'est l'impression que ça donne étant donné que je n'ai aucun retour du programme pendant un long moment avant que je ne le quitte).
A voir également:

2 réponses

Mendoza
 
Problème résolu, il fallait simplement attendre, étant donné que les tris à bulles et à insertion sont très très lent au fur et à mesure qu'on monte en quantité de valeur à gérer.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Tu as dis toi-même qu'il s'agissait d'un autre code. Donc c'est normal de re-créer un autre post ;-).

Ravis que tu es résolu ton problème tout seul.
Néanmoins j'attire ton attention sur un point :
nbrAleatoire = rand() % MAX;
Avec ça, tu auras un nombre entre 0 et MAX. C'est ce que tu souhaites ? Ne souhaites-tu pas plutôt un nombre entre MIN et MAX ?

Sinon, tu as toujours le problème sur la gestion d'ouverture des fichiers. Mais bon, si tu n'as pas corrigé depuis la dernière fois, c'est que tu as tes raisons ;-).

Cdlt,
0
Mendoza
 
C'était seulement le main qui changeait, je pouvais continuer sur le même post, non ?

Pour le nombre aléatoire, oui, c'est entre MIN et MAX, mais étant donné que MIN vaudra toujours 0, le code reste juste, j'ai donc garder ça comme ça. Mais si jamais je voudrai changer la valeur de MIN, que devrais-je rajouter à la ligne :
nbrAleatoire = rand() % MAX;
?

Problème sur la gestion d'ouverture des fichiers ? Où ça ? Tu parles de cette ligne :
if(fichier != NULL && fichier1 != NULL && fichier2 != NULL)
?

Avec l'histoire du fclose ? Ça pose problème si le fclose n'est pas exécuter ? Je peux déplacer les fclose en fin de code en même temps que les free ?
0