Monthly Archives: February 2018

Pascal: Dodatne teme

U danasnjoj lekciji obradjujemo teme koje se nisu nasle na dnevnom redu. To su Setovi, grananje sa upotrebom Case Of, i rad sa greskom uz Try-Except konstrukciju. Obzirom da nisu esencijalne, dacemo samo osnovne primere za svaki pristup. Ako vam se bas dopadnu, uvek ih mozete bolje upoznati preko preporucenih sajtova.

1) Case Of

U ranijem textu o kontroli toka programa, obradili smo if/then komande, koje se generalno najvise koriste u razlicitim programskim jezicima. U Pascalu postoji i elegantna Case Of konstrukcija, pomocu koje mozemo proveriti vise mogucnosti odjednom. Pogledajmo primer sa pogadjanjem brojeva.

program CaseOf;

var
b:integer;

begin
b := 0;
while (b<>35) do begin
write('Unesite broj od 1 do 70: ');
readln(b);
case (b) of
1..34 : begin writeln;
writeln('Trazeni broj je veci'); writeln;
end;
36..70 : begin writeln;
writeln('Trazeni broj je manji'); writeln;
end;
35 : begin writeln;
writeln('Cestitamo, pogodili ste broj');
readln; end;
else begin writeln;
writeln('Broj mora biti izmedju 1 i 70'); writeln;
end; end;
end;
end.

U ovom primeru najpre smo definisali uslov za izvrsenje programa i zatrazili unos broja koji zatim proveravamo kroz nekoliko mogucnosti. U prvom slucaju broj je manji, u drugom veci, u trecem tacan dok else opcija daje odgovor u koliko korisnik nije sledio uputstva. Za Case-Of konstrukciju Else deo nije neophodan. Vise o mogucnostima Case Of pogledajte ovde i ovde.

2) Try-Except

Ovde se radi o dobroj praxi provere mogucnosti rada, da ne bi doslo do nekontrolisanog izlaska iz programa. Uvek je pametnije kontrolisati izlaz uz planirani output, nego prepustiti greske slucaju. U tom smislu za jednostavan a koristan primer, upotrebicemo nas prethodni program. Najpre pokrenite program CaseOf koji smo upravo probali, i umesto punog broja unesite decimalni broj ili neko slovo. Videcete da se program jednostavno zatvorio sam od sebe. Ono sto se zapravo desava je da ocekivani unos mora biti integer tipa, i u svakom drugom slucaju dolazi do greske koja nekontrolisano zatvara program. Sada cemo preraditi prethodni primer da hvata ovu gresku i daje odgovor.

program TryExcept;
uses
sysutils;
var
a:boolean;
b:integer;

begin
b := 0;
while (b<>35) do begin
write('Unesite broj od 1 do 70: ');
try //pokusaj citanja b
a := true; readln(b);
except //ako dodje do greske
writeln;
writeln('Neophodno je da unesete integer');
writeln; a := false; end;
case (b) of
1..34 : begin writeln;
writeln('Trazeni broj je veci'); writeln;
end;
36..70 : begin writeln;
writeln('Trazeni broj je manji'); writeln;
end;
35 : begin writeln;
writeln('Cestitamo, pogodili ste broj');
readln; end;
else begin
if a then begin writeln;
writeln('Broj mora biti izmedju 1 i 70'); writeln;
a := false; end; end; end;
end;

end.

Najpre smo ucitali unit sysutils, koji je neophodan za rad sa sistemskim greskama. Nakon toga smo organizovali tok programa kao u prethodnom slucaju, uz hvatanje greske prilikom unosa varijable b. Ako do nje dodje, umesto izlaska iz programa, pokrece se alternativni kod koji salje poruku, dok program nastavlja sa izvrsavanjem. Kontrolni boolean omogucava elegantniji nastavak programa jer preskace nepotrebnu finalnu poruku u slucaju sistemske greske. Vise o Try-Except pogledajte ovde i ovde.

Inace, Lazarusov forum je odlicno mesto za nalazenje resenja kada je Pascal u pitanju.

Advertisements
%d bloggers like this: