Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pascal-Duzina niza

[es] :: Pascal / Delphi / Kylix :: Pascal-Duzina niza

[ Pregleda: 1658 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

LSDCracker
Obrisan Profil

Član broj: 161168
Poruke: 62



Profil

icon Pascal-Duzina niza05.01.2009. u 15:24 - pre 186 meseci
Znaci imam problem sa definisanjem duzine niza.

Imam strukturu ucenik

type ucenik=record
sifra:integer;
ime:string;
prezime:string;
end;

Sad hocu da definisem niz tih struktura

type niz_ucenika=array[1..1000] of ucenik;

I program kad treba da odradi proceduru
Code:

procedure ispis_liste_ucenika(a:niz_ucenika;n:integer);
var i,g,m:integer;
begin
 writeln();
 g:=0;

 m:=0;

 repeat
  g:=m+1;
  if n>m+19 then
   m:=m+20
  else
   m:=n;

  for i:=g to m do
   writeln(a[i].sifra:5,a[i].ime:20,a[i].prezime:20);

  if m<>n then
   begin
    write('Za dalji ispis pritisnite enter');
    readln();
   end
  else
   writeln('Kraj ispisa!');

 until m=n;

 readln();
end;

On puca ako je duzina type niz_ucenika=array[1..1000] of ucenik; veca od 484.

Jel zna neko neki logican razlog sto se ovo desava jer meni zapravo niz od 484 ucenika nista ne znaci...



[Ovu poruku je menjao savkic dana 06.01.2009. u 03:51 GMT+1]
 
Odgovor na temu

sanja2010
Sanja Popovic
Cambridge, MA, USA

Član broj: 81666
Poruke: 286
*.ptt.rs.

Sajt: chvarciikavurma.blogspot...


+3 Profil

icon Re: Pascal-Duzina niza05.01.2009. u 15:44 - pre 186 meseci
Nisam detaljno gledala kod, ali da li koristis Turbo Pascal, Free Pascal ili nesto trece? Turbo Pascal ima jako mizerno ogranicenje po pitanju memorije koju moze da koristi, nisam sigurna tacno koliko, pa hoce da prska. Resenje je ili da smanjis niz ili da koristis nesto drugo.
 
Odgovor na temu

LSDCracker
Obrisan Profil

Član broj: 161168
Poruke: 62



Profil

icon Re: Pascal-Duzina niza05.01.2009. u 15:50 - pre 186 meseci
Free Pascal koristim, i sta bih mogao da koristim u tom slucaju?
Jer stvarno glupo mi je da me zeza duzina niza...
Ja stvarno mrzim pascal i programiranje u njemu, al eto sestri malo radim maturski pa reko da napisem neki programcic, medjutim eto puca mi samo zbog duzine niza.
Mislim jel ima neki nacin da se izbegne ovaj uslov od 484 elemenata.
Mislim ne znam, ja sam cak razmisljao o tome da stavim 2d matricu pa onda da imam 484*484 elemenata, al smesno mi da takvo nesto koristim.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Pascal-Duzina niza06.01.2009. u 02:57 - pre 186 meseci
> On puca ako je duzina type niz_ucenika=array[1..1000] of ucenik; veca od 484.

Definiši pucanje, koju tačno grešku dobijaš i gde?

> Jel zna neko neki logican razlog sto se ovo desava jer meni zapravo niz od 484 ucenika nista ne znaci...

Verovatno upisuješ ili čitaš van granica niza (neki od brojača je veći od max dozvoljenog). Pusti program kroz debugger i gledaj red po red.
 
Odgovor na temu

LSDCracker
Obrisan Profil

Član broj: 161168
Poruke: 62



Profil

icon Re: Pascal-Duzina niza06.01.2009. u 04:56 - pre 186 meseci
Pa pukne, znas kako to izgleda, prijavi mi gresku 202.
Sintaksicki je program u redu, medjutim kad krene kroz ovu proceduru on jednostavno prijavi sifru greske 202 i ne radi dalje.

Pa citam elemente do 40 clana niza, tesko da premasujem granice...
Jeste da su svi prazni, al eto bio bi red da uradi i sa maksimalnim brojem elemenata 1000, cak i vise...
 
Odgovor na temu

sanja2010
Sanja Popovic
Cambridge, MA, USA

Član broj: 81666
Poruke: 286
*.ptt.rs.

Sajt: chvarciikavurma.blogspot...


+3 Profil

icon Re: Pascal-Duzina niza06.01.2009. u 10:14 - pre 186 meseci
Citat:
202 Stack overflow error
The stack has grown beyond its maximum size (in which case the size of local variables should be reduced to avoid this error), or the stack has become corrupt. This error is only reported when stack checking is enabled.

Ajd daj ceo pas fajl :) Da li imas negde neku rekurziju?
 
Odgovor na temu

LSDCracker
Obrisan Profil

Član broj: 161168
Poruke: 62



Profil

