You are on page 1of 21

Uvod u programiranje - matematika VII predavanje

Vesna Velikovid vesna@pmf.ni.ac.rs

Potprogrami
Potprogram opisuje neki postupak i daje mu ime. Potprogrami u Pascalu su procedure, funkcije. Potprogrami slue da se jedan deo programa izdvoji u zasebnu celinu koja se zatim moe jednom ili vie puta koristiti. Upotreba potprograma olakava pisanje programa i mnogo povedava njegovu itljivost.

Ulazne i izlazne veliine


Potprogrami sa ostatkom programa komuniciraju preko ulaznih i izlaznih veliina. Funkcije imaju tano jednu izlaznu veliinu. Procedure imaju proizvoljan broj izlaznih veliina (nula ili vie).

Izlaz iz funkcije
Funkcija opisuje postupak izraunavanja jedne vrednosti. Ime funkcije oznaava izlaznu vrednost.

function suma (x,y,z:real) : real; begin <izraunavanje sume> suma := <izraunata vrednost> end;

Struktura programa u Pascalu


Deklaracija programa Deklaracija labela Definicija konstanti Definicija tipova Deklaracija promenljivih Deklaracja potprograma begin <naredbe> end .

blok

Deklaracija potprograma
Deklaracija procedure procedure <ime> [ <lista prarametara> ] ; <blok> ; Deklaracija funkcije function <ime> [ <lista parametara> ] : <tip> ; <blok> ; Lista parametara ( <parametar> { ; <parametar>} ) Parametar [ var ] <ime> { , <ime> } : <tip>

Parametri i argumenti
Potprogrami mogu imati parametre koji mogu biti ulazni izlazni ulazno / izlazni. Pri pozivu potprograma se svakom parametru dodeli odgovarajudi argument. Argumenti slue za komunikaciju potprograma sa blokom iz koga su pozvani.

Parametri i argumenti
Parametar ulazni izlazni ili ulazno/izlazni parametar po vrednosti parametar promenljiva Argument izraz promenljiva sintaksa nema var ima var

Oblast vaenja promenljive


Promenljiva postoji unutar bloka u kome je deklarisana. Dozvoljeno je proizvoljno ugnjedavanje potprograma (potprogram unutar potrograma). Uvek vai unutranja deklaracija.

Lokalne promenljive
Promenljiva je lokalna u bloku u kome je deklarisana. Na poetku izvravanja bloka u kome je deklarisana, lokalna promenljiva je nedefinisana, tj. nema dodeljenu vrednost. Upotreba nedefinisane promenljive prouzrokuje graku. Parametar po vrednosti predstavlja jednu lokalnu promenljivu. Razlikuje se od ostalih lokalnih promenljivih po tome to na poetku izvravanja potprograma ima poetnu vrednost koja je jednaka vrednosti odgovarajudeg argumenta.

Globalne promenljive
Promenljiva je globalna za sve potprograme koji su deklarisani unutar bloka u kome je deklarisana ta promenljiva. Parametar promenljiva se u proceduri ponaa kao globalna promenljiva. On predstavlja upravo onu promenljivu koja mu u pozivu procedure odgovara kao argument.

program primer; var i:integer; x:real; function prva (n:integer) : boolean; var k:integer; i,a:real; begin // Postoje i,n,k:integer; i,a,x:real; // i:real je lokalna promenljiva. Globalna promenljiva i:integer nije dostupna end; procedure druga (m:integer); var n:integer; procedure treca (x:char); var b:boolean; begin // postoje i,m,n:integer; x:char; b:boolean; // Globalna promenljiva x:real nije dostupna. end; begin // postoje i,m,n:integer; x:real; // n:integer je lokalna za proceduru druga, a globalna za proceduru treca end; begin // postoje i:integer; x:real; end.

Poziv potprograma
Procedura se poziva kao samostalna naredba tako to se navede njeno ime i lista argumenata. Funkcija se poziva u okviru nekog izraza tako to se navede njeno ime i lista argumenata. Lista argumenata treba da odgovara po broju, tipu i redosledu listi parametara iz deklaracije odgovarajudeg potprograma.

program ProstBroj; var n : integer; function prost (n:integer) : boolean; var koren : real; k : integer; begin koren := trunc(sqrt(n)); k := 2; while (k <= koren) and (n mod k <> 0) do k := k + 1; if k > koren then prost := true else prost := false end; begin write ('n = '); read (n); if prost (n) then writeln ('Broj je prost') else writeln ('Broj nije prost') end.

Odtampati sve proste brojeve u opseg u od m do n kod kojih je suma kvadrata cifara deljiva sa datim brojem k. prost broj suma kvadrata izdvajanje cifara deljivost sa k.

program zadatak; var m, n, k,i : integer; .....// potprogrami begin write(m=); read (m); write(n=); read (n); write(k=); read (k); for i := m to n do if uslov (i) then wtireln (i) end.

function uslov (broj : integer) : boolean; begin if Prost (k) and UslovZaCifre (k) then uslov := true else uslov := false end;

alternativa:
uslov := Prost (k) and UslovZaCifre (k)

function prost (n:integer) : boolean; var koren : integer; k : integer; begin koren := trunc(sqrt(n)); k := 2; while (k <= koren) and (n mod k <> 0) do k := k + 1; if k > koren then prost := true else prost := false end;

function UslovZaCifre (broj, k : integer) : boolean; var S : integer; begin S := Suma (broj);

if S mod k =0 then UslovZaCifre := true else UslovZaCifre := false end;

function Suma (broj : integer) : integer; var S : integer; begin S := 0; repeat cifra := broj mod 10; broj := broj div 10; S := S + sqr(cifra) until broj = 0; Suma := S end;

Napomena
U Pascal-u vai pravilo da sve to se upotrebi mora predhodno biti definisano. O tome treba voditi rauna kod pisanja potprograma.

You might also like