Pioche sans remise [Résolu]

cs_alaga 17 Messages postés mercredi 2 novembre 2005Date d'inscription 28 octobre 2008 Dernière intervention - 6 avril 2006 à 09:42 - Dernière réponse : cs_alaga 17 Messages postés mercredi 2 novembre 2005Date d'inscription 28 octobre 2008 Dernière intervention
- 7 avril 2006 à 13:58
Bonjour,
j'ai un petit problème. Je voudrais faire un tirage aléatoire et sans remisedans une chaine : 0 1 2 3 4 5 (integer).
C'est à dire que quand on clique sur un bouton, un tirage aléatoire doit se faire parmis ces chiffres. Comme je les utilise aprés pour afficher des images je ne veux pas qu'il y ait de doublons. Le chiffre tiré doit donc être soit mémorisé soit effacé de la chaine (je préférerai cette solution) pour qu'au prochain tirage il ne soit pas de nouveau tiré.
Voici le code que j'utilise pour le tirage aléatoire :

var A : integer;
begin
// 0 <= A < 5
Randomize;
A:= Random(5);
end;

Pas de problème d'écriture juste le soucis des doublons.

Merci de votre aide.........
Alaga
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 6 avril 2006 à 14:53
3
Merci
j'ai tester ceci qui fonctionne

procedure TForm1.Button1Click(Sender: TObject);

var A,i : integer;

ok:boolean;

begin

ok:= false;

for i: =0 to 5 do if not tires[i] then

begin

ok:= true;break;

end ;

if not ok then

begin

MessageDlg('tirage impossible', mtError , [mbOk], 0);

exit;

end;

repeat

A: = Random(6);

until not tires[A] ;

tires[A]:= true;

label1.Caption:=inttostr(a);



end ;

procedure TForm1.Button2Click(Sender: TObject);

var i:integer;

begin

for i: =0 to 5 do tires[i]:=false;//reset du tableau;

end;





@+

jlen

Merci jlen100 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 119 internautes ce mois-ci

Commenter la réponse de jlen100
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 6 avril 2006 à 10:15
0
Merci
salut,

mets un tableau dans lequel tu converses les precedents tirage

var

tires: array[0..5]of boolean;

A : integer;

begin

// 0 <= A < 5

Randomize;

for i:=0 to 5 do if not tires[i] then break;

if i<5 then

begin

MessageDlg('tirage impossible', mtError , [mbOk], 0);

exit;

end;

repeat

A:= Random(5);

until not tires[A] ;

tires[A]:=true;

end;



@+

jlen
Commenter la réponse de jlen100
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 6 avril 2006 à 10:52
0
Merci
petite ereur sur le test il faut faire

if (i=5)and tires[5] then

begin

MessageDlg('tirage impossible', mtError , [mbOk], 0);

exit;

end;

d'autre part le randomize il ne faut le faire qu'une fois dans le programme

@+

jlen
Commenter la réponse de jlen100
cs_alaga 17 Messages postés mercredi 2 novembre 2005Date d'inscription 28 octobre 2008 Dernière intervention - 6 avril 2006 à 14:15
0
Merci
merci de ton message mais ça ne marche pas : le code sort toujours le même nombre : 0 !

d'autres idées ???

J'ai bien pensé que je devais utiliser un tableau ou autre chose pour mémoriser les chiffres déjà choisi et comparer, mais..... je n'y arrive pas!

help!
alaga
Commenter la réponse de cs_alaga
cs_alaga 17 Messages postés mercredi 2 novembre 2005Date d'inscription 28 octobre 2008 Dernière intervention - 7 avril 2006 à 13:58
0
Merci
Ca fonctionne nickel !!!! Merci beaucoup!!!
alaga
Commenter la réponse de cs_alaga

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.