Random

Bonjour,

comment je peut remplir une matrice aléatoirement telque les nombre ne se répete pas????

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. bonjour houssain,

    enfaite, le code contient une erreur de logique, si tu le testerai plusieurs fois, tu trouvera des valeurs répétées.
    voila la correction exacte cette foie:

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

    int Random (int,int);

    int Random (int min, int max)
    {
    return (min + (rand () % (max - min+1)));
    }

    int main() {
    int n=0;
    while (n<5)
    {
    printf("donnez la taile du tableau (un nombre supérieur a 5): ");
    scanf("%d",&n);
    }

    int nombre[n];
    int min,max;
    printf("donnez le minimum du tableau: ");
    scanf("%d",&min);
    max=min+n*2;
    printf("\nle max du tableau sera egal a min+(taile*2) qui vaut = %d\n",max);

    nombre[0]= Random (min,max);
    for (int i=1; i<n; i++)
    {
    int test=1;
    while(test==1)
    {
    test=0;
    nombre[i]=Random (min,max);
    for(int j=0;j<i;j++)
    {
    if (nombre[i]==nombre[j])
    test=1;
    }
    }
    }

    printf ("\n Tableau genere aleatoirement:\n");
    for (int i=0; i<n;i++)
    {
    printf ("T(%d)= %d ,",i+1,nombre[i]);
    }
    getch();
    return 0;
    }
    1. bonsoir

      le voila:

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

      int Random (int,int);

      int Random (int min, int max)
      {
      return (min + (rand () % (max - min+1)));
      }

      int main() {
      int n=0;
      while (n<5)
      {
      printf("donnez la taile du tableau (un nombre supérieur a 5): ");
      scanf("%d",&n);
      }

      int nombre[n];
      int min,max;
      printf("donnez le minimum du tableau: ");
      scanf("%d",&min);
      max=min+n*3;
      printf("\nle max du tableau sera egal a min+(taile*3) qui vaut = %d\n",max);

      nombre[0]= Random (min,max);
      for (int i=1; i<n; i++)
      {
      int test=1;
      while(test==1)
      {
      nombre[i]=Random (min,max);
      for(int j=0;j<i;j++)
      {
      if (nombre[i]==nombre[j])
      test=1;
      else
      test=0;
      }
      }
      }

      printf ("\n Tableau genere aleatoirement:\n");
      for (int i=0; i<n;i++)
      {
      printf ("T(%d)= %d ,",i+1,nombre[i]);
      }
      getch();
      return 0;
      }
      1. merci Walid c est trés gentil :)))
    2. bonsoir,

      ce code remplis un tableau de taille 5, alors modifie le pour qu'il remplie une matrice:

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

      int Random (int,int);

      int Random (int _iMin, int _iMax)
      {
      return (_iMin + (rand () % (_iMax-_iMin+1)));
      }

      int main() {

      int nombre[5];
      int min,max;
      printf("donnez le minimum du tableau: ");
      scanf("%d",&min);
      printf("donnez le maximum du tableau: ");
      scanf("%d",&max);

      for (int i=0; i<5; i++)
      {
      nombre[i]= Random (min,max);

      }

      printf ("\n Tableau genere aleatoirement:\n");
      for (int i=0; i<5;i++)
      {
      printf ("T(%d)= %d ,",i+1,nombre[i]);
      }
      getch();
      return 0;
      }

      Bonne chance
      1. merci walid mais moi je veut que les nombres du matrice ne se répéte pas aussi
      2. ahh ok, je vien de comprendre.
        alors tu n'a qu'à introduire une "while" et une "for".
        une for pour remplir ts les nombres, et une while pr ne prendre qu'un nombre différent de ts les autres déja rempli.
        si tu n'y arrive pas, laisse un message, et je passerai au code.
      3. si tu veut s'il vous plait me donner le bout du code sa serai vraiment gentil de ta part
    3. Modérateur
      Il y a plusieurs méthodes, selon les contraintes que tu as sur les nombres à générer.

      Méthode 1 :
      Pour chaque case tu tires un nombre aléatoirement, et tu vérifies qu'il n'a pas déjà été choisi. Si il y a déjà ce nombre il faut recommencer.

      Méthode 2 (si on tire un nombre aléatoire parmi des valeurs limitées)
      On stocke dans un tableau toutes les valeurs possibles, puis à chaque fois on tire un nombre aléatoire correspondant aux indices du tableau. On utilise le nombre tiré au sort et le retire du tableau.
      1. merci KX:)))))))
      2. voici mon code qu est ce que dois je ajouter pour accomplir la 2eme condition (les nbres ne ce répéte pas)
      3. #include<stdio.h>
        #include<stdlib.h>

        void main()
        {int M[3][3];
        int i,j,x;
        printf(" Donnez le max des nombres aleatoires");
        scanf("%d",&x);

        for (i=0;i<3;i++)
        {
        for (j=0;j<3;j++)
        {
        M[i][j]= (rand()%x)+(1*x);
        }
        }

        for (i=0;i<3;i++)
        {
        for(j=0;j<3;j++)
        printf("%7d", M[i][j]);
        printf("\n");
        }

        }