[Pascal] Półdynamiczna tablica 2d :-/

0

Problem dotyczy FreePascala (taki lepszy Turbo Pascal ;))

Mam mały problemik: chcę zrobić tablicę dwuwymiarową, która ma przechowywać max 1000000 elementów, ale w różnych komórkach
przykład

1: 6 2 4
2: 1
3:
4:
5: 5

przy czym liczba takich elementów będzie maksymalnie taka jak wielkość tablicy głównej - ma być to po prostu posortowana wg pewnych kryteriów tablica [1..1000000]. myślałem o stałym zadeklarowaniu tablicy:

tablica = array[1..1000000,1..1000000] of longint

ale jak łatwo policzyć za dużo zajmie ;). Poza tym wiekszosc miejsca bedzie sie marnowac...

pomyślałem więc, żeby pierwsza wartość była stała, a druga dynamiczna, ale jak to zapisać??

tablica = array[1..1000000,???] of longint

i jak potem zmienić wielkość tej drugiej części?

z góry BIG thx za pomoc ;). Jeżeli sprawa jest prosta to sorka, ale juz nie daje rady z tym szitem :(

zmiana zakresu longint na niższy nie wchodzi w gre - tak samo jak zmniejszenie tablicy :(

0

Jak to zapisać ?.. może tak:

var
tablica: array[1..1000000] of array of Longint;

Btw: nie mam pojęcia czy taki zapis w ogóle jest prawidłowy. sprawdź.

0

dla tp: po pierwsze nie ma tablic dynamicznych, po drugie maksymalny rozmiar tablicy to 65520 bajtów, po trzecie - jak chcesz umieścić 1 000 000 bajtów danych w pamięci, która ma mniej niż 640kB?
dla fp: wskaźnik do tablicy wskaźników na tablice longintów - sam przydziel pamięć i sam ją zwolnij - nie musisz przydzielać od razu całych 4 milionów bajtów; jak masz nowszego fp, to array of array of longint.

p.s. - kilkanaście postów niżej jest ten wątek: http://4programmers.net/Forum/viewtopic.php?id=61035 - szkoda, że nie użyłeś wyszukiwarki.

0

Zapewne (tak jak ja) męczysz zadania z olimpiady informatycznej :P

0

Właśnie. Nie ma tablic dynamicznych. Ale możesz zrobić tabliće wskaźników, o tak:

type
   DYN_BYTE    = ^BYTE;

var
   dyn_array   : array[0..100000] of DYN_BYTE;
Tak chyba lepiej... Chyba.
0

Właśnie. Nie ma tablic dynamicznych. Ale możesz zrobić tabliće wskaźników, o tak:

type
   DYN_BYTE    = ^BYTE;

var
   dyn_array   : array[0..100000] of DYN_BYTE;
Tak chyba lepiej... Chyba.

eee.. chyba źle się czujesz. w ten sposób tablica, która by zajmowała 1000000 bajtów, zajmie ich 4000000 - nie zyskujesz NIC poza utrudnionym i wydłużonym dostępem do komórek tej tablicy.
wiesz w ogóle do czego służą wskaźniki?

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