[ 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? |
[ MACTEPx @ 02.04.2005. 14:59 ] @
[ 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 [ 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 ![]() [ 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 ] @
![]() Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|