Trier un tableau de manière aléatoire

Résolu
nisaloncaje
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008
- 7 janv. 2006 à 22:21
cs_Joky
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
- 8 janv. 2006 à 15:33
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

BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
7 janv. 2006 à 22:35
Refais direct son remplissage, tu iras aussi vite.

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

7 janv. 2006 à 22:37
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 )
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
7 janv. 2006 à 23:06
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++
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
7 janv. 2006 à 23:21
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Joky
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
8 janv. 2006 à 00:00
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;<
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
8 janv. 2006 à 00:49
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++
0
nisaloncaje
Messages postés
154
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
28 septembre 2008

8 janv. 2006 à 10:50
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 :)
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
19
8 janv. 2006 à 11:04
GetTickCount() appartient au monde Windows, tu peux utiliser time(NULL) si autre plateforme.

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

8 janv. 2006 à 11:06
mon compilateur ne veut pas compiler, il me dit [Linker error] undefined reference to `GetTickCount'
0
cs_Joky
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
8 janv. 2006 à 15:33
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;<
0