Random
houssain1991
Messages postés
11
Statut
Membre
-
walidovich_85 Messages postés 698 Statut Membre -
walidovich_85 Messages postés 698 Statut Membre -
Bonjour,
comment je peut remplir une matrice aléatoirement telque les nombre ne se répete pas????
comment je peut remplir une matrice aléatoirement telque les nombre ne se répete pas????
4 réponses
-
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. -
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 -
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;
} -
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;
}