[ MACTEPx @ 02.04.2005. 14:59 ] @
kako da u pascalu dimenzionisem niz od n elemenata ako je n broj koji se unosi tokom izvrsavanja programa?
[ IgLo @ 02.04.2005. 16:30 ] @
U cistom paskalu (znaci ako ne govorimo o Delphi-ju) ne mozes nikako. Za to se koriste liste.
[ Toyo @ 02.04.2005. 17:15 ] @
U Turbo pascal-u:
Code:

type
  Elem=Integer;
  Niz=array[1..10000] of Elem;
  PNIz=^NIz;
var
  n:Integer;
  a:PNiz;
begin
  n:=100; // Primer
  GetMem(a, sizeof(Elem)*n); // Zauzimanje memorije

  blablabla // neka obrada
  a^[1]:=0; // pristupanje clanovima niza;
  a^[2]:=a^[z];


  FreeMem(a); // Oslobadjanje memorije
end.


Umesto elem=integer, stavis elem=neki tip podataka ili record.

Ovo vadim iz malog mozga, ali bi trebalo da radi.

[ MACTEPx @ 03.04.2005. 16:34 ] @
Citat:
Code:
var a:array[1..n] of tip
to mi treba ali ne radi
[ Vdjuric @ 04.04.2005. 01:53 ] @
Citat:
Toyo: U Turbo pascal-u:

...

Umesto elem=integer, stavis elem=neki tip podataka ili record.

Ovo vadim iz malog mozga, ali bi trebalo da radi.


To bi sve bilo lepo da Turbo Pascal podrzava nizove vece od valjda 64k...
10000 integera moze da prodje (10000 x 2 = 20000, jer je manje od 64K), ali kada radis sa nekim drugim tipom to nije primenljivo...
Mozes da napravis npr 10000 pokazivaca na podatke, pa da tako radis...
NPR, iz glave:

Type
Pera = RECORD
A: Integer;
B: String;
C: Real;
END;

Niz: Array[1..10000] Of ^Pera;

pa onda upisujes podatke na sledeci nacin:
...
new(Niz[1]);
Niz[1]^.A:=1;
Niz[1]^.B:='asasd';
Niz[1]^.C:=12.22;
Dispose(Niz[1]);
------------------------------
...time ces morati "rucno" da po potrebi alociras i oslobadjas memoriju. Na taj nacin imas u stvari niz pointera, koji opet u TP-u ima maksimalnu duzinu od 64K, a to je
(valjda) 65,536 / 4 = 16,384... Znaci maksimalno 16,384 pokazivaca mozes da smestis u jedan niz... Ako ti treba vise podataka, moraces da pravis povezanu listu...

poz

[ _v!rus_ @ 04.04.2005. 16:49 ] @
Programi pisani u paskalu imaju pristup memoriji kapaciteta 1 x mem. stranica, tj. 64kb, zbog ogranicenja adresiranja memorije (steka) kod procesora 8086. Znaci da code+data+heap < 64kb. Naravno, sve to vazi za programe pisane na "tradicionalan" nacin ;-)

Sto se tice matrica, mizlim da Paskal ima proceduru SetLength(sta, velicina). Sa njome mozes redimenzionirati matrice deklarisane kao array of something (dinamicke matrice).

I jos jedna stvar:
NIZ JE JEDNODIMENZIONALNA MATRICA!!!!!!!!
To "niz" su nasi programeri izmislili kao pojam, sto uopste ne postoji ni u jednoj literaturi koju nije pisao nas covek. Ali posto su svi nasi "stari programeri" u stvari matematicari koji su se 70-ih preorijentisali na racunare, onda su i svoje ideje prebacili tamo. Zato za svaki zadatak sa takmicenja u programiranju trebao si da imas 6 iz matematike, boze moj, to se podrazumeva. Kada budu napisali paskal sa Citaj() i Pisi(), i kada pudu napravili nas procesor, onda cu da govorim "niz" do kraja zivota.

;-)
[ IgLo @ 04.04.2005. 23:40 ] @
Citat:
_v!rus_:
Sto se tice matrica, mizlim da Paskal ima proceduru SetLength(sta, velicina).


Lose mislis

Dinamicki nizovi (ili ako bas hoceh jednodimenzionalne matrice ) su ubacene tek u delphi-ju. Ko radi u TP-u u ovakvim slucajevima je nazalost osudjen na liste ili moze da pravi razne egzibicije sa pointerima sto bas ne preporucujem zbog kasnijeg odrzavanja koda.
[ Srki_82 @ 05.04.2005. 00:07 ] @
Ako je zaista bitno imati velike liste mogla bi se napraviti klasa koja bi odrzavala jednostruko ili dvostruko povezanu listu pointera. Takve liste nisu lose ako se uvek radi sekvencijalno citanje, ali ako je potreban random access onda su prilicno spore.
[ Rapaic Rajko @ 07.04.2005. 15:01 ] @
Code:
Znaci da code+data+heap < 64kb.


Pardon, ali ovo nema veze sa stvarnoscu. Licno sam svojevremeno rezervisao preko 1MB memorije na heap-u pomocu pointera; u TurboPascalu razume se.

Rajko

P.S. Tacno je
Code:
code+data+stack < 64KB 


[ _v!rus_ @ 11.04.2005. 01:27 ] @
@Rajko
Izvinjavam se zbog "?syntax error"
Poenta mi je bila da staticki alocirana memorija je ogranicena na dosta manje od 64Kb jer i code i data i stack (!) zauzimaju isti mem. prostor.

PS. I nije bas da "nema veze sa stvarnoscu", samo sam se zajebo u brzini i ogranicenom dial-up net vremenu.
[ RnD57 @ 11.04.2005. 01:37 ] @
off-topic:

?syntax error...
LOL
Dobri stari Commodore 64...
[ _v!rus_ @ 11.04.2005. 15:46 ] @