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

Odpowiedz Nowy wątek
2004-11-16 23:07
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 :(


Pozostało 580 znaków

2004-11-16 23:44
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ź.


Pozostało 580 znaków

2004-11-17 11:39
ŁF
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.


Pozostało 580 znaków

2004-11-17 18:03
0

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

Pozostało 580 znaków

2004-11-18 18:29
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.

Pozostało 580 znaków

2004-11-18 19:08
ŁF
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;


> <span style="color: red">
> Tak chyba lepiej... Chyba.</span>

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?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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