[delphi] losowanie wszystkich liczb

0

Witam. Powiedzmy że mam 26 liczb (1,2...26) i chcę je wszystkie jakby pomieszać że np. kliknę button to wylosuje mi przykładowo 18 za następnym razem 3, 8, 1 itp czyli aby losowało z tego przedziału ale aby nie było powtórzeń. Jak już wylosuje wszystkie możliwe czyli kliknę w button 26 razy to po prostu koniec, niech więcej funkcja już nie losuje. Za każdym razem może przypisywać do zmiennej i jak już będzie koniec to niech może przypisze 0, tak chyba najprościej.

Tylko teraz jak to zrobić :/ ? Szukałem o sortowaniu losowym i było o tabelach itp a mi chodzi o zwykłe liczby, integer. Szukałem o randomize itp ale ja nie chce losować liczb w nieskończoność tylko tak jak opisałem to wcześniej.

Jak tego dokonać? Może co innego niż randomize? Proszę o pomoc

0
  1. Deklarujesz tablice
  2. Wypelniasz liczbami od 1 do 26
  3. Mieszasz te liczby (odwrotnosc sortowania)
  4. Odczytujesz kolejne elementy tablicy
    PS. Bez Randomize sie nie obejdzie
0

A co chciałbyś innego niż Randomize? Bo samym Randomize, to Ty wiele nie zdziałasz. To może być
na przykład Random? :P Po co się zastanawiać nad takimi pierdółkami. Siąść i napisać. I jak się nie
podoba w oparciu o tablicę - to możesz sobie zrobić choćby TStringList i przechowywać wylosowane
integery jako stringi albo obiekty w TList czy dowolnym takim obiekcie. I ja użyłem ListBox do tego
aby te liczby wyświetlić. Czasami zastanawiam się po co ludzie się właśnie zastanawiają nad takimi
pierdółkami banalnymi, bo inaczej tego nazwać nie można. Nawet w dziale Newbie. I nie ma się co
zastanawiać za długo, dawno już byś to napisał. Zobaczysz dobroć moja i nadmiar czasu się kiedyś
definitywnie skończy. No i co wtedy będzie? Tragedia - nie napisze nikt samodzielnie programu, bo
do tej pory samodzielne programowanie to było skorzystanie z mojego gotowca ;/ Ręcę troszke mi
opadają, a i ja rozumiem, że to dział Newbie (można tutaj pisać o banałach? Można. I nic nie boli?
Ano nie boli. Brawo). Z okazji nadchodzącego roku masz gotowca chociaż haterzy tego nie lubią, a
sam się nic nie nauczysz. A i do innych skrupulatnych - teraz staram się, mimo że w powiększeniu
czcionki, nie pisac tak wąsko jak ostatnio. Przyzwyczajenie z e-maili pisanych pod Pine oraz takich
różnych tam wypocin, które pisało się w plain text, aby ładnie wyglądały z idealnym justowaniem.

//...
  public
    procedure CzyscTablice;
  end;

const
  IleLiczb = 26;

var
  Form1 : TForm1;
  Licznik : Byte;
  Tablica : array[1..IleLiczb] of integer;

implementation

{$R *.dfm}

procedure TForm1.CzyscTablice;
var
  I : integer;
begin
  ListBox1.Items.Clear;
  Licznik := Low(Tablica);
  for I := Low(Tablica) to High(Tablica) do
  begin
    Tablica[I] := 0;
  end;
end;

procedure TForm1.FormCreate(Sender : TObject);
begin
  Randomize;
  CzyscTablice;
end;

procedure TForm1.Button1Click(Sender : TObject);
var
  Losuj : boolean;
  I, J, Liczba : integer;
begin
  Liczba := 0;
  for I := 1 to Licznik do
  begin
    Losuj := True;
    while Losuj = True do
    begin
      Losuj := False;
      Liczba := Random(26) + 1;
      if I > 1 then
        for J := 1 to I - 1 do
          if Tablica[J] = Liczba then
            Losuj := True;
    end;
  end;
  Tablica[Licznik] := Liczba;
  ListBox1.Items.Add(IntToStr(Tablica[Licznik]));
  Licznik := Licznik + 1;
  if Licznik > High(Tablica) then
  begin
    ShowMessage('Od nowa!');
    CzyscTablice;
  end;
end;
0

Dziękuję Panu!

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