Programiranje u Matlab-u

Matlab ima više alatki koje omogućavaju upravljanje tokom izvršavanja programa. Uslovni iskazi i struktura switch omogućavaju da se određene komande prekoče ili da se u različitim slučajevima izvršavaju različite grupe komandi. Petlje for i while omogućavaju da se izvršavanje određene grupe komandi ponovi više puta.

Jasno je da je za promenu toka izvršavanja programa potreban određeni postupak donošenja odluka. Računar mora da odluči da li da izvrši narenu komandu ili da preskoči jednu ili više i nastavi od nekog drugog reda u programu. Tome služe relacioni i logički operatori.

U programu se mogu koristiti i funkcijske datoteke, kao potprogrami. Kada program dođe do reda sa imenom funkcije, prosleđuje joj ulazne vrednosti, a zatim dobija rezultat funkcije.

Relacioni i logički operatori

Relacioni operator poredi dva broja i utvrđuje da li je iskaz istinit ili neistinit. Ako je istinit dobija vrednost 1 a ako ne vrednost 0. Logički operatori ispituju izraze čije vrednosti mogu biti true ili false, zavisno od operatora. Relacioni i logički operatori se mogu koristiti u matematičkim izrazima i često se upotrebljavaju u kombinacijama sa drugim operatorima pri donošenju odluka pomoću kojih se upravlja tokom izvršavanja programa.

Relacioni oparator Opis

< Manje od

> Vece od

<= Manje ili jednako od

>= Vece ili jednako od

== Jednako

~= Razlicito

Kada se porede dva broja rezultat je 1 ukoliko je istinit izraz poređenja, ili 0 ukoliko je neistinit. Kada se porede dve skalarne vrednosti, rezultat je takođe skalar, koji može biti 0 ili 1. Ako se porede dva niza (samo nizovi jednakih dimenzija), poređenje se obavlja element po element, a rezultat je niz jednakih dimenzija kao i izvorni nizovi, i sadtoji se od logičkih vrednosti (jedinica i nula), koje predstavljaju rezultat poređenja pojedinačnih elemenata nizova. Kada se skalarna vrednost poredi sa nizom, poredi se sa svakimelementom niza pojedinačno, a rezultat je niz čiji su elementi logičke jedinice i nule, koje odražavaju rezultate poređenja sa pojedinačnim elementima izvornog niza.

>> 5>8

ans =

0

>> a=5<10

a =

1

Logički operatori

Operator

Naziv

Opis

&

AND

Deluje na dva operanda. Ako oba imaju vrednost true, rezultat je true, u suprotnom false

|

OR

Deluje na dva operanda. Ako jedan ili oba imaju vrednost true, rezultat je true, kad su oba false, rezultat je false

~

NOT

Deluje na jedan operand, daje suprotnu vrednost

Operandi logičkih operatora su brojevi. Koriste se kao aritmetički operatori u matematičkim izrazima. Rezultat se može upotrebiti u drugim matematičkim operacijama, za adresiranje nizova, te u drugim komandama Matlab-a (if). Logički operatori se mogu primenjivati na skalare i nizove.

Operandi logičkih operatora AND i OR mogu biti ili skalari ili vektori ili kombinovano. Ako su oba skalari, rezultat je skalarna vrednost. Ako su oba operanda nizovi, moraju biti jednakih dimenzija, a logička operacija se odvija element po element. Rezultat je niz jednakih dimenzija kao izvorni nizovi, čiji su elementi logičke nule i jedinice. Ako je jedan operand skalarna vrednost, a drugi niz, logička operacija se obavlja nad skalarnom vrednošću i svim elementima niza pojedinačno.

NOT ima samo jedan operand. Kada se primeni na skalar daje rezultat nula ili jedan. Kada se primeni na niz, rezultat je niz jednakih dimenzija koji sadrži logičke jedinice na mestima gde izvorni niz sadrži brojeve različite od nule, a logičke nule na mestima gde izvorni niz sadrži nule.

Uslovni iskazi

To je komanda koja omogućava Matlab-u da odlučuje da li će izvršiti grupu komandi koja sledi iskazu ili će te komande preskočiti. U uslovnom iskazu morate zadati uslovni izraz. Ako je rezultat izraza true, izvršava se grupa komandi koja neposredno sledi iskazu. Ako je rezultat false, računar preskače tu grupu naredbi. Uslovni iskazi se mogu unositi u program napisan u skript datoteci ili u funkcijskoj datoteci.

Struktura if-end

image

Primer: Radnik je plaćen za određeni iznos po satu za rad do 40 sati, a prekovremeni rad se plaća 50% više. Napišite program u skript datoteci koji će obračunavati zaradu radnika. Program zahteva od korisnika da unese ukupan broh sati i iznos satnice, a zatim prikazuje ukupnu zaradu.

s=input(‘Unesite ukupan broj radnih sati ‘);

c=input(‘Unesite cenu satnice u dinarima ‘);

Zarada=s*c;

if s>40

Zarada=Zarada+(s-40)*0.5*c;

end

fprintf(‘Zarada radnika je \n %5.2f’,Zarada)

>> zarada

Unesite ukupan broj radnih sati43

Unesite cenu satnice u dinarima385.44

Zarada radnika je

17152.08

Struktura if-else-end

Ova struktura omogućava da se izabere izvršavanje jedne od dve moguće grupe komandi. Ako je vrednost iskaza true, program izvršava prvu grupu komandi između iskaza if i else, a zatim preskače ostale komande do iskaza end. Ako je vrednost izraza false, program preskače komande do iskaza else, a zatim izvršava komande koje se nalaze između else i end.

image

Iskaz switch-case

image

