Osnove programiranja IIOsnove programiranja II
Biometrija & računalništvoUL, Biotehniška fakulteta, Oddelek za zootehniko
31.3.2005 Programiranje II 2
Ponovitev pojmov
• Program
• Programiranje
• Spremenljivka
• Polje
31.3.2005 Programiranje II 3
Osnovni ukazi (oz. stavki)
• Ukaz –“definiramo nekaj nekam, da naj računalnik nekaj naredi”
• Štirje tipi ukazovprireditve in (aritmetični) izrazipogojni stavki in vejitve zankefunkcije & klici funkcij
31.3.2005 Programiranje II 4
Prireditve in izrazi
spremenljivka = izraz
priredi lahko je konstanta,spremenljivka,
aritmetični izrazlahko tudi element polja
31.3.2005 Programiranje II 5
Pogojni stavki in vejitve
• Če je izpolnjen pogoj, se izvedejo eni ukazi, sicer pa drugi
• Dve obliki:IF-THENIF-THEN-ELSE
31.3.2005 Programiranje II 6
Sintaksa ukaza IF-THEN
IF <pogoj> THEN<ukaz_1>;
<naslednji_ukaz>;
IF <pogoj> THEN DO;<ukaz_1>;<ukaz_2>;…END;
<naslednji_ukaz>;
blok ukazov
31.3.2005 Programiranje II 7
Pomen ukaza IF-THEN
• Če je pogoj izpolnjen, potem ukaz_1; in za njim naslednji_ukaz;
• Če pogoj ni izpolnjen, samo naslednji_ukaz;
31.3.2005 Programiranje II 8
IF-THEN
Vstop
Izhod
Preveritev pogoja
Ukaz_1
DANE
Naslednji_ukaz
31.3.2005 Programiranje II 9
Primer ukaza IF-THEN
IF (spr > 12) THENspr = spr / 2;
spr = spr * 2;
V: Kakšen je rezultat, če ima pred tem sprvrednost 12, in kakšen, če ima vrednost 18?
O: _____________
31.3.2005 Programiranje II 10
Sintaksa ukaza IF-THEN-ELSE
IF <pogoj> THEN<ukaz_A>;
ELSE<ukaz_B>:
<naslednji_ukaz>;
Pomen ukaza:Če je pogoj izpolnjen, potem ukaz_A; ,
sicer ukaz_B; in za tem naslednji_ukaz;
31.3.2005 Programiranje II 11
IF-THEN-ELSE
Vstop
Izhod
Preveritev pogoja
Ukaz_A
DANE
Ukaz_B
Naslednji_ukaz
31.3.2005 Programiranje II 12
Primer ukaza IF-THEN-ELSE
IF (spr > 12) THENspr = spr / 2;
ELSEspr = spr * 2;
spr = spr + 5;
V: Kakšen je rezultat, če ima pred tem sprvrednost 12, in kakšen, če ima vrednost 18?
O: _____________
31.3.2005 Programiranje II 13
Zanke
• Tri vrste zank:
NaštevalneDO WHILEDO UNTIL
31.3.2005 Programiranje II 14
Naštevalna zanka
Vstop
Izhod
Ukazi
DA
NE
31.3.2005 Programiranje II 15
Naštevalna zanka
vsota=0;DO i = 1 TO 7 BY 1;
vsota = vsota + vektor[i]END;
V: Kakšen je rezultat, če imamo vektor={3,7,2,8,-1,0,5}?
O: _____________
i se samodejno spreminja
31.3.2005 Programiranje II 16
Sintaksa ukazov DO WHILEin DO UNTIL
DO WHILE <pogoj> <ukaz_1>;<ukaz_2>;
END;<naslednji_ukaz>;
DO UNTIL <pogoj> <ukaz_1>;<ukaz_2>;
END;<naslednji_ukaz>;
31.3.2005 Programiranje II 17
Pomen ukazov DO WHILEin DO UNTIL
• DO WHILE Dokler je pogoj izpolnjen, izvajaj ukaz_1; in ukaz_2; znova in znova; potem pa izvedi naslednji_ukaz;
• DO UNTIL Dokler pogoj ni izpolnjen, izvajaj ukaz_1; in ukaz_2; znova in znova; potem pa izvedi naslednji_ukaz;
31.3.2005 Programiranje II 18
DO WHILE
Vstop
IzhodPreveritev pogoja
Ukaz_1DA
NE
Naslednji_ukaz
Ukaz_2
31.3.2005 Programiranje II 19
DO UNTIL
Vstop
IzhodPreveritev
pogoja
Ukaz_1
DANE
Naslednji_ukaz
Ukaz_2
31.3.2005 Programiranje II 20
Primer zanke DO WHILE
i = 1;vsota=0;DO WHILE (i <= 7);
vsota = vsota + vektor[i];i = i + 1;
END;
V: Kakšen je rezultat, če imamo vektor={3,7,2,8,-1,0,5}?
izvaja se dokler je tole res
31.3.2005 Programiranje II 21
Primer zanke DO UNTIL
i = 1;vsota=0;DO UNTIL (i > 7);
vsota = vsota + vektor[i];i = i + 1;
END;
V: Kakšen je rezultat, če imamo vektor={3,7,2,8,-1,0,5}?
izvaja se dokler se tole ne izpolni oz. dokler ni res
31.3.2005 Programiranje II 22
Funkcije in klici funkcij
• Včasih neko operacijo pogosto uporabljamo
• Zato to operacijo “zapakiramo” v nekaj, čemur pravimo funkcija ali podprogram
• Za funkcije velja, da lahko …
31.3.2005 Programiranje II 23
Za funkcije velja, da lahko:
• Enak problem rešimo enkrat in to rešitev večkrat uporabimo ->posplošitev ali abstrakcija
• Obsežno opravilo razdelimo na več manjših opravil ->modularizacija
• Ne zanima nas, kako se problem reši, samo, da se reši ->zakrivanje ali enkapsulacija
31.3.2005 Programiranje II 24
Pojem “Črne škatle”
• Ne zanima nas, kaj se dogaja znotraj funkcije
• Kot uporabnika pa nas zanimakako pristopiti k funkciji: njeno ime, kaj potrebuje, kaj dobimo nazajkako rokovati s funkcijo: kam postaviti funkcijo, kaj se bo zgodilo, ko funkcija zaključi delo, kako vpliva na okolje
31.3.2005 Programiranje II 25
Podpis funkcije
• Odgovori na vprašanje, kako pristopiti k funkciji
• Sestavljajo joIme funkcijeParametriRezultat
31.3.2005 Programiranje II 26
Pogodba funkcije
• Odgovori na vprašanje, kako rokovati s funkcijo
• Ureja razmerje med ustvarjalcem (programerjem) funkcije in tistim, ki funkcijo uporablja (uporabnikom)
31.3.2005 Programiranje II 27
Elementi pogodbe
• Opis (Desc:) – kaj funkcija počne
• Parametri (Parms:) – katere vhodne parametre potrebuje funkcija
• Rezultati (Result:) – kaj dobimo ven
• Predpogoj (Pre:) – kaj mora biti izpolnjeno, da bo funkcija pravilno delovala
31.3.2005 Programiranje II 28
Elementi pogodbe (nadalj.)
• Popogoj (Post:) – obvezuje ustvarjalca funkcije in je izpolnjen, če je predpogoj izpolnjen in če funkcija pravilno deluje
• Okolje (Env:) – kako delovanje funkcije vpliva na okolje
31.3.2005 Programiranje II 29
Sledenje programu
• Določimo točke sledenja –v njih potem opazujemo vrednosti spremenljivk med izvajanjem programa
• Vrste sledenjaročnoz izpisovanjemz razhroščevalnikom (debugerjem)
31.3.2005 Programiranje II 30
Primer sledenja programa
i = 1;vsota=0;DO WHILE (i <= 7);
vsota = vsota + vektor[i];i = i + 1;
END;
V: Sledi za primer, ko je vektor={3,7,2,8,-1,0,5}
A
BCD
V
Točk
e sl
eden
ja
31.3.2005 Programiranje II 31
Primer sledenja progr. (nadalj.) Točka sledenja vektor i vsota
V {3,7,2,8,-1,0,5} 1 /A {3,7,2,8,-1,0,5} 1 0B {3,7,2,8,-1,0,5} 1 3C {3,7,2,8,-1,0,5} 2 3B {3,7,2,8,-1,0,5} 2 10C {3,7,2,8,-1,0,5} 3 10B {3,7,2,8,-1,0,5} 3 12C {3,7,2,8,-1,0,5} 4 12B {3,7,2,8,-1,0,5} 4 20C {3,7,2,8,-1,0,5} 5 20…
31.3.2005 Programiranje II 32
Primer sledenja progr. (nadalj.) Točka sledenja vektor i vsota
B {3,7,2,8,-1,0,5} 6 19C {3,7,2,8,-1,0,5} 7 19B {3,7,2,8,-1,0,5} 7 24C {3,7,2,8,-1,0,5} 8 24D {3,7,2,8,-1,0,5} 8 24
…B {3,7,2,8,-1,0,5} 5 19C {3,7,2,8,-1,0,5} 6 19
Rezultat
31.3.2005 Programiranje II 33
Načrtovanje funkcije
• Funkcija = podprogram = del programa• Faze načrtovanja funkcije
Koncept ali načrtFormalizacija • Samo pisanje programa• Programski jezik (C, C++, Java, SAS …)
Preveritev delovanja• Sledenje
31.3.2005 Programiranje II 34
Primer pisanja funkcije
int SestejDoNic(int n)/* Desc: funkcija sešteva vsa števila od n do 0
Parms: celo število, do katerega sešteva
Result: ΣiPre: /Post: /Env: /
*/
podpis
pogodbai=0
n
31.3.2005 Programiranje II 35
Primer (nadalj.)
• Koncept: sešteva n + (n-1) + (n-2) + … + (n-n)
• Ideja: uporabili bomo števec, ki bo štel od n do 0 -> naštevalno zankoštevec odštevapotrebujemo začetno vsoto -> spremenljivkosproti prištevamo števila delni vsoti
31.3.2005 Programiranje II 36
Primer (nadalj.)
int SestejDoNic(int n) {int DelnaVsota = 0;DO i = n TO 0 BY -1;
DelnaVsota = DelnaVsota + i;END;RETURN DelnaVsota;
}
31.3.2005 Programiranje II 37
Sledenje funkciji
• Postavite točke sledenja• Sledite funkciji za klic
SestejDoNic(3)SestejDoNic(0)SestejDoNic(-1)
• Pri zadnjem klicu se zanka ne ustavi ->• Dopolniti moramo pogodbo
31.3.2005 Programiranje II 38
Popravek pogodbe
int SestejDoNic(int n)/* Desc: funkcija sešteva vsa števila od n do 0
Parms: celo število, do katerega sešteva
Result: ΣiPre: (n >= 0)Post: /Env: /
*/
i=0
n
31.3.2005 Programiranje II 39
Isti primer – malo drugače
int SestejDoNic (n) {IF (n = 0) THEN
RETURN 0;ELSE
RETURN n + SestejDoNic (n-1);}
rekurzija = ko funkcija uporablja samo sebe
31.3.2005 Programiranje II 40
Isti primer – še malo drugače
int SestejDoNic (n) {IF (n = 0) THEN
RETURN 0;ELSE
zacasno = SestejDoNic (n-1);RETURN n + zacasno;
}
31.3.2005 Programiranje II 41
Sledimo funkciji …
int SestejDoNic (n) {IF (n = 0) THEN
RETURN 0;ELSE
zacasno = SestejDoNic (n-1);RETURN n + zacasno;
}
A
B
CD
31.3.2005 Programiranje II 42
Sledenje funkciji
SestejDoNic(2)
SestejDoNic(1)
SestejDoNic(0)
točka sl. n zacasno
točka sl. n zacasno
točka sl. n zacasno
C 2 /A 2 /
C 1 /
A 1 /
A 0 /B 0 /
rezultat = 0rezultat = 1
D 1 0rezultat = 3
D 2 1
I.
II.
III.
IV.