Losowanie bez powtórzeń

0

Witam.
Znalazłem w internecie przykładowy kod na losowanie bez powtórzeń, po skompilowaniu niby wszystko działa jak trzeba, właśnie "niby" okazuje się że liczba 120 ZAWSZE jest wylosowana jako ostatnia, w której linijce kodu jest błąd?

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FNameList : TStringList;
    FNameIndex: Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  Randomize;
  FNameIndex := 0;
  FNameList := Tstringlist.Create;
  FNameList.LoadFromFile('Liczby.txt');
  //FNameList.Add('Name 1');
  //FNameList.Add('Name 2');
  //FNameList.Add('Name 3');
  //FNameList.Add('Name 4');
  //FNameList.Add('Name 5');
  //FNameList.Add('Name 6');

  for i:= 1 to 120 do // shuffle 120 times. its up to you
    FNameList.Exchange(Random(FNameList.Count-1), Random(FNameList.Count-1));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  if FNameIndex < FNameList.Count then
    begin
      Memo1.Lines.Add(FNameList.Strings[FNameIndex]);
      inc(FNameIndex);
    end else showmessage('Done!');
end;

end.
```delphi

```
0

FNameList.LoadFromFile('Liczby.txt');

Liczby wczytywać z pliku? Serio?

w której linijce kodu jest błąd?

45

1

for i:=FNameList.Count-1 downto 1 do FNameList.Exchange(Random(i+1),i);

0
_13th_Dragon napisał(a):

for i:=FNameList.Count-1 downto 1 do FNameList.Exchange(Random(i+1),i);

To NIE jest odpowiedź na pytanie pytacza. Poza tym twój algorytm daje większą entropię przy niższych indeksach.

0

Dzięki -321oho i _13th_Dragon teraz wszystko działa jak należy. Temat do zamknięcia.

0

Przemyśl to jeszcze raz. No chyba że na temat entropii miałeś na myśli kod od pytacza.

Twój kod daje mniejszą entropię! Może i pochopnie stwierdziłem że dla niższych indeksów ale zauważ że nie ma możliwości aby element pozostał na swoim miejscu. Więc ty to przemyśl.

1 użytkowników online, w tym zalogowanych: 0, gości: 1