Tablica trójwymiarowa ze zmienną długością???

0

Chcę stworzyć zmienne przechowujące dane posegregowane według dat miesiąca i dnia tego miesiąca... Aż się prosi tablica trójwymiarowa:
Tab:= array[1..12, 1..31, 1..9] of word;
chciałbym żeby dane były wpisywane do tej tablicy przez pętlę :
For mies:=1 to 12 do
For day:=1 to 31 do Tab[mies, day,1]:=x
Jednak równocześnie chciałbym aby wartość day była przy każdym miesiącu inna: tzn: dla mies:=1 była 31, a dla mies:=4 była 30 itd..
Struktura tablicy wydaje się nie pozwalać na spełnienie tych wymagań....
A może ktoś ma pomysł jak to rozwiązać???

0

Mozesz uzyc tablicy dynamicznej (w delphi)

x : array of array of array of word;

SetLength(x, 12);
SetLength(x[0], 31); //tablice dynamiczne sa zawsze numerowane od zera nie od 1
SetLength(x[1], 29);  //29 bo lata bywaja przestepne
//itd do grudnia

for i:=0 to High(x) do 
  for j:=0 to High(x[i]) do
    SetLength(x[i,j], 9); //zakladam, ze do kazdego dnia 9 wartosci

Przy wpisywaniu wartosci w petli uzyj rowniez funkcji High, zeby sobue poradzic ze zmienna liczba dni w miesiacu.

0

Dobrze , ale czy w tym kodzie nie brakuje bliższego określenia wartości :'i' oraz 'j '(tzn aby program wiedział jakie wartości ma za nie podstawiać)??? czy po prostu zadeklarować...bo skąd program będzie wiedział ile wynosi High(x[i]??

Czy można w tamtym zapisie 'zagnieżdzić' warunek: If rokPrzestępny=true then SetLength(x[1] 29) else SetLength(x[1], 28);
kl

0

Dobrze , ale czy w tym kodzie nie brakuje bliższego określenia wartości :'i' oraz 'j '(tzn aby program wiedział jakie wartości ma za nie podstawiać)???

Czy High(x) zostanie zinterpretowane jako 12, a
High(x[i]) jako 31????

0

Dobrze , ale czy w tym kodzie nie brakuje bliższego określenia wartości :'i' oraz 'j '(tzn aby program wiedział jakie wartości ma za nie podstawiać)???

Te petle ustawiaja tylko dlugosc (9 wartosci dla kazdego dnia), podstawianie dopisz pozniej sam w potrojnej petli (jesli wartosci maja byc takie same)

czy po prostu zadeklarować...bo skąd program będzie wiedział ile wynosi High(x[i]??

Stad, ze wczesniej byly polecenia SetLength(x[1],31) itd.

Czy można w tamtym zapisie 'zagnieżdzić' warunek: If rokPrzestępny=true then SetLength(x[1] 29) else SetLength(x[1], 28);

mozna

Czy High(x) zostanie zinterpretowane jako 12, a
High(x[i]) jako 31????

High(x) bedzie rowne 11 (tablice dynamiczne liczy sie do ZERA)
High(x[i]) bedzie zalezec od i:
High(x[0] ) = 30 // styczen
High(x[1])= 28 lub 27 // luty, w zaleznosci od przestepnosci
itd

na pierwszy rzut oka wydaje sie niewygodne, ze z powodu indeksowania od zera High jest 11 zamiast 12 albo 30 zamiast 31 (a Low 0 a nie 1). Mozna temu ewentualnie zaradzic, stosujac tablice o 1 dluzsze i nie uzywajac komorki o indeksie 0. Ale nie polecam. Nie dosc, ze marnuje sie troche pamieci, to warto sie przyzwyczaic. Przy programowaniu w Delphi wystepuje to ciagle. Wszystkie listy (a wiec ListView, Memo, ListBox itd itp) sa indeksowane od zera. Trzeba pokochac funkcje Pred.

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