RetourForum Delphi
Nouveau compte - Se connecter - Perdu votre mot de passe?Recherche: Utilisateur - Message

Index > Forum général > Random avec les numéros choisisNouveau post - Répondre
TheWinner
visiteur
Message Random avec les numéros choisis message: éditerle 11/07/19 à 18h40

Bonjour,

J'aimerais créer un programme qui fait des mélanges (ou Random) avec les numéros prédéterminés:

Exemple: 1, 14, 25, 32, 44, 49, 50, 53, 55, 61, 67, 70

Ce programme va mélanger et donner des combinaisons de quatre numéros, en utilisant seulement les numéros mentionnés plus haut.
Avez-vous des idées, avec quels fonctions utilisés, pour créer ce programme?

Merci d'avance.

papyvore
visiteur
Message Re: Random avec les numéros choisis message: éditerle 12/07/19 à 12h08

salut
un truc comme ça
[code]
var
  Indices: array [1 .. 12] of Integer = (1, 14, 25, 32, 44, 49, 50, 53, 55, 61, 67, 70);
  IndicesCount: Integer;
  i: Integer;
  z: Integer;

procedure TForm13.Button1Click(Sender: TObject);
begin
  IndicesCount := 0;
  i            := 0;
  randomize;
  repeat
    z := randomrange(Indices[1], Indices[12]);
    if z in [1, 14, 25, 32, 44, 49, 50, 53, 55, 61, 67, 70] then
    begin
      Memo1.Lines.Add(inttostr(z));
      inc(i);
    end;
  until i = 4;
end;

papyvore
visiteur
Message Re: Random avec les numéros choisis message: éditerle 12/07/19 à 18h56

ou plutôt celui ci
 

code



var
  Indices: array [1 .. 12] of Integer = (1, 14, 25, 32, 44, 49, 50, 53, 55, 61, 67, 70);
  i: Integer;
  z: Integer;

procedure TForm13.Button1Click(Sender: TObject);
begin
  randomize;
  for i := 1 to 4 do
  begin
    z := randomrange(1,12);
    Memo1.Lines.Add(inttostr(Indices[z]));
  end;
  Memo1.Lines.Add('===================');
end;

TheWinner
visiteur
Message Re: Random avec les numéros choisis message: éditerle 02/08/19 à 21h44


Bonjour papyvore,

Merci beaucoup, pour votre précieux aides.

Je vais les tester ces codes.

Passez une excellente journée.

TheWinner
visiteur
Message Re: Random avec les numéros choisis message: éditerle 04/08/19 à 23h15

Bonjour papyvore,

Wow, Ça marche dès le premier test.

Vous êtes l'expert.

Un gros merci.

Excellente journée à vous.

TheWinner
visiteur
Message Re: Random avec les numéros choisis message: éditerle 09/08/19 à 05h29

Bonjour,

J'ai une question pour la ligne suivante (voir aussi le code plus haut:

var
  Indices: array [1 .. 12] of Integer = (1, 14, 25, 32, 44, 49, 50, 53, 55, 61, 67, 70);

Est-ce que c'est possible de transformer ces numéros, en variable, plutôt de laisser fixe.

C'est-à-dire que, j'aimerais changer ces numéros
  1, 14, 25, 32, 44, 49, 50, 53, 55, 61, 67, 70
à variable.

Je vais ajouter un "Edit.1" pour entrer les numéros voulus et le programme va lire ces numéros, à partir de  edit1.txt pour ensuite utiliser dans le programme.

Donc j'ai besoin Delphi juste une fois pour compiler ce programme en .EXE et par la suite, j'utiliserais seulement mon .EXE pour les utilisations subséquences.

Merci d'avance.

Merci d'avance.

papyvore
visiteur
Message Re: Random avec les numéros choisis message: éditerle 09/08/19 à 10h41

salut
essais quelque chose comme ça
 

code


var
  Indices: array [0 .. 11] of integer = ( 1,14,25,32,44,49,50,53,55,61,67,70);
procedure TForm13.Button1Click(Sender: TObject);
begin
  randomize;
  Indices[0] := strToInt(Edit1.Text);
  Label2.caption := ' ';
  for i  := 0 to 11 do
  Label2.caption := Label2.caption  + IntToStr(Indices[i])+',';
  for i := 1 to 4 do
  begin
    // z := randomrange(1,12);
    z := RandomFrom(Indices);
    Memo1.Lines.Add(inttostr(z)); // inttostr(Indices[z]));
  end;

  Memo1.Lines.Add('===================');

end;


en changeant l'index de "Indices"

TheWinner
visiteur
Message Re: Random avec les numéros choisis message: éditerle 13/08/19 à 00h54

Bonjour,

merci pour ce code.
Par contre, j'ai bloqué avec  z := RandomFrom(Indices);

Un mesage d'erreur suivant s'affiche:

'There is no overload version of RandomFrom that can be called with these arguments'

Après plusieurs recherches sur Internet, j'ai ajouté StrUtils  dans le section USES
mais le même message d'erreur s'affcihe lors de la compilation du programme.

Avez-vous l'idée, quelle est la cause de cette erreur?
Quelle est la solution? SVP.

Merci d'avance.

TheWinner
visiteur
Message Re: Random avec les numéros choisis message: éditerle 13/08/19 à 02h57

Je viens de trouver mon erreur.

Il faut spécifier MATH, (Uses Math) et le programme fonctionne bien.

Par contre, je ne peux pas entrer plus qu'un numéro.

Est-ce possible que je puisse entrer comme les douze numéros en séClin d'oeil langue arant avec une virgule de chacun de numéro entrés?

Mon intention c'est d'entrer douze numéros d'un seul coup pour que Delphi puisse les utiliser et fournir les Random numéros,

à partir de numéros entrés.

Merci beaucoup que mon projet avance, lentement mais surement, grâce à votre aide.

Bonne journée.

papyvore
visiteur
Message Re: Random avec les numéros choisis message: éditerle 15/08/19 à 09h19

Salut
essais ça j'ai testé il peut y avoir des doublons si tu n'en veux pas il y a d'autres solutions
 

code


procedure TForm13.Button3Click(Sender: TObject);
var
//  B: string;
  A: string;
  V: Integer;
begin
  A    := Form13.Edit1.Text;
  for i := 0 to 11 do
  begin

    if i = 11 then
    begin
      Indices[i] := StrToInt(copy(A, 1, Length(A)));
//      B := B + copy(A, 1, Length(A));
      break;
    end;
    Indices[i] := StrToInt(copy(A, 1, pos(',', A) - 1));
//    B := B + copy(A, 1, pos(',', A) - 1) + ',';
    V := pos(',', A, 1);
    Delete(A, 1, V);
  end;

//  Form13.Label1.caption := B;
for i := 0 to 3 do
  begin
    z := RandomFrom(Indices);
    Memo1.Lines.Add(inttostr(z));
  end;
  Memo1.Lines.Add('==========');
end;

TheWinner
visiteur
Message Re: Random avec les numéros choisis message: éditerle 25/08/19 à 18h15

Bonjour papyvore,

Merci beaucoup pour votre aide,

J'ai compilé le programme et j'ai bloqué par l'erreur suivant

V := pos(',', A, 1);

error:    ')' expected but ',' found

Je n'ai pas d'idée de quoi qui bloque.

Merci d'avance et bonne journée.

papyvore
visiteur
Message Re: Random avec les numéros choisis message: éditerle 27/08/19 à 20h31

salut
si tu as fait un copié de mon
code il est possible que certains caractères soient faux.
essaie en réécrivant la ligne
sinon je suis absent la semaine
je regarde en rentrant.

TheWinner
visiteur
Message Re: Random avec les numéros choisis message: éditerle 02/09/19 à 21h01

