Problem se javlja kod sljedećeg programa u Pascalu. Molim vas da pokušate ispraviti program, unaprijed hvala!
Program VolumenTijela;{Deklariranje varijabla, konstanti i tako dalje}USES crt, graph;LABEL povratak;LABEL nastavka;VAR V, a, r1, r2, b, h, V1, V2, V3: real; gd, gm:smallint;CONST pi=3.14;{Kraj deklariranja varijabla, konstanti i tako dalje}
{Procedure}PROCEDURE unospodataka;FORWARD;PROCEDURE tetraedar;FORWARD;PROCEDURE odsjecakvaljka;FORWARD;PROCEDURE odsjecakkugle;FORWARD;PROCEDURE tijelo;FORWARD;PROCEDURE crtanje;FORWARD;PROCEDURE uvijet;FORWARD;{Kraj procedura}
{Procedura koja izracunava volumen tetraedra}PROCEDURE tetraedar;BEGIN V1=a*a*a*sqrt(2)/6;END;{Kraj procedure koja izracunava volumen tetraedra}
{Procedura kojom unosimo podatke}PROCEDURE unospodataka;BEGIN WRITELN('Unesite duljinu stranice tetraedra - a ='); READLN(a); WRITELN('Unesite duljinu polumjera baze valjka - r2 ='); READLN(r2); WRITELN('Unesite visinu valjka - b ='); READLN(b); WRITELN('Unesite duljinu polumjer kugle - r1 ='); READLN(r1); WRITELN('Unesite visinu kuglina odsjecka - h ='); READLN(h);END;{Kraj procedure kojom unosimo podatke}
{Procedura koja izracunava volumen odsjecka valjka}PROCEDURE odsjecakvaljka;BEGIN V2=sqr(r2)*pi*(b-((a*sqrt(3))/(6*sqrt(2)));END;{Kraj procedure koja izracunava volumen odsjecka valjka}
{Procedura koja izracunava volumen odsjecka kugle}PROCEDURE odsjecakkugle;BEGIN V3=(2/3)*sqr(r1)*pi*h;END;{Kraj procedure koja izracunava volumen odsjecka kugle}
{Procedura koja provjerava da li je uvijet zadovoljen}PROCEDURE uvijet;BEGIN (r1>0) AND (r2>0) AND (b>0) AND (h>0) AND (h>((a*sqrt(3))/(6*sqrt(2))));END;{Kraj procedure koja provjerava da li je uvijet zadovoljen}
{Procedura koja crta tijelo}PROCEDURE crtanje;BEGIN DETECTGRAPH(gd,gm); INITGRAPH(gd,gm,''); {Tetraedar} SetColor(5); LINE(100,300,200,100); LINE(200,100,300,300); LINE(100,300,300,300); SetLineStyle(3,1,1); LINE(100,300,200,200); LINE(300,300,200,200); LINE(200,100,200,200); {Kugla} SetColor(6); CIRCLE(300,175,100); {Valjak} SetColor(4); SetLineStyle(0,1,1); ELLIPSE(200,275,0,360,50,20); ELLIPSE(200,375,0,360,50,20); LINE(150,275,150,375); LINE(250,275,250,375);
READLN; CLOSEGRAPH;END;{Kraj procedure koja crta tijelo}
{Procedura koja izracunava ukupan volumen tijela}PROCEDURE tijelo;BEGIN V=V1+V2+V3;END;{Kraj procedure koja izracunava ukupan volumen tijela}
BEGIN crtanje; WRITELN('ZADATAK:'); WRITELN('Zadan je pravilni tetraedar koji ima stranicu a. S jedne strane tetraedra ulazi kugla koja ima polumjer r1 i duljinu visine odsjecka h. S druge strane tetraedra ulazi valjak koji ima polumjer baze r2 i svoju visinu b. Baza valjka je paralelna sa stranicom tetraedra koju sijece. Program ce izracunati volumen toga tijela.'); WRITELN(); WRITELN('IZRADA:'); :povratak; unospodataka; IF uvijet=true THEN goto povratak ELSE goto nastavak; :nastavak; tetraedar; odsjecakvaljka; odsjecakkugle; tijelo; WRITELN('Volumen tijela je = ', tijelo); READLN;END.
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Kriminalno loše napisan kod. Od korištenja goto-a (zar je tako teško umjesto toga napisati petlju repeat...until not uvjet), globalnih varijabli, do nepotrebnog pisanja procedura kad je sve moglo biti unutar glavnog programa ili recimo procedure "izračunaj".
Ono što je naočigled jasno je da bi "procedura" uvijet (valjda uvjet!) zapravo trebala biti funkcija, s obzirom da procedure ne vraćaju vrijednost, a ti "uvijet" koristiš kao funkciju. Također, možeš li objasniti što radi procedura "uvijet"? Ne radi ništa. Radi logičke operacije, a s rezultatom ne radi ništa! Zar ne znaš kako se vraća vrijednost u Pascalu? Pripiše se vrijednost nazivu funkcije.
function Uvjet: Boolean;begin Uvjet := (r1>0) AND (r2>0) AND (b>0) AND (h>0) AND (h>((a*sqrt(3))/(6*sqrt(2))));end;
Uses crt;
{Dekariranje varijabli, konstanti itd}
Label povratak;
Label nastavak;
Var a,b,c,V1,d,V2,R1,L,V3,R2,V4,V5,V6,V7,V:real;
const Pi=3.14;
{Kraj deklariranja varijabli}
{Procedure}
Procedure tijelo;
FORWARD;
Procedure unospodataka;
FORWARD;
Procedure kvadar;
Forward;
Procedure kocka;
Forward;
Procedure lopta;
Forward;
procedure valjak;
Forward;
Procedure odsjecakvaljka;
Forward;
Procedure valjakkrozkocku;
Forward;
Procedure isjecaklopte;
Forward;
Procedure uslov;
Forward;
{procedura koja izracunava volumena valjka}
Procedure valjak;
Begin V3:=(sqr(R1))*Pi*L;
END;
{kraj procedure koja izracunava volumen valjka}
{Procedura kojom unosimo podatke}
Procedure unospodataka;
Begin
Writeln ('Unesite duzinu stranice kvadra - a =');
Readln (a);
Writeln ('Unesite sirinu stranice kvadra - b =');
Readln (b);
Writeln ('Unesite visinu stranice kvadra - c =' );
Readln (c);
Writeln ('Unesite dimenziju stranice kocke - d =');
Readln (d);
Writeln ('Unesite dimenziju poluprecnika valjka - R1 =');
Readln (R1);
Writeln ('Unesite dimenziju duzine valjka - L =');
Readln (L);
Writeln ('Unesite dimenziju poluprecnika lopte -R2 =');
Readln (R2);
END;
{Kraj procedure kojom unosimo podatke}
{Procedura koja izracunava volumen kvadra}
Procedure kvadar;
Begin V1:=a*b*c;
END;
{Kraj procedure koja izracunava volumen kvadra}
{procedura koja izracunava volumen kocke}
Procedure kocka;
Begin V2:=d*d*d;
END;
{kraj procedure koja izracunava volumen kocke}
{procedura koja izracunava volumen lopte}
Procedure lopta;
Begin V4:=(4/3)*R2*R2*R2*Pi;
END;
{procedura koja izracunava volumen valjka u kvadru}
Procedure odsjecakvaljka;
Begin V5:=(sqr(R1))*Pi*(a/2);
END;
{kraj procedure koja izracunava volumen valjka}
{procedura koja izracunava volumen valjka kroz kocku}
Procedure valjakkrozkocku;
Begin V6:=(sqr(R1))*Pi*d;
END;
{kraj procedurekoja izracunava volumen valjka kroz kocku}
Procedure isjecaklopte;
Begin V7:=(2/3)*(sqr(R2))*Pi*(R2-(sqr(R2)-sqr(R1)));
End;
{kraj procedure koja izracunava volumen isjecka lopte}
{procedura koja provjerava uslove}
Procedure uslov;
Begin (L>d+0.5*a);
END;
{kraj procedure koja provjerava uslove}
{procedura koja izracunava ukupan volumen tijela}
Procedure tijelo;
Begin V=V1+V2+V3+V4-V5-V6-V7;
END;
{kraj procedure koja izracunava ukupan volumen tijela}
Writeln('ZADATAK:');
WRITELN('Zadano je slozeno tijelo koje se sastoji od kvadra, kocke, lopte i valjka. Valjak zadire u kvadar, prolazi kroz kocku i naslanja se na loptu. Program ce izracunati volumen tog tijela.');
Writeln();
Writeln ('IZRADA');
:povratak;
unospodataka;
IF uslov=true THEN go to povratak ELSE goto nastavak;
:nastavak;
valjak;
kvadar;
kocka;
lopta;
odsjecakvaljka;
valjakkrozkocku;
isjecaklopte;
tijelo;
WRITELN('Volumen tijela je = ', tijelo);
READLN;
END.
Imam zadatak za seminarski rad, a stvarno nemam 3 čiste o programiranju.. bila bih vrlo zahvalna ako bi mi netko pomogao riješpiti zadatak
Zadatak: Napišite program koji ispisuje tekst, tj. izvorni kod programa u Pascalu, iz jedne datoteke u drugu datoteku tako da sve ključne riječi napišete velikim slovima.