icon Re: Pascal-Duzina niza06.01.2009. u 12:20 - pre 186 meseci
Sta ce ti ceo kod, nemas nista sto bi ti mozda dalo hint gde moze da nastane greska, trenutno su samo procedure i funkcije napisane od kojih svaka radi za sebe , tako da nemaju veze sa ovim...
Ne koristim rekurziju, nije mi potrebna.
Znaci prakticno ja ne radim nista posebno, prosto citanje iz niza struktura(slogova).
I stvarno ne kapiram sto nece da dozvoli da definisem vise od 484 elementa niza.

 
Odgovor na temu

sanja2010
Sanja Popovic
Cambridge, MA, USA

Član broj: 81666
Poruke: 286
*.ptt.rs.

Sajt: chvarciikavurma.blogspot...


+3 Profil

icon Re: Pascal-Duzina niza06.01.2009. u 14:06 - pre 186 meseci
Mogu da ga propustim kroz pascal i debugger :)
Ako si siguran da je sve ok, probaj da na pocetak koda stavis {$S-}. To ce da iskljuci proveravanje stacka.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Pascal-Duzina niza06.01.2009. u 14:50 - pre 186 meseci
> Pa pukne, znas kako to izgleda,

Ima pucanja i pucanja, bezbroj načina da se to izvede. Osim toga ima raznih definicija pucanja. Stoga reći da je program pukao nema nikakvo posebno značenje bez detalja.

> prijavi mi gresku 202.

Imaš rekurziju ili prevelike lokalne promenljive ili predubok nivo poziva funkcija (funkcija1 poziva funkciju2, ona tri i tako redom). Proveri podešavanja FPCa i koliki je default stack za odabrani tip projekta, nije isto ako pišeš pravi DOS program i windows conzolnu aplikaciju. Takođe možeš promeniti način alociranja niza i umesto statičkog niza na steku koristiti dinamički na heapu (New, GetMem).
 
Odgovor na temu

LSDCracker
Obrisan Profil

Član broj: 161168
Poruke: 62



Profil

icon Re: Pascal-Duzina niza06.01.2009. u 15:04 - pre 186 meseci
Ma program je u redu.
Ako je bas neophodno, evo ti pa ono istrazi, al nema bas sta da se vidi posebno :D

Code:

{$S-}  {Zbog duzine niza ucenika}
program E_Dnevnik;

uses crt; {Zbog komande ClrScr}

{SLOGOVI>>>>}



type predmet=record
  sifra:integer;
  naziv:string;
end;

type ucenik=record
  sifra:integer; {ID}
  ime:string; {Ime ucenika}
  prezime:string; {Prezime ucenika}
end;

type user=record
 id:integer; {Redni broj korisnika}
 ime:string; {Ime korisnika}
 prezime:string; {Prezime korisnika}
 pol:boolean; {Muski-1,Zenski-0}
 titula:string; {Administrator,Profesor,Ucenik}
 lvl:integer; {1-ADMIN,2-PROFESOR,3-UCENIK}
 namee:string; {Korisnicko ime}
 pass:string; {Lozinka}
end;

type ocena=record
  ucenikk:ucenik;
  predmett:predmet;
  ocene:array[1..10] of integer;
  prosek:real;
end;

type niz_ucenika=array[1..2000] of ucenik;
type niz_predmeta=array[1..100] of predmet;
type users_list=array[1..100] of user;
{<<<<SLOGOVI}

VAR
    namee,pass:string;
    users:users_list;
    users_data:text;
    lista_ucenika:niz_ucenika;
    ucenici,predmeti,ocene:text;
    max_ucenika:integer;

{PROCEDURE I FUNKCIJE>>>>}

procedure new();
begin
 writeln();
end;

procedure stop();
begin
 readln();
end;

procedure Start();
begin
 ClrScr;
 writeln();
 writeln('Dobrodosli u E-Dnevnik ');
 writeln('E-Dnevnik je napravljen od strane ***** kao deo maturskog rada.');
 writeln('Za pomoc ukucajte : help');
 writeln();
end;

procedure login_input(var name,pass:string);
begin
 writeln('LOGIN');
 new;
 write('Korisnicko ime : ');
 readln(name);
 write('Lozinka : ');
 readln(pass);
end;

procedure ispis_liste_ucenika(a:niz_ucenika;n:integer);
var i,g,m:integer;
begin
 writeln();
 g:=0;

 m:=0;

 repeat
  g:=m+1;
  if n>m+19 then
   m:=m+20
  else
   m:=n;

  for i:=g to m do
   writeln(a[i].sifra:5,a[i].ime:20,a[i].prezime:20);

  if m<>n then
   begin
    write('Za dalji ispis pritisnite enter');
    readln();
   end
  else
   writeln('Kraj ispisa!');

 until m=n;

 readln();
end;

{UPIS I UCITAVANJE PREDMETA>>>>>}
procedure ucitavanje_liste_predmeta(var fajl:text;var a:niz_predmeta;var n:integer);
var i:integer;
begin
 i:=1;

 reset(fajl);

 while not EOF(fajl) do
  begin
   readln(fajl,a[i].sifra);
   readln(fajl,a[i].naziv);
   i:=i+1;
  end;
 n:=i;
