Trier un tableau de manière aléatoire [Résolu]

Signaler
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008
-
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
-
Bonjour, je suis débutant en c et j'aimerais savoir comment est-il possible de trier un tableau de manière aléatoire ? je m'explique :
j'ai un tableau qui s'appelle tab et qui contient tous les nombres entiers de 1 a 50 inclus

j'aimerais que ce tableau soit 'mélangé' mais je ne sais pas comment faire :(

Merci de m'aider

nc

10 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
Refais direct son remplissage, tu iras aussi vite.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008

daccord, mais comment faire pour le remplir avec les nombres dans le désordre (il faut que les nombres n'apparaissent qu'une seule fois )
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
Je l'ai mis sur le forum il n'y a pas si longtemps, fouille et tu trouveras.
C'est très simple, srand() 1 fois au début et rand() ensuite.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
Regarde, ça devrait aller:

srand(GetTickCount()); // 1 FOIS AU DEBUT DU PROG


FONCTION DE REMPLISSAGE:
int n, i, pos;
pos = 0;
do {
nextN:
n = (rand() % 50) + 1; // ENTRE 1 et 50 INCLUS for(i 0; i < pos; i++) if(n tab[i]) goto nextN;
tab[pos++] = n;
} while(pos < 50);

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
euh y'a pas un blème tab[pos++]

il va remplir en premier tab[1] et ça va planter non ?
if(!Meilleur("Joky")) return ERREUR;<
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
tab[pos++] = n;
se décompose en:
1) tab[pos] = n; // commence bien à 0
2) pos++;

tab[++pos] = n;
commencerait à 1, ne pas confondre PRE et POST incrémentation.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008

merci, deux petites choses : tout d'abord : dans quelle librairie et la fontion GetTickCount() ?

est ce que vous pourriez m'expliquer chaque ligne de code, car étant un grand débutant en c j'ai du mal a comprendre le script :)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
28
GetTickCount() appartient au monde Windows, tu peux utiliser time(NULL) si autre plateforme.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008

mon compilateur ne veut pas compiler, il me dit [Linker error] undefined reference to `GetTickCount'
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ahhhhh !

j'pensais que c'était pareil lol le ++pos et le pos++



et pour ton GetTickCount il faut inclure <windows.h>
if(!Meilleur("Joky")) return ERREUR;<