Generation aleatoire de nombre non repetés

Résolu
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.
Configuration: Windows XP
Opera 9.80

7 réponses

  1. Contributeur
    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
    1. Contributeur
      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
      1. Contributeur
        Et le tout avec quel langage...
        0
        1. @ 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
          1. Contributeur
            Désolé, je ne connais pas C
            0
            1. Comment pourraint on melanger un tableau ?

              Ta[i]=Tb[rand()%i+1] ?
              0
              1. j'ai compris merci :)
                0