Génération des nombres aléatoires

Résolu/Fermé
9odes Messages postés 9 Date d'inscription vendredi 10 mai 2013 Statut Membre Dernière intervention 12 mai 2013 - 10 mai 2013 à 17:49
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 - 13 mai 2013 à 14:43
bonjour svp répondez moi c urgent
j'ai une matrice de 20 ligne et 8 colonnes et je dois remplir cette matrice avec des nombres aléatoires compris entre 1 et 64 de tel sorte que dans la méme colonne aucun nombre se répéte svp aidez moi comment faire
merci d'avance
A voir également:

11 réponses

chida29 Messages postés 31 Date d'inscription jeudi 9 mai 2013 Statut Membre Dernière intervention 29 novembre 2013
10 mai 2013 à 17:57
bonsoir,
vous avez essayé "rundom" je pense ke c une fonction prédéfini
0
9odes Messages postés 9 Date d'inscription vendredi 10 mai 2013 Statut Membre Dernière intervention 12 mai 2013
10 mai 2013 à 21:38
OUI j'ai essayé mais il se peut que dans une meme colonne une nombre peut se répéter je cherche comment eviter qu'un nombre peut se répéter svp aidez moi
0
chida29 Messages postés 31 Date d'inscription jeudi 9 mai 2013 Statut Membre Dernière intervention 29 novembre 2013
10 mai 2013 à 23:26
alors vous essayez de faire des tests, si le nombre existe déja ne pa l'ajouté sinon vous lajouté!!!
je pense que sa peut marché???
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
11 mai 2013 à 02:06
Salut, tu peux résoudre ton problème en t'inspirant de ceci:

https://forums.commentcamarche.net/forum/affich-27411214-tableau-deux-dimenssions#p27414863
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
9odes Messages postés 9 Date d'inscription vendredi 10 mai 2013 Statut Membre Dernière intervention 12 mai 2013
11 mai 2013 à 14:03
merci tksteph mais comment empècher un nombre (choisi aléatoirement de 1 à 64) de répéter juste dans une meme colonne
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
11 mai 2013 à 14:31
Justement le lien indiqué précedement met bien celà en évidence.

Plusieurs solutions ont été proposés, dont une représentation de ta matrice par des Listes(ArrayList) et une autre par des tableaux.

Et chacune des solutions commentées(suffisament).

Je ne saurai te dire comment empècher un nombre de se repéter dans une colonne sans voir ce que tu fais déja (Début de programme,Algorithme,...).

Mais j'insiste également sur le fait que les deux programmes sont prestque identiques, il suffit que tu remplaces les "9" de l'autre coté par tes (20, 8 et 64)
Et tu as ton programme.

Toutefois si celà semble floue, commence par nous faire voir ton début de programme et on pourra te guider vers la solution
0
9odes Messages postés 9 Date d'inscription vendredi 10 mai 2013 Statut Membre Dernière intervention 12 mai 2013
11 mai 2013 à 15:12
voici mon début de programme . en fait c'est le problème de 8 reines à l'aide des algorithmes génétiques et ma matrice POS[20][8] représente le population iniale (20 individu et 8 réprésente les positions de 8 reines pour chaque individu)
c'est pour cette raison que dans une meme colonne on doit pas avoir le meme nombre sinon le nombre de reines diminue



public class Main {


public static void main(String[] args) {

int POS[][]=new int[20][8];// c'est un tableau qui contient les positions aléatoires de 8 reines de 20 solutions de la popinit//
for (int l=0;l<20;l++)
for (int k=0;k<8;k++)
{

POS[l][k]=(int)(Math.random()*64);
}
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
Modifié par tksteph le 11/05/2013 à 15:58
Voilà qui devrait te ravir.
N'oublies pas de marquer Résolu.


public class Main{
public static void main(String[] args) throws InterruptedException {
//déclaration du tableau
int[][] pos= new int[20][8];
//le max non atteint doit être au moin 18.
int max=64;
//remplissage de la matrice monTableau
for (int i = 0; i < 20; i++){
for(int j = 0; j < 8; j++){
//première génération pou l'élément T(0,0)
int nbreGenere= (int) (Math.random()*max);
boolean existe=true;
while(existe){
//regénération du nombre après avoir
//été trouvé dans une ligne ou une colonne
nbreGenere= (int) (Math.random()*max);
//vérifier si la valeur générée est nulle.
while(nbreGenere==0){
nbreGenere= (int) (Math.random()*max);
}
existe=false;
//recherche verticale
//bien sur si on est pas dêja à la 1iere ligne
if(i!=0){
for (int k = 0; k < i; k++){
if(pos[k][j]==nbreGenere){
existe=true;
}
}
}
if(j!=0){
//recherche horizontale
//bien sur si on est pas dêja à la 1iere colonne
for (int l = 0; l < j; l++){
if(pos[i][l]==nbreGenere){
existe=true;
}
}
}
}
//élément non trouvé puisque
//on a sortis de la boucle while
pos[i][j]=nbreGenere;
//un peu de stylisme pour l'affichage
if(pos[i][j]<10)
System.out.print("0"+pos[i][j]+" ");
else
System.out.print(pos[i][j]+" ");
}
System.out.println();
}
}
}
0
9odes Messages postés 9 Date d'inscription vendredi 10 mai 2013 Statut Membre Dernière intervention 12 mai 2013
11 mai 2013 à 17:03
merci beaucoup tksteph mais juste une question le nombre généré va etre entre 1 et 64 ou bien 0 et 63
et pourquoi /vérifier si la valeur générée est nulle.
while(nbreGenere==0){
nbreGenere= (int) (Math.random()*max);
}
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
12 mai 2013 à 00:34
Effectivement Math.random te génère un nombre aléatoire entre 0 et 1 , raison pour laquelle on multiplie par max(64) et donc il faut vérifier à chaque fois que la valeur 0 n'en fait pas partie, si c'est le cas , regénérer un autre. (Car tu as dit un nombre entre 1 et 64) si tu veux inclure 0 alors supprimes le while{}
0
9odes Messages postés 9 Date d'inscription vendredi 10 mai 2013 Statut Membre Dernière intervention 12 mai 2013
12 mai 2013 à 13:01
je ne sais pas comment vous remercier tksteph mais juste un autre question après le traitement de croisement de l'algorithme génétique le contenu de la matrice POS change et dans ce cas il peut y avoir un nombre qui se répète dans la meme colonne alors quesque je dois faire pour vérifier que dans la matrice POS aucun nombre se répète et si c'est le cas comment alors générer un autre nombre différent de tous les valeurs de la meme colonne
0
tksteph Messages postés 204 Date d'inscription samedi 20 mars 2010 Statut Membre Dernière intervention 3 janvier 2018 25
13 mai 2013 à 14:43
Je ne sais pas de quoi tu parles quand tu dis "après le traitement de croisement de l'algorithme génétique le contenu de la matrice POS change et dans ce cas il peut y avoir un nombre qui se répète dans la meme colonne"
Mais ce que je peux te dire c'est que si tu utilise l'algorithme ci-dessus pour générer ta matrice , alors il n'ya aucune chance que tu aies sur la même colonne deux fois le même nombre.
En effet il ya un booléen : existe qui est utilisé pour le controle, et donc tu remarqueras que tant qu'il a la valeur vrai (c'est à dire qu'un des nombres générés existe déja sur la ligne à laquelle on est ou à la colonne) alors on regénère un autre, et ce jusqu'a ce qu'il passe à false (c'est à dire que tous les nombres de la ligne et de la colonne sont distincts)

En résumé, si c'est toi qui controle la construction de ta matrice et que tu te serves de l'algo ci-dessus, alors aucune chance que la situation que tu décris n'arrive, tu n'auras jamais de nombre qui se répète dans la même colonne.
0