PASCAL - Zadaci, resenja, problemi, izazovi...

e, imam jos jedan problem, ako neko moze da mi pomogne bio bih mu zahvalan:

Error 124:Statement part too large.





to se desava posle par desetina write-ova i writeln-ova zaredom, kada kod od dela na kom mi pokaze gresku pa do kraja koda stavim u { } onda nema error-a. ja kapiram da mu je valjda previse da to odjednom ispise ili sta vec ali ne znam kako to da izbegnem.


takodje mi trebaju sledeci tipovi podataka ali ne znam kako da ih napravim ili da li uopste postoje(kao integer i longint):
array[1..1000]
array[1..500,1..500]
string[10000]
 
ja sam se takmicio, sad sam na fakultetu.
niz
500 x 500 ima 250000 clanova. ako su oni tipa integer niz zauzima 250000*2=500000B ~= 500KB i to nece da radi, jer u pascalu imas 64KB raspolozive memorije. ako koristis neki veci tip (float, double, longint) ili ne daj boze slog nema gde da stavi i izbaci gresku.

Zbog toga preporucujem freepascal (ako ne gresim www.fpc.org) koji je nesto moderniji i nema toliko ogranicenja za memoriju (meni su u njemu glatko prolazili nizovi koji su za turbo nenormalno veliki).

drugi nacin rada sa fajlovima mi nije poznat, a mislim i da ne postoji.
ako je fajl primer.dat, i nalazi se u direktorijumu gde i program onda imas assign(f, 'ulaz.dat');
ako je fajl negde van onda assign(f,'c:\ulaz.dat');
mozes cak i da stavis string, pa da korisnik sam unese npr.

program a;
var
fajl:string;
f:text;
begin
fajl:='c:\ulaz.dat';
assign(f,fajl); reset(f);
close(f);
end.

za bojenje teksta turbo ne moze mnogo da pomogne jer ima neke svoje graficke biblioteke, ali podrzavaju 320x160 ili tako neku smesnu rezoluciju i 16 boja, ili cak mozda 8. potrazi po netu, mislim da je to sve u graph modulu
 
znam. neka ti ovo bude nesto kao....hm....hobi?
:lol:
nimalo jednostavno iako je princip resavanja dosta prost.

sta znam...imas kao ulaz pocetno i krajnje vreme telefonskog razgovora, u obliku hh:mm:ss, i cenu razgovora po sekundu. izlaz treba da bude cena razgovora pri cemu treba uzeti u obzir da izmedju 21 i 07 traje jeftina tarifa - 50% od unete cene razgovora po sekundi.

jel jasno sta se trazi?

a moze i ovo, malo da vezbas ulaz/izlaz - nacrtati n piramida visine h
n=2
h=4
* *
*** ***
***** *****
**************
 
u proceduri za ispisivanje ispises pocetak koda, do te procedure, a proceduru i njen sadrzaj ispises tako sto stavis taj sadrzaj u neku promenljivu pa ispises sadrzaj promenljive. nesto tipa

a:="write('a:=',a);"
write('a:=',a);

ne znam kako bolje da ti objasnim. u svakom slucaju moze da se uradi i treba voditi racuna da se ne uvrzes u beskonacnost
 
u proceduri za ispisivanje ispises pocetak koda, do te procedure, a proceduru i njen sadrzaj ispises tako sto stavis taj sadrzaj u neku promenljivu pa ispises sadrzaj promenljive. nesto tipa

a:="write('a:=',a);"
write('a:=',a);

ne znam kako bolje da ti objasnim. u svakom slucaju moze da se uradi i treba voditi racuna da se ne uvrzes u beskonacnost

o tome sam i govorio, ali se nisam seio da sadrzaj procedure stavim u promenljivu, hvala
 
program telefon;
var
cena,iznos:real;
sat1,min1,sek1,sat2,min2,sek2:integer;
vreme1,vreme2,trajanje,i:longint;
begin
writeln('Unesite vreme pocetka poziva(na primer: 12 34 2).');
readln(sat1,min1,sek1);
writeln('Unesite vreme kraja razgovora(na primer: 13 5 49).);
readln(sat2,min2,sek2);
writeln('Unesite cenu razgovora u dinarima po sekundi(na primer: 0.004).');
readln(cena);
vreme1:=sat1*3600+min1*60+sek1; {vreme pocetka poziva u sekundama}
vreme2:=sat2*3600+min2*60+sek2; {vreme kraja poziva u sekundama}
if vreme1<vreme2 then
trajanje:=vreme2-vreme1; {trajanje poziva}
if vreme1>vreme2 then
trajanje:=24*3600+vreme2-vreme1; {poziv je trajao 1 dan manja razlika izmedju 2 i 1}
iznos:=0;
for i:=1 to trajanje do
if (vreme1+i>7*3600) and (vreme1+i<=21*3600) then
iznos:=iznos+cena else {ako je normalja tarifa}
iznos:=iznos+cena/2; {ako je 50% od pocetne cene}
writeln('Ovaj razgovor ce vas kostati ',iznos:0:5,' dinara.')
end.





program piramide;
var
n,i,h:integer;
begin
writeln('Unesite n i h.');
readln(n,h);
for i:=1 to h do {broj redova}
begin
for j:=1 to n do {broj piramida)
begin
for k:=1 to h-i do {razmaci pre piramide}
write(' ');
for k:=1 to 2*i-1 do {piramida}
write('+');
for k:=1 to h-i+1 do {razmaci posle piramide}
write(' ');
end;
writeln
end
end.





a ovaj za ispisivanje koda nemam sad vremena ni da razmisljam a ni da pisem.
btw, thanks na zadacima
 
i nemoj...nije nimalo lako kao sto izgleda, cak i kad znas ideju :)

nemam sad zivaca da testiram kod, spava mi se, verujem da je u redu kad si ga okacio

evo ti jedan sa republickog od pre dve godine:

imas niz od n domina razlicite visine h poredjanih na razdaljini 1. kada se prva domina gurne odredjen broj domina u nastavku ce takodje pasti. napisati program koji racuna koliko ce domina pasti za unete podatke.

ulaz: domine.in
prvi red: n (broj domina - izmedju 1 i 50000)
narednih n redova: hi (visina i-te domine, izmedju 1 i 200)

izlaz: domine.out
prvi red: m (broj palih domina)

primer:
10
2
5
1
1
1
13
2
2

rusenjem prve domine pada i druga, rusenjem druge pada 3,4,5, i 6, i tu je kraj (jer 2-a pada do 7-e, dodirne je ali je ne obori)

izlaz
6
 
Kod:
program a;
var
    i, n:integer;
begin 
    readln(n);
    for i:= 1 to n do
    begin
      for j:= 1 to i do
        print(i);
      println();
    end;
end.

Kako program radi:
ucita n
u svakom redu se ispisuje broj reda toliko puta koji je to red, tj. u drugom redu se ispisuje broj 2 dva puta. Zbog toga imas dve petlje - prva (sa i) prodje kroz n redova, druga (sa j) ispisuje broj i i puta, i na kraju dod prelaz u nov red (tome onaj prazan readln)
 
peruzzi... molim te... imam opet nesto tesko...
 

Prilozi

  • petlje7.jpg
    petlje7.jpg
    39,9 KB · Pregleda: 12

Back
Top