Bonjour papyvore,

Merci pour votre pécieuse suggestion.
J'ai remplacé

V := pos(',', A, 1);

par

V := pos(',', A);

Autrement dit j'ai enlevé  ,1 de l'équation et cela a fonctionné.

Juste me confirmer si l'équation

V := pos(',', A) est conformée à votre idée.

Merci d’avance et bon retour.




papyvore
visiteur
Message Re: Random avec les numéros choisis message: éditerle 03/09/19 à 08h21

salut
oui effectivement ta solution est juste, c'était mon copié qui était mauvais.

TheWinner
visiteur
Message Re: Random avec les numéros choisis message: éditerle 05/09/19 à 22h38


Bonjour papyvore,

Merci énormément de votre aide.

Mon projet est réalisable et a eu un bon succès, grâce à vous.

Le seul problème, c'est juste que les combinaisons fournies, les numéros sont en double, des fois.

Merci Mille fois.

Passez une excellente journée.

papyvore
visiteur
Message Re: Random avec les numéros choisis message: éditerle 06/09/19 à 09h45

salut
si tu veux une génération de nombre sans doublons , ce n'est plus tout a fait aléatoire mais c'est possible
avec le code que je te joint
 

code



procedure Shuffle(var aArray; aItemCount: integer; aItemSize: integer);
// https://www.swissdelphicenter.com/en/showcode.php?id=1006
var
  Inx: integer;
  RandInx: integer;
  SwapItem: PByteArray;
  A: TByteArray absolute aArray;
begin
  if (aItemCount > 1) then
  begin
    GetMem(SwapItem, aItemSize);
    try
      for Inx := 0 to (aItemCount - 2) do
      begin
        RandInx := Random(aItemCount - Inx);
        // move( const SourcePointer; var DestinationPointer; CopyCount : Integer ) ;
        Move(A[Inx * aItemSize], SwapItem^, aItemSize);
        Move(A[RandInx * aItemSize], A[Inx * aItemSize], aItemSize);
        Move(SwapItem^, A[RandInx * aItemSize], aItemSize);
      end;
    finally
      FreeMem(SwapItem, aItemSize);
    end;
  end;
end;

procedure TForm13.Button2Click(Sender: TObject);
var
  i: integer;
  c: integer;
  A: string;
  V: integer;
  // const    NbTirage: Integer = 6;

begin // edition sans doublon
  Randomize;
  A    := Form13.Edit1.Text;
// remplissage array indices
  for i := 0 to 11 do
  begin
    if i = 11 then
    begin
      Indices[i] := strToInt(copy(A, 1, Length(A)));
      break;
    end;
    Indices[i] := strToInt(copy(A, 1, pos(',', A) - 1));
    // B := B + copy(A, 1, pos(',', A) - 1) + ',';
    V := pos(',', A); // , 1);
    Delete(A, 1, V);
  end;

{  Label1.caption  := ' ';
  for i            := 0 to 11 do
    Label1.caption := Label1.caption + inttostr(Indices[i]) + ',';}

  Shuffle(Indices, High(Indices), SizeOf(integer)); // mélange array indices

  for i := 0 to 3 do  //édition du tirage
    Memo2.Lines.Add(inttostr(Indices[i]));

  Memo2.Lines.Add('==========');
//  AllocIndices(Sender, 100, 250, 12);
end;

TheWinner
visiteur
Message Re: Random avec les numéros choisis message: éditerle 09/09/19 à 18h48


Bonjour papyvore,

Wow, il s’agit d’une nouvelle et superbe  technique pour moi.

Je vais apprendre en profondeur, pour comprendre votre idée
et aussi pour augmenter mes connaissances en Delphi.

Merci énormément pour vos précieuses aides.

Passez une excellente journée.

Index > Forum général > Random avec les numéros choisisNouveau post - Répondre
 page 1 sur 1