Random

Fermé
houssain1991 Messages postés 10 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 15 mai 2013 - 18 févr. 2013 à 20:51
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 - 20 févr. 2013 à 03:03
Bonjour,


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

4 réponses

KX Messages postés 16664 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 21 janvier 2023 2 999
18 févr. 2013 à 21:01
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 lundi 18 février 2013 Statut Membre Dernière intervention 15 mai 2013
18 févr. 2013 à 21:06
merci KX:)))))))
0
houssain1991 Messages postés 10 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 15 mai 2013
18 févr. 2013 à 21:11
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 lundi 18 février 2013 Statut Membre Dernière intervention 15 mai 2013
18 févr. 2013 à 21:11
#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 mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 72
18 févr. 2013 à 21:18
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 lundi 18 février 2013 Statut Membre Dernière intervention 15 mai 2013
18 févr. 2013 à 21:25
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 mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 72
18 févr. 2013 à 21:45
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 lundi 18 février 2013 Statut Membre Dernière intervention 15 mai 2013
18 févr. 2013 à 21:57
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 mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 72
18 févr. 2013 à 22:13
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 lundi 18 février 2013 Statut Membre Dernière intervention 15 mai 2013
18 févr. 2013 à 22:56
merci Walid c est trés gentil :)))
0
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 72
20 févr. 2013 à 03:03
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