Generation aleatoire de nombre non repetés

Résolu/Fermé
SuPr3M
Messages postés
22
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
5 mai 2010
- 29 déc. 2009 à 17:56
SuPr3M
Messages postés
22
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
5 mai 2010
- 7 janv. 2010 à 23:28
Bonjour,
Je voudrais donc generer un tableau de 32 nombres sans qu'aucun de ses nombres se repete , je voudrais aussi savoir si la fonction rand pourrai recevoir une parametre permettant cela, Merci pour votre aide.

7 réponses

fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 804
29 déc. 2009 à 19:06
Non pas comme ça, car là tu récupères pas l'indice dans une case mémoire.
Tu dois te baser sur l'échange de deux cases d'un tableau.

Je t'ai fait un petit code :

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define MAX 32

void init(int *tab, const int n) {
    int i;
    for(i=0;i<n;i++)
        tab[i]=i+1;
}

void affich(const int *const tab, const int n) {
    int i;
    printf("T:");
    fflush(stdout);

    for(i=0;i<n;i++) {
        printf(" %d",tab[i]);
        fflush(stdout);
    }

    putchar('\n');
}

void mix(int *tab, const int n) {
    int i;
    for(i=0;i<n/2;i++) {
        int i=(int)((double)rand()/RAND_MAX*n);
        int j=(int)((double)rand()/RAND_MAX*n);
        int tmp=tab[i];
        tab[i]=tab[j];
        tab[j]=tmp;
    }
}

int main(void) {
    int tab[MAX];
    
    srand(time(NULL));
    init(tab,MAX);
    affich(tab,MAX);
    mix(tab,MAX);
    affich(tab,MAX);

    getchar();
    return 0;
}

Si tu comprends pas des choses, n'hésite pas.
1
fiddy
Messages postés
11067
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 804
29 déc. 2009 à 18:05
Salut,
Si tu souhaites utiliser des nombres de 0 à 31 (ou 1 à 32), tu initialises le tableau bêtement. Et tu le mélanges. Pour le mélanger, tu tires deux nombres pseudo-aléatoirement avec rand (et l'utilisation de srand avec son seed), et tu échanges les deux cases correspondantes aux indices.
0
michel_m
Messages postés
16569
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2022
3 280
29 déc. 2009 à 18:05
Et le tout avec quel langage...
0
SuPr3M
Messages postés
22
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
5 mai 2010
1
29 déc. 2009 à 18:27
@ michel_m
je travaille en C...
@ fiddy
Voici un tableau initialisé pourrais tu m'aider a le melanger stp.

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

int main()
{
int T[32],

srand(time(NULL));

for(i=0;i<31;i++)
T[i]=i+1;






}
0

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

Posez votre question
michel_m
Messages postés
16569
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2022
3 280
29 déc. 2009 à 18:30
Désolé, je ne connais pas C
0
SuPr3M
Messages postés
22
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
5 mai 2010
1
29 déc. 2009 à 18:36
Comment pourraint on melanger un tableau ?

Ta[i]=Tb[rand()%i+1] ?
0
SuPr3M
Messages postés
22
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
5 mai 2010
1
7 janv. 2010 à 23:28
j'ai compris merci :)
0