Random

houssain1991 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
walidovich_85 Messages postés 608 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,


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

4 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
houssain1991 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
merci KX:)))))))
0
houssain1991 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
voici mon code qu est ce que dois je ajouter pour accomplir la 2eme condition (les nbres ne ce répéte pas)
0
houssain1991 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
#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");
}


}
0
walidovich_85 Messages postés 608 Date d'inscription   Statut Membre Dernière intervention   73
 
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
houssain1991 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
merci walid mais moi je veut que les nombres du matrice ne se répéte pas aussi
0
walidovich_85 Messages postés 608 Date d'inscription   Statut Membre Dernière intervention   73
 
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.
0
houssain1991 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
si tu veut s'il vous plait me donner le bout du code sa serai vraiment gentil de ta part
0
walidovich_85 Messages postés 608 Date d'inscription   Statut Membre Dernière intervention   73
 
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;
}
0
houssain1991 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
merci Walid c est trés gentil :)))
0
walidovich_85 Messages postés 608 Date d'inscription   Statut Membre Dernière intervention   73
 
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;
}
0