GIMNAZIJA
AKTUELNO
Forum
SAJTOVI
ZANIMLJIVO
Većina programskih jezika je veoma fleksibilna po pitanju načina na koji ćete napisati kod. Međutim nadolazeći problemi mogu da se u mnogome ublaže ako vodite računa o načinu pisanja koda.
uses crt; var i:integer; begin for i:=1 to 100 do write(i:8) end;
U PASCAL-u je dozvoljen ovakav način pisanja programa. Gornji kod ispisuje tabelu brojeva od 1 do 100 po deset u jednom redu.
Sem otežanog dešifrovanja ovog koda, glavna mana ovakvog načina pisanja se pokazuje u procesu dibagiranja (traženja logičkih grešaka) jer kada izvršavate program red po red, tada se izvrši nekoliko naredbi odjednom te ne vidimo u kojoj je nastala greška.
Primer na kome ćemo pokazati ovaj stil je sortiranje tri uneta broja.
uses crt;
var a,b,c:integer;
begin
readln(a);
readln(b);
readln(c);
IF a>=b
THEN IF a>=c
THEN IF b>=c
THEN writeln('Redosled je : ',a,' ', b,' ',c)
ELSE writeln('Redosled je : ',a,' ', c,' ',b)
ELSE writeln('Redosled je : ',c,' ',a,' ',b)
ELSE IF b>=c
THEN IF a>=c
THEN writeln('Redosled je : ',b,' ',a,' ',c)
ELSE writeln('Redosled je : ',b,' ',c,' ',a)
ELSE writeln('Redosled je : ',c,' ',b,' ',b);
Delay(300);
END.
U slučaju bilo kakve logičke greške, stvarno treba imati dobre živce da bi se sa ovako napisanim kodom izišlo na kraj. Potpuno je nejasno koji THEN i ELSE pripadaju kojem IF-u. Niti se vide parovi THEN, ELSE. Slični su problemi i kada su ciklusi ugnježdeni jedan u drugom.
Ovo je jedan od načina kako je potrebno pisati kodove. Sve sintakse izvršnih naredbi date su u skladu sa strukturalnim stilom pisanja. Pri tome je značajno da broj mesta koja se upotrebljavaju da bi se deo koda uvukao odgovara sintaksi i nivou ugnježdavanja.
Prethodni primer ćemo sada npisati strukturalno:
USES Crt;
VAR a,b,c:Integer;
BEGIN
Write('Unesite prvi broj : ');
Readln(a);
Write('Unesite drugi broj : ');
Readln(b);
Write('Unesite treci broj : ');
readln(c);
IF a>=b
THEN IF a>=c
THEN IF b>=c
THEN writeln('Redosled je : ',a,' ', b,' ',c)
ELSE writeln('Redosled je : ',a,' ', c,' ',b)
ELSE writeln('Redosled je : ',c,' ',a,' ',b)
ELSE IF b>=c
THEN IF a>=c
THEN writeln('Redosled je : ',b,' ',a,' ',c)
ELSE writeln('Redosled je : ',b,' ',c,' ',a)
ELSE writeln('Redosled je : ',c,' ',b,' ',b);
Delay(300);
END.
Ovde je u potpunosti jasno koji delovi ugnježdenih IF-THEN-ELSE naredbi kome odgovaraju. Olakšan je pronalazak logičkih grešaka.
Evo i primera dobro napisanog koda kada su ciklusi jedan u drugom.
VAR i, j, k:Char;
BEGIN
FOR i := 'a' TO 'z' DO
FOR j := 'a' TO 'z' DO
FOR k := 'a' TO 'z' DO
write(i+j+k:4);
END.
SAVET: Kako bi se problemi u pisanju koda sveli na minimum korisni je koristiti sledeća uputstva: