Professional Documents
Culture Documents
Programiranje
Ova paleta omoguava pisanje "programa" tj. formiranje programskih regiona i bazirana je na
najosnovnijim konceptima svih programskih jezika. Ako ste prouavali prethodene module i shvatili
naina rada Mathcad-a onda bi, najprostije reeno, program u Mathcad-u bila funkcija (ili
promenljiva) za iju je definiciju potrebno vie koraka. Za razumevanje koritenja ove palete i
pisanje programa tj. vielinijskih funkcija je neophodno poznavanje funkcionisanja bilo kog
programskog jezika.
Uzmimo na primer, funkciju koja daje vrednost 1 ako je promenljiva T tj. temperatura manja od 23,
vrednost -1 ako je temperatura vea od 25 a 0 ako je temperatura izmeu 23 i 25. Jadan od
naina za definisanje ove funkcije je
Proverimo da li "radi"
T1 := termostat ( 10) T1 = 1
T2 := termostat ( 30) T2 = 1
T3 := termostat ( 24) T3 = 0
T4 := termostat ( 23) T4 = 0
T5 := termostat ( 25) T5 = 0
Ovo je primer gde pomenuta if funkcija moe da nam zada glavobolje pogotovo ako ima vei broj
logikih izraza. U takvim sluajevima je praktinije koristiti programsku paletu (primetite da u toj
paleti postoji operator if). Za formiranje ove funkcije preko programske palete potrebni su sledei
koraci
Sada dobijamo vertikalnu liniju sa dva plejsholdera. Ako ponovo izaberemo Add line dobiemo vei
broj plejsholdera. Svaki plejsholder predstavlja jednu liniju programa i pri pozivu ove funkcije se
izvravaju regioni u plejsholderima redom odozgo na dole. Ponete sa unosom od prvog pa kad
vam zatreba dodajte ih. Ako ih imate previe, briu sa sa tipkom BACKSPACE ili DELETE.
Formirajmo etiri plejsholdera i u te plejsholdere unosimo sledei program
Termostat( T) := R0
R 1 if T < 23
R 1 if T > 25
return R
T1 := Termostat( 10) T1 = 1
T2 := Termostat( 30) T2 = 1
T3 := Termostat( 24) T3 = 0
T4 := Termostat( 23) T4 = 0
T5 := Termostat( 25) T5 = 0
Nota Primetite prvu liniju R 0 . Ovo je dodela vrednosti promenljivoj tj. promenljiva R dobija
vrednost 0. Meutim, dodelu vrednosti promenljivoj smo ve spomenuli i to je operator :=. U
programskom regionu se za dodelu vrednosti koristi operator iz programske palete (strelica ulevo)
a ne :=. S druge strane ova dodela se zove "lokalna" jer vai samo u programskom regionu gde je
ta promenljiva definisana i nema veze sa promenljivom istog imena van ovog regiona. Na primer,
A := 10
C := A 100
return A
C = 100
A = 10
Vidite da definicija A (lokalna definicija) unutar definicje promenljive C nema nikakve veze sa A van
te definicije.
Druga i trea linija programa su dobijene izborom opratora if iz preogramske palete tj
if
Ovaj operator ima dva operanda i to je operator odluivanja. Levi plejsholder predstavlja izraz koji se
izvrava samo ako je logiki izraz u desnom plejsholderu taan.
Druga linija programa kae:"R dobija vrednost 1 ako je T manje od 23".
Trea linija programa k ae:"R dobija vrednost -1 ako je T manje vee od 25".
etvrta linija je dobijena izborom return iz programske palete (ne kucanjem slovo po slovo) operatot
ima jedan argument tj.
return
U plejsholder se unosi ime promenljive ili izraz iji se rezultat vraa kao rezultat poziva
funkcije. Ovaj operator se ne mora navesti ako funkcija vraa samo poslednje izraunat izraz tj.
u ovom sluaju smo umesto return R mogli samo ostaviti R jer bi vrednost ove promenljive bila
i vrednost koju vraa funkcija. Ipak je jasnije uvek koristiti operator return . to se tie
promenljivih, da jo jednom naglasimo, kao i ranije funkcija ima fiktivne argumente koji se pri
pozivu zamenjuju stvarnim argumentima.
Unutar programskog regiona se mogu definisati i lokalne promenljive. Promenljive koje nisu
fiktivni argimenti ili lokalne promenljive moraju biti prethodno definisane van regiona. Na primer,
prethodna funkcija bi mogla da se napie na sledei nain (varijacija na temu).
Tladno := 23
Ttoplo := 25
Termostat( T) := R "stoji"
R "ukljuen" if T < Tladno
return R
1. Ulazni podaci se dobijaju preko liste fiktivnih argumenata, lokalnih promenljvih i prethodno
definisanih promenljivih. U naem primeru je T fiktivna promenljiva, R lokalna promenljiva
(operator ), T ,T prethodno definisane promenljive
(operator ), Tladno, Ttoplo prethodno definisane promenljive
Nota Pogledajte iznad definiciju funkcije Termostat. Ima jedna neloginost (a moda i vie) a to je
da se ispituje promenljiva T dva puta tj. da li je T < 23 i da li je T > 25. Pa ako je T manje od 23
onda T sigurno nije vee od 25. Moe li to drugaije? Moe! Evo drugaije napisanog programa
koji radi istu stvar
Nota Moete komentare unositi pod navodnicima. Primetite da se u plejsholder moe ubaciti vie
linija, naravno sa Add line. Obratite panju na vizuelni efekat tj vertikalnu liniju ispod otherwise.
T1 := 23
T2 := 25
(
T1 := Termostat 10 , T1 , T2 ) T1 = "ukljuen"
(
T2 := Termostat 30 , T1 , T2 ) T2 = "iskljuen"
(
T3 := Termostat 24 , T1 , T2 ) T3 = "stoji"
T4 := Termostat( 23 , T1 , T2 ) T4 = "stoji"
(
T5 := Termostat 25 , T1 , T2 ) T5 = "stoji"
Nota Treba biti veoma obazriv jer se lako moe pogreiti. Struktura if u kombinaciji sa otherwise
se mora dobro shvatiti da bi se mogla koristiti. Najjednostavnije reeno, otherwise e se izvriti
ukoliko logiki izraz kod prvog if iznad othewise nije zadovoljen. Jedini nain je da se ovo isproba
na raznoraznim primerima.
5. Mathcad ima dve strukture ponavljanja for , while koje se dobijaju izborom for ili
-Struktura for slui za ponavljanje regiona unutar strukture odreen broj puta. Na primer,
programski napisana funkcija vektor koja vraa kao rezultat vektor ekvidistantnih vrednosti sa
maksimalnim indeksom niza broj poevi od vrednosti poc sa korakom korak
3
3.5
y := vektor( 5 , 3 , 0.5) y =
4
4.5
5
5.5
Sada da programski odradimo funkciju koja trazi srednju vrednost elemenata vektora
srednjav( v) := sr 0
for i 0 .. last( v)
sr sr + v
i
sr
sr
length ( v)
return sr
Nota Pre nego to se upustite u pravljenje funkcije, proverite da suajno ve takva funkcija ne
postoji u Mathcad-u
-Struktura while slui za ponavljanje odreenog regiona dok god je zadovoljen zadati logiki
uslov. Jasno je da uslov mora postati netaan unutar petlje da bi se iz petlje izalo. Na primer,
funkcija negativan daje kao rezultat vrednost prvog negativnog elementa vektora i njegov
negativan
indeks.
negativan ( vec) := j 0
while vec 0
j
j j +1
vecj
j
return
Iz ovog primera se vidi da se kao rezultat funkcije moe vratiti i vektor, odnosno matrica
0
3
z :=
5
6
2
9
5
3
rez := negativan ( z) rez =
0
3
negativan_1 ( vec) := for j 0 .. last( vec)
break if vec < 0
5
z :=
j
vecj 5
6
3
rez := negativan_1 ( z) rez =
return
j 2
9
Struktura for e se prekinuti (break) kad se zadovolji zadati uslov u if strukturi.
Veoma lako moemo da iskomplikujemo stvari (namerno ili sluajno). Na primer, elimo da
izraunamo proizvod elemanata vektora koji su razliiti od 0. Moemo to da uradimo programski,
odnosno
U proizvodu figuriu samo oni elementi vektora koji nisu jednaki 0. To se omoguava sa continue
kada je dati element vektora manji od nule tj. linija ispod continue sa ne izvrava ako je zadati
uslov taan ve for nastavlja da "vrti" (uzima sledee j). Ovo je poprilino jednostavan i
for
besmislen programski primer ali bi svi studenti, koji dobiju ovakav problem, napisali isti program
(nekako ispada da svi na isti nain razmisljaju). "Nezgodno" je to to se isti problem moe reiti
na razliite naine.
proiz 1
while j last( vec)
proiz proiz vec if vec 0
j j
j j +1
return proiz
if (vecj = 0 , 1 , vecj)
last( vec)
proiz_4( vec) := proiz proiz_4( z) = 1.62 10
3
j =0
return proiz
if (zj = 0 , 1 , zj)
last( z)
proiz_5 := proiz_5 = 1.62 10
3
j =0
Poslednji operator je operator on error koji omoguava da vam funkcija vrati neki rezultat kada bi
se u protivnom deslila nega greka koju Mathcad ne tolerie. Na ako podelite dva broja moete da
izaete van opsega najmanjeg i najveeg broja s kojim Mathcad barata. Da bi spreili Mathcad da
vam prijavi greku (utim pravougaonikom sa porukom) moete se koristiti operatorom on error da
vam se vrati eljeni rezultat u sluaju greke
1 10
5
Ovo je korisno kada elite da otkrijete greke koje inite pri pisanju programa tj. gde vam program
"puca" jer vam, u principu, Mathcad prijavi greku za ceo region koji cesto nije ni od kakve pomoi.
Pored toga moete i vi da odglumite Mathcad i da ubacite vae poruke kad se desi greka pomou
error funkcije
F( 5 ) =
Oni koji su pisali neki program u nekom programskom jeziku znaju da se u pisanju programa
veoma esto grei i znaju koliko je vano da programski jezik ima mogunosti detekcije i
prikazivanja gde su greke u programu. Ako u prethodnom primeru (ili u bilo kom pozivu koji
prijavljuje greku za programski napisane funkcije) kliknete desnim tasterom dobiete sledee
Tako da moete u definiciji funkcije da se prebacujete sa greke na greku (ako ih ima vie) i da
otkrijete "u kom zecu lei grm". Ovo dobro zvui, ali u praksi je poprilino nekorisno i Mathcad nije
ba najsjajniji na ovom polju.
Ukoliko niste obeshrabreni ovim "programiranjem" i imate potrebu da se time bavite u Mathcad-u moe vam
pomoi klasian sistem koji je prisutan u svim "ozbiljnim" programskim jezicima i zove se "debugger", odnosno
sistem za pronalaenje greaka (bubica, bagova) i koristi se kada program, funkcija "rade" ali ne daju dobre
rezultate. Za to je u Mathcadu zaduen Debug paleta
Evo prostih primera kako se ona koristi. Pogledajte definisanu funkciju ispod
f ( n ) := x0
for i 1 .. n
xi + x
2
trace( x)
return x
Nova funkcija koju nismo spomenuli je trace. Da bi smo videli emu ona slui, aktivirajmo tzv Trace window iz
menija View=>Trace Window ili aktiviranjem iz Debug palete.
Na dnu ekrana e se pojaviti Trace Window. Da bi smo videli emu slui trace funkcija omoguiemo da Trace
Window radi, tj pokrenuemo debagovanje opcijom iz menija Tools=>Debug=>Toggle Debugging ili
aktiviranjem iz Debug palete
Sada kada je Trace prozor otvoren i aktiviran debuger, pozivamo funkciju f(n)
f ( 5 ) = 55
Kako se trace funkcija nalazi u for petlji, ona e prikazati onu vrednost koja je u zagradi, a to je trenutna
vrednost promenljive x i ispisati tu vrednost u Trace prozor. Trace prozor je tekstualni prozor i njega moemo
da kopiramo delove ili sve iz njega da obriemo. Evo jo samo jednog primera gde smo malo promenili funkciju
da nam ispie i eljeni teskt na ekranu
f ( n ) := x0
for i 1 .. n
xi + x
2
f ( 6 ) = 91
Najei problem je kada se Mathcad "zakuca" odnosno kada vidite lampicu koja trepe
Mathcad je zastao kod nekog regiona (uokviren zelenim) i lampica koja trepe vam govori da on neto rauna.
Moda je proraun obiman ili je moda negde zabrljano. Kako ga prekinuti? Jenostavno pritisnite ESC i
dobiete pitanje na ekranu
Moete ga zaustaviti sa OK ili nastaviti dalje sa Cancel. Ukoliko ga zaustavite, region gde ste ga zaustavili e
pocrveneti i dobiete poruku
Jasno vam se kae da je proraun prekinut. Ako elite da se nastavi pritisnite F9.
Kako ovo zaustavljane moemo ostvariti u naem programu, funkciji? Umesto trace koristimo pause
funkcjiu. Evo korigovane prethodne funkcije (Debuger je aktiviran)
f ( n ) := x0
for i 1 .. n
xi + x
2
Kada ovu funkciju pozovemo, zaustavie se kad naleti na pause. Sada moemo da nastavimo (Resume)
Sve ovo nam slui da proverimo na odreenim mestima u programu gde sumnjamo da se neto pogreno
rauna trenutnim zaustavljanjem i prikazom rezultata u Trace prozoru. Kada otkrijemo gde je problem (treba
nam malo i sree za to) jednostavno izbriemo trace i pause linije.
Interesantna je ova primena kod numerikih prorauna, recimo kada traite nulu funkcije pomou root, moete
da vidite vrednosti u svakoj iteraciji, na primer
Ovde funkcija root poziva f(x) i pri tome prikazujete vrednosti x u svakoj iteraciji.
Nota Sve u svemu, Mathcad ne treba koristiti za komplikovane programski definisane funkcije.
Njegov programski deo je namenjen za kratke funkcije i jednostavnije probleme. Prihvatite se
programiranja jedino ako ste prinueni a i tada ako ste suoeni sa komplikovanim problemom
ralanite ga na vie jednostavnijih funkcija koje lake moete da kontroliete.
_____________________________________________________________________Kraj