Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 11 odgovora
  • 5.217 pregleda

Najnovija ↓

dimenzionisanje niza 02.04.2005. u 15:59 · pre 262 meseca #1
kako da u pascalu dimenzionisem niz od n elemenata ako je n broj koji se unosi tokom izvrsavanja programa?
Potpis
#include <iostream.h>
void main()
{
cout << "Pozdrav...";
}
Re: dimenzionisanje niza 02.04.2005. u 17:30 · pre 262 meseca #2
U cistom paskalu (znaci ako ne govorimo o Delphi-ju) ne mozes nikako. Za to se koriste liste.
Re: dimenzionisanje niza 02.04.2005. u 18:15 · pre 262 meseca #3
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.

Re: dimenzionisanje niza 03.04.2005. u 17:34 · pre 262 meseca #4
Citat:
Code:
var a:array[1..n] of tip
to mi treba ali ne radi
Potpis
#include <iostream.h>
void main()
{
cout << "Pozdrav...";
}
Re: dimenzionisanje niza 04.04.2005. u 02:53 · pre 262 meseca #5
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

Re: dimenzionisanje niza 04.04.2005. u 17:49 · pre 262 meseca #6
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.

;-)
Re: dimenzionisanje niza 05.04.2005. u 00:40 · pre 262 meseca #7
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.
Re: dimenzionisanje niza 05.04.2005. u 01:07 · pre 262 meseca #8
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.
Potpis
Play Store
Re: dimenzionisanje niza 07.04.2005. u 16:01 · pre 262 meseca #9
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 


Re: dimenzionisanje niza 11.04.2005. u 02:27 · pre 262 meseca #10
@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.
Re: dimenzionisanje niza 11.04.2005. u 02:37 · pre 262 meseca #11
off-topic:

?syntax error...
LOL
Dobri stari Commodore 64...
Potpis
random...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme