Jak dynamicznie tworzyć tablice i jak z niej wylosować jakiś rekord?

0

Czy ten kod na tworzenie tablicy jest prawidłowy ?

var
  Tablica_xy_koloru : array of Integer; 
....
i:=0;
i2:=0;
...

 //Inc(i, 2);<- ??? 
 i+= 2;// powinno zwiększać o 2, czyli jesli 0 to 2 jesli 2 to 4
 SetLength(Tablica_xy_koloru, i); // <- nie mam pojęcia jak to ma wyglądać :/ ważne by tablica 0 zawierała wartość 0 a dane były zapisywane w 1+
   Tablica_xy_koloru[i2] := X;// teoretycznie numer 1
 Inc(i2);
   Tablica_xy_koloru[i2] := Y;// teoretycznie numer 2
 Inc(i2); 

A jeśli nie to jak powinno to wyglądać ?
I kolejna kwestia jak powinna wyglądać funkcja losująca z tablicy 2 wartości, jeśli mam je zapisywane np od 1 do 100
czyli tak:

SetLength(Tablica_xy_koloru,i);
Tablica_xy_koloru[0] := '0';

...
  Tablica_xy_koloru[1] := '0';
  Tablica_xy_koloru[2] := '10';
  Tablica_xy_koloru[3] := '0';
  Tablica_xy_koloru[4] := '10';
...
  Tablica_xy_koloru[105] := '0';
  Tablica_xy_koloru[106] := '10';

a bym chciał by mi losowało wyniki w sposób :

SetLength(Tablica_xy_koloru,i);
Tablica_xy_koloru[0] := '0';
...
// wynik 1 losowania
  Tablica_xy_koloru[3] := '0';
  Tablica_xy_koloru[4] := '10';
...
// wynik innego losowania
  Tablica_xy_koloru[85] := '0';
  Tablica_xy_koloru[86] := '10';

0
XA napisał(a):

Czy ten kod na tworzenie tablicy jest prawidłowy ?

Raczej tak – nie ma tu żadnej magii, po prostu określasz rozmiar macierzy za pomocą SetLength i robisz z tą tablicą co chcesz. Lepiej by było użyć listy generycznej – np. TList<Integer> – i nie pierdzielić się z ustalaniem rozmiaru, a skupić się na dodawaniu elementów.

 i+= 2;// powinno zwiększać o 2, czyli jesli 0 to 2 jesli 2 to 4

No przecież zwiększa – operator += służy do inkrementacji o wartość prawego operandu, więc jak napiszesz += 2 to wartość zmiennej urośnie o 2. To są absolutne podstawy, więc nad czym się zastanawiasz?

 SetLength(Tablica_xy_koloru, i); // <- nie mam pojęcia jak to ma wyglądać :/ ważne by tablica 0 zawierała wartość 0 a dane były zapisywane w 1+

No tak ma to wyglądać. Wywołanie SetLength z podaniem wartości 0 jako rozmiaru macierzy spowoduje, że rozmiar tablicy wynosić będzie 0.

I kolejna kwestia jak powinna wyglądać funkcja losująca z tablicy 2 wartości, jeśli mam je zapisywane np od 1 do 100

Należy wylosować indeks – niech będzie to i – z odpowiedniego zakresu, a następnie odczytać wartość komórki i oraz i+1. Jeśli i musi być nieparzyste to wystarczy na wylosowaną liczbę nałożyć maskę zapaląją najmłodszy bit, np. tak:

Index := Random(100) or 1;

W wyniku tej operacji, zmienna Index zawierać będzie liczbę nieparzystą, z zakresu od 1 do 99.

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