Izraz u komandi switch može biti vrednost ili znakovni niz. Najčešće je to promenljiva kojoj je dodeljena skalarna vrednost ili znakovni niz.

Vrednost izraza u komandi switch se poredi pojedinačno sa vrednošću zadatom u svakom iskazu case. Ako se vrednosti podudaraju, izvršava se grupa komandi iza odgovarajućeg iskaza case. Ako postoji više od jednog podudaranja, izvršava se samo prvi iskaz. Ukoliko nije pronađeno podudaranje i postoji iskaz otherwise, izvršava se ta grupa komandi. Ukoliko otherwise ne postoji ne izvršava se ni jedna grupa komandi.

Primer: Napišite program u skript datoteci koji količinu energije izraženu određenim jedinicama, džul (J), ft-lb, kalorija (cal) ili eV, preračunava u ekvivalentnu količinu u drugim jedinicama koje korisnik zada. Program najpre zahteva da korisnik zada količinu energije, tekuću jedinicu i novu ciljnu jedinicu. Rezultat je količina energije izražena u novim jedinicama.

Faktori konverzije su sledeći:

1J=0.738ft-lb=0.239cal=6.24×1018eV

Upotrebite program da bi ste preračunali sledeće vrednosti: a)150 J u ft-lb; b)2800cal u J; c) 2.7eV u cal.

Rešenje:

Ein=input(‘Upisite kolicinu energije koju cete konvertovati’);

EinUnits=input(‘Upisite tekuce jedinice (J, ft/lb, cal,eV):’,’s’);

EoutUnits=input(‘Upisite nove jedinice (J, ft/lb, cal,eV):’,’s’);

error=0;

switch EinUnits

case ‘J’

EJ=Ein;

case ‘ft/lb’

EJ=Ein/0.738;

case ‘cal’

EJ=Ein/0.239;

case ‘eV’

EJ=Ein/6.24e18;

otherwise

error=1;

end

switch EoutUnits

case ‘J’

Eout=EJ;

case ‘ft/lb’

Eout=EJ*0.738;

case ‘cal’

Eout=EJ*0.239;

case ‘eV’

Eout=EJ*6.24e18;

otherwise

error=1;

end

if error

disp(‘greska pri iyboru jedinica’)

else

fprintf(‘E=%g%s’,Eout,EoutUnits)

end

>> konverzijaenergije

Upisite kolicinu energije koju cete konvertovati2800

Upisite tekuce jedinice (J, ft/lb, cal,eV):cal

Upisite nove jedinice (J, ft/lb, cal,eV):J

E=11715.5J

Petlje

Petlje predstavljaju još jedan način da se upravlja tokom programa. U petlji se izvršavanje komande ili grupe komandi ponavlja više puta zaredom. Svako izvršavanje petlje zove se prolaz. U svakom prolazu se barem jednoj promenljivoj dodeljuje nova vrednost. Matlab podržava dve vrste petlji: for-end, i while-end.

Petlje for-end

Izvršavanje komandi se ponavlja zadati broj puta:

for k = f : s : t

……………

……………

end

k je indeksna promenljiva, f vrednost k u prvom prolazu, s korak povećanja nakon svakog prolaza, a t vrednost indeksne promenljive u poslednjem koraku. Ime promenljive koje se koristi kao indeks može biti proizvoljno. Ako nije zadata vrednost s, podrazumeva se da je 1. Ako su k, s i t takvi da k ne može biti jednako t, poslednji prolaz će se izvršiti kad k ima najveću vrednost manju od t. U komandi for se promenljivoj k mogu dodeliti određene vrednosti, npr. k=[7 9 -1 3 3 5]. Svakoj komandi for mora biti pridružena komanda end. Vrednost promenljive k se ne dodeljuje automatski. Primer:

for k=1:3:10

x=k^2

end

Kada se pokrene program, petlja se izvršava 4 puta.

Petlje while-end

Koriste se kada ukupan broj prolaza nije unapred poznat. Petlja se izvršava dok je ispunjen zadati uslov. Struktura petlje:

while uslovni izraz

……………

……………

end

Ukolilko je uslovni izraz false, prelazi se na end i nastavlja izvršavanje programa. Ukoliko je izraz true, izvršava se grupa komandi između while i end. Petlja se izvršava sve dok uslovni izraz ne dobije vrednost false. Uslovni izraz mora sadržati barem jednu promenljivu. Promenljive u uslovnom iskazu moraju imati poznate vrednosti kada se petlja prvi put izvršava. Komande između while i end moraju dodeljivati novu vrednost barem jednoj promenljivoj. Na primer:

x=1

while x <= 15

x=2*x

end

Mora se obezbediti da promenljiva u izrazu u nekom trenutku dobije vrednost false, inače će se petlja izvršavati beskonačno. Takav slučaj se može izbeći brojanjem prolaza i prekidanjem petlje ukoliko ukupan broj prolaza premaši određenu vrednost. Maksimalan broj prolaza se ugradi u uslovni izraz ili se upotrebi komanda break.

Komande break i continue

Kada se upotrebi unutar petlje, komanda break prekida izvršavanje petlji. Prelazi se na komandu end na kraju petlje i nastavlja izvršavanje prve naredne komande. Ako se komanda nađe unutar ugnježdene petlje, prekida samo izvršavanje uglježdene petlje. Ako se komanda nađe izvan petlje u skript datoteci ili funkcijskoj datoteci, prekida izvršavanje cele datoteke.

Komanda continue može se upotrebiti unutar petlje da bi se pri izvršavanju petlje prekinuo tekući prolaz i započeo naredni. Najčešće je deo uslovnog iskaza. Kada se naiđe na ovu komandu, ide se na komandu end kraja petlje a zatim prelazi na nov prolaz.

Advertisements