Génération des nombres aléatoires [Résolu/Fermé]

Signaler
Messages postés
9
Date d'inscription
vendredi 10 mai 2013
Statut
Membre
Dernière intervention
12 mai 2013
-
Messages postés
204
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
3 janvier 2018
-
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

11 réponses

Messages postés
31
Date d'inscription
jeudi 9 mai 2013
Statut
Membre
Dernière intervention
29 novembre 2013

bonsoir,
vous avez essayé "rundom" je pense ke c une fonction prédéfini
Messages postés
9
Date d'inscription
vendredi 10 mai 2013
Statut
Membre
Dernière intervention
12 mai 2013

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
Messages postés
31
Date d'inscription
jeudi 9 mai 2013
Statut
Membre
Dernière intervention
29 novembre 2013

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é???
Messages postés
204
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
3 janvier 2018
23
Salut, tu peux résoudre ton problème en t'inspirant de ceci:

https://forums.commentcamarche.net/forum/affich-27411214-tableau-deux-dimenssions#p27414863
Messages postés
9
Date d'inscription
vendredi 10 mai 2013
Statut
Membre
Dernière intervention
12 mai 2013

merci tksteph mais comment empècher un nombre (choisi aléatoirement de 1 à 64) de répéter juste dans une meme colonne
Messages postés
204
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
3 janvier 2018
23
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
Messages postés
9
Date d'inscription
vendredi 10 mai 2013
Statut
Membre
Dernière intervention
12 mai 2013

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);
}
Messages postés
204
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
3 janvier 2018
23
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();
}
}
}
Messages postés
9
Date d'inscription
vendredi 10 mai 2013
Statut
Membre
Dernière intervention
12 mai 2013

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);
}
Messages postés
204
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
3 janvier 2018
23
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{}
Messages postés
9
Date d'inscription
vendredi 10 mai 2013
Statut
Membre
Dernière intervention
12 mai 2013

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
Messages postés
204
Date d'inscription
samedi 20 mars 2010
Statut
Membre
Dernière intervention
3 janvier 2018
23
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.