end;

procedure upis_liste_predmeta(var fajl:text;var a:niz_predmeta;var n:integer);
var i:integer;
begin
 i:=1;

 rewrite(fajl);

 for i:=1 to n do
  begin
   writeln(fajl,a[i].sifra);
   writeln(fajl,a[i].naziv);
  end;
end;
{<<<<<UPIS I UCITAVANJE PREDMETA}

{UPIS I UCITAVANJE UCENIKA>>>>>}
procedure ucitavanje_liste_ucenika(var fajl:text;var a:niz_ucenika;var n:integer);
var i:integer;
begin
 i:=1;

 reset(fajl);

 while not EOF(fajl) do
  begin
   readln(fajl,a[i].sifra);
   readln(fajl,a[i].ime);
   readln(fajl,a[i].prezime);
   i:=i+1;
  end;
 n:=i;
end;

procedure upis_liste_ucenika(var fajl:text;var a:niz_ucenika;var n:integer);
var i:integer;
begin
 i:=1;

 rewrite(fajl);

 for i:=1 to n do
  begin
   writeln(fajl,a[i].sifra);
   writeln(fajl,a[i].ime);
   writeln(fajl,a[i].prezime)
  end;
end;
{<<<<<UPIS I UCITAVANJE UCENIKA}

{CHECK LOGIN>>>}
function check_login(namee,pass:string;a:users_list;maxusers:integer):integer;
var i:integer;
begin
 for i:=1 to maxusers do
  begin
   if (namee=a[i].namee) and (pass=a[i].pass) then
    begin
     check_login:=a[i].ID;
     break;
    end;
  end;
end;
{<<<<CHECK LOGIN}


{<<<<PROCEDURE I FUNKCIJE}





BEGIN

{Dodeljivanje fajlova}

assign(ucenici,'ucenici.txt');
assign(predmeti,'predmeti.txt');
assign(ocene,'ocene.txt');
assign(users_data,'users.txt');

{/Dodeljivanje fajlova}

{PROGRAM} 
 max_ucenika:=40;
 ispis_liste_ucenika(lista_ucenika,max_ucenika);
{/PROGRAM}

END.


Jos tu fali stvari, al to je zasad ubaceno iz ovih gomila txt fajlova sa procedurama...

Ne radi ni sa {$S-}...
@savkic
I
Evo moje definicije pucanja :
1. Pocne da radi
2. Prekine sa radom pre kraja i prijavi gresku (PUKNE! :D)
II
Evo ti ceo kod.
Ajd reci mi gde ima tu greska?
Procedure su pisane zasebno, pa je sve to spojeno u jedan fajl, tako da tesko da imaju ikakvih dodirnih tacaka...
III
Pravim windows konzolnu aplikaciju.
IV
Takođe možeš promeniti način alociranja niza i umesto statičkog niza na steku koristiti dinamički na heapu (New, GetMem).
To ne znam kako se radi.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Pascal-Duzina niza06.01.2009. u 15:55 - pre 186 meseci
> Evo moje definicije pucanja :
> 1. Pocne da radi
> 2. Prekine sa radom pre kraja i prijavi gresku (PUKNE! :D)

Kao što rekoh, bezbroj načina da se izazove greška i nasilan prekid programa, bez detalja sama informacija da nešto puca nije dovoljna.

> Evo ti ceo kod.
> Ajd reci mi gde ima tu greska?
> Procedure su pisane zasebno, pa je sve to spojeno u jedan fajl, tako da tesko da imaju ikakvih dodirnih tacaka...

Ovako kakav je izvršava se u Delphiu, obriši sve te fajlove gde čuvaš podatke i ako ti bez podataka puca u FPCu, onda gledaj podešavanja stacka u njemu. Takođe možeš preći na Turbo Delphi, u njemu će verovatno raditi sve bez dodatnih podešavanja.

>> Takođe možeš promeniti način alociranja niza i umesto statičkog niza na steku koristiti dinamički na heapu (New, GetMem).
> To ne znam kako se radi.

Sa New recimo možeš alocirati slog po slog, i umesto tipa ocena koristio bi POcena koji je deklarisan kao POcena = ^Ocena;
Za primere pogledaj help ili potraži u kodu. Te alocirane slogove možeš povezati u jednostruko povezanu listu (svaki element sadrži pokazivaš na naredni) ili u niz deklarisan kao array[0..1000] of POcena;

Code:

var
  Niz: array [0..1000] of POcena;
  b, i, BrojElemenataNiza: Integer;
begin
  BrojElemenataNiza := 5000;

  for i := 0 to High(Niz) do
    New(Niz[i]);

  for i := 0 to High(Niz) do
    Niz[i].ucenikk.ime := 'Pera' + IntToStr(i);

  for i := 0 to High(Niz) do
    Dispose(Niz[i]);
end.



 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pascal-Duzina niza

[ Pregleda: 1658 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.