You are on page 1of 40

PRIMJENA INENJERSKIH

SOFTVERSKIH PAKETA
Doc. dr. Emir Skeji
Kratak pregled
(1) Funkcije
(2) Relacijski i logiki operatori
(3) Kontrola toka programa
2
Korisniki definirane funkcije
Funkcije izgledaju ba kao skripte, ali s JEDNOM razlikom
Funkcije moraju imati deklaraciju
Help datoteka
Deklaracija funkcije
Ulazi Izlazi
3
Korisniki definirane funkcije
Oblik deklaracije funkcije
Nema potrebe za return: Matlab vraa varijable ija se
imena podudaraju sa onima u deklaraciji funkcije
Doseg varijabli: Bilo koja varijabla kreirana unutar funkcije
a koja se ne vrati, nestaje nakon to se funkcija prestane
izvravati
function [x, y, z] = funName(in1, in2)
Mora postojati rezervisana
rije: function
Ime funkcije bi trebalo biti
isto kao i ime m-datoteke
Ako postoji vie od jednog izlaza,
moraju biti u uglastim zagradama
Ulazi moraju biti specificirani
4
Funkcije: overloading
Ve su poznate funkcije
zeros
size
length
sum
Pogledajte help datoteku za funkciju size ukucavajui
help size
U help datoteci opisano je nekoliko naina da se pozove ova
funkcija
D = SIZE(X)
[M,N] = SIZE(X)
[M1,M2,M3,...,MN] = SIZE(X)
M = SIZE(X,DIM)
5
Funkcije: overloading
Matlab funkcije su openito preoptereene (engl. overloaded)
Mogu primiti promjenljiv broj ulaza
Mogu vratiti promjenljiv broj izlaza
ta bi vratile sljedee naredbe:
a=zeros(2,4,8); % n-dimenzionalne matrice su OK
D=size(a)
[m,n]=size(a)
[x,y,z]=size(a)
m2=size(a,2)
Vlastite funkcije mogu se preopteretiti pomou promjenljivih
ulaznih i izlaznih argumenata (vidi varargin, nargin,
varargout, nargout)
Iskoristite prednosti preoptereenih metoda da biste va kd
uinili preglednijim!
6
Funkcije: Vjeba 1
Uzmite skriptu koju smo napisali za izraun ukupnog broja
bodova studenta i pretvorite je u funkciju
Ulazi trebaju biti
vektor-red scores
vektor-red weights, iste duine kao i scores
Izlaz treba biti
Skalar: ukupan broj bodova (overall score)
Pretpostavite da korisnik poznaje ulazna ogranienja (nema
potrebe provjeravati da li su ulazi u ispravnom
formatu/veliini)
Funkciji dajte ime overallScore.m
7
Funkcije: Vjeba 1
8
Funkcije: Vjeba 2
Skriptna datoteka sabiranje.m
clear all
clc
a=input('Upii prvi broj -> ');
b=input('Upii drugi broj-> ');
fprintf('Suma prvog i drugog broja iznosi: %g\n',
suma(a,b))
Funkcijska datoteka suma.m
function y=suma(a,b)
% rauna sumu dva broja
y=a+b;
Rezultati u komandnom prozoru nakon pokretanja skriptne
datoteke:
Upii prvi broj -> 5
Upii drugi broj-> 7
Suma prvog i drugog broja iznosi: 12
9
Funkcije: Vjeba 3
Funkcija za pronalaenje najveeg elementa vektora X
10
Funkcije: Vjeba 4
Napisati funkciju sa sljedeom deklaracijom:
function plotSin(f1)
U funkciji, nacrtati sinusni talas s frekvencijom f1, na
intervalu [0,2]:
Za postizanje dobrog uzorkovanja koristiti 16 taaka po
periodu.
( )
1
sin f x
0 1 2 3 4 5 6 7
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
11
Funkcije: Vjeba 4
Napisati funkciju sa sljedeom deklaracijom:
function plotSin(f1)
U funkciji, nacrtati sinusni talas s frekvencijom f1, na
intervalu [0,2]:
Za postizanje dobrog uzorkovanja koristiti 16 taaka po
periodu.
U m-datoteci spremljenoj kao plotSin napisati sljedee:
function plotSin(f1)
x=linspace(0,2*pi,f1*16+1);
figure
plot(x,sin(f1*x))
( )
1
sin f x
12
Funkcije: Vjeba 5
Napisati funkciju sa sljedeom deklaracijom:
function m = dijagonala(x)
Funkcija uzima vektor x i vraa matricu m izgraenu na
sljedei nain:
svi rubni elementi matrice su jednaki 1
sporednu dijagonalu submatrice ine elementi vektora x.
Funkciju implementirati bez petlji.
Primjer poziva funkcije:
>> m = dijagonala([4 1 10 8 5])
m =
1 1 1 1 1 1 1
1 0 0 0 0 5 1
1 0 0 0 8 0 1
1 0 0 10 0 0 1
1 0 1 0 0 0 1
1 4 0 0 0 0 1
1 1 1 1 1 1 1
13
Funkcije: Vjeba 5
Napisati funkciju sa sljedeom deklaracijom:
function m = dijagonala(x)
Funkcija uzima vektor x i vraa matricu m izgraenu na
sljedei nain:
svi rubni elementi matrice su jednaki 1
sporednu dijagonalu submatrice ine elementi vektora x.
Funkciju implementirati bez petlji.
14
function m = dijagonala(x)
m = ones(length(x)+2);
m(end-1:-1:2,2:end-1) = diag(x);
dijagonala.m
Kratak pregled
(1) Funkcije
(2) Relacijski i logiki operatori
(3) Kontrola toka programa
15
Relacijski operatori
Matlab veinom koristi standardne relacijske operatore
jednako ==
nije jednako ~=
vee od >
manje od <
vee ili jednako >=
manje ili jednako <=
Logiki operatori normalni bitwise
And & &&
Or | ||
Not ~
Xor xor
Ako su svi true all
Ako je bilo koji true any
Boolean vrijednosti: nula je la (false), nenulta vrijednost je istina
(true)
Vidi help . za detaljniji popis operatora
16
Vjeba: Relacijski operatori
1 3 2
2 5 4
A
(
=
(

6 3 3
1 5 2
B
(
=
(

>> A>=B
ans =
0 1 0
1 1 1
>> A>2
ans =
0 1 0
0 1 1
>> A~=B
ans =
1 0 1
1 0 1
17
Vjeba: Logiki operatori
1 3 2
A=
2 5 4
(
(

6 3 3
B=
1 5 2
(
(

>> A>2&B<3
ans =
0 0 0
0 0 1
>> ~(A<3)
ans =
0 1 0
0 1 1
>> A&A>2
ans =
0 1 0
0 1 1
18
Kratak pregled
(1) Funkcije
(2) Relacijski i logiki operatori
(3) Kontrola toka programa
19
if/else/elseif
Osnovna kontrola toka, zajednika svim jezicima
Matlab sintaksa je pomalo jedinstvena
IF
if cond
naredbe;
end
ELSE
if uslovni_izraz
naredbe1;
else
naredbe2;
end
ELSEIF
if cond1
naredbe1;
elseif cond2
naredbe2;
else
naredbe3;
end
Nema potrebe za zagradama: blokovi naredbi su izmeu
rezervisanih rijei
Uslovni izraz (conditional
statement): evaluira se
kao true ili false
20
switch, case i otherwise
Naredba switch u Matlabu izvrava grupu instrukcija ili
naredbi na osnovu vrijednosti varijable ili izraza. To je vrsta
naredbe za kontrolu izbora (engl. selection control
statement) koja postoji u najmodernijim imperativnim
programskim jezicima.
Kljune rijei case i otherwise oznaavaju i razdvajaju
blokove naredbi. Izvrava se samo prvi case za koji je
ispunjen uslov. Za zavretak naredbe switch obavezno se
koristi end.
21
switch, case i otherwise
Sintaksa je:
switch switch_expr
case case_expr
statement
...
case {case_expr1,case_expr2,case_expr3,...}
statement
...
otherwise
statement
...
end
MATLAB switch se ne procesira u potpunosti. Ako je prvi case
iskaz istinit, ostali case iskazi nee se izvravati. Dakle, break
iskazi nisu potrebni.
22
Vjeba: switch, case i otherwise
Izvriti odreeni blok kda ako je string 'boja' postavljen na:
boja = 'ruiasta';
switch lower(boja)
case {'crvena', 'svijetlocrvena', 'ruiasta'}
disp('Boja je crvena')
case 'plava'
disp('Boja je plava')
case 'bijela'
disp('Boja je bijela')
otherwise
disp('Nepoznata boja')
end
Matlab-ov odgovor je:
Boja je crvena
>> 23
for
for petlje: koristiti za konaan broj iteracija
MATLAB sintaksa:
for n=1:100
naredbe;
end
Varijabla petlje
se definira kao vektor
je skalar unutar bloka naredbi
ne mora imati uzastopne vrijednosti (ali je obino jasnije
ako su uzastopne)
Blok naredbi
Bilo ta izmeu for i end
Varijabla petlje
Blok naredbi
24
while
while je vrsta petlje gdje se:
ne mora znati broj iteracija
Blok naredbi e se izvravati sve dok je logiki izraz taan
Vodite rauna da ne kreirate beskonanu petlju!
WHILE
while logicki_izraz
naredbe;
end
25
Vjeba 1: Kontrola toka
Napisati funkciju koja rauna faktorijel cijelog broja N
koritenjem petlje (moete koristiti for ili while petlju). Ako
je ulaz manji od 0, vratiti NaN. Testirati je koristei
nekoliko vrijednosti.
function a = factorial(N)
if N<0
a=NaN;
else
a = 1;
for k=1:N
a = a*k;
end
end
No, imajte na umu da je factorial() ve implementiran!
Trebate vidjeti da li postoje ugraene funkcije prije nego
to se odluite da neto sami implementirate.
which factorial
26
Vjeba 2: Kontrola toka
Napisati funkciju FtoC(donja,gornja,korak) koja pretvara
temperaturu iz stepena Fahrenheita u stepene Celsiusa.
Funkcija prima tri argumenta i daje tabelarni prikaz
temperatura u opsegu od donja do gornja sa korakom
korak.
Funkcija nema povratnih argumenata.
Tabelarni prikaz temperatura formatirati tako da svaka
vrijednost temperature ima dva decimalna mjesta.
Formula za konverziju glasi
C =
5
9
(F 32)
27
Vjeba 2: Kontrola toka
Napisati funkciju FtoC(donja,gornja,korak) koja pretvara
temperaturu iz stepena Fahrenheita u stepene Celsiusa.
Funkcija prima tri argumenta i daje tabelarni prikaz temperatura u
opsegu od donja do gornja sa korakom korak.
Funkcija nema povratnih argumenata.
Tabelarni prikaz temperatura formatirati tako da svaka vrijednost
temperature ima dva decimalna mjesta.
Formula za konverziju glasi
C =
5
9
(F 32)
function FtoC(donja,gornja,korak)
fahr = donja;
fprintf('%6s\t%6s\n','Fahr.','Cels.');
while (fahr <= gornja)
cels = 5/9 * ( fahr - 32 );
fprintf('%6.2f\t%6.2f\n',fahr,cels);
fahr = fahr + korak;
end
28
Vjeba 3: Kontrola toka
Ispisati trougao zvjezdica u n redova
n = input('Unesite broj redova: ');
for ii = 1:n,
for jj = 1:ii,
fprintf('*');
end
fprintf('\n');
end
29
Vjeba 4: Kontrola toka
Odrediti broj pozitivnih brojeva u vektoru
x = input('Unesite vektor: ');
count = 0;
for ii = 1:length(x)
if (x(ii) > 0)
count = count + 1;
end
end
fprintf('Broj pozitivnih vrijednosti
u vektoru je %d\n', count);
30
Vjeba 5: Kontrola toka
Odrediti indeks najveeg broja u vektoru
x = input('Unesite vektor: ');
max_vr = x(1);
max_indeks = 1;
for ii = 2:length(x)
if (x(ii) > max_vr)
max_vr = x(ii);
max_indeks = ii;
end
end
fprintf('Maks. vrijednost je %d\n', max_vr);
fprintf('Indeks maks. vrijednosti je %d\n',
max_index);
ta ako se maksimalna vrijednost pojavi vie od
jednom?
31
Vjeba: Uslovni izrazi
Modificirajte funkciju plotSin(f1) tako da prima dva
ulaza: plotSin(f1,f2)
Ako je broj ulaznih argumenata 1, izvrite naredbu plot
koju ste ranije napisali. U suprotnom, ispiite liniju teksta
'Zadali ste dvije ulazne vrijednosti'
Uputa: Broj ulaznih argumenata je u ugraenoj varijabli
nargin
32
Vjeba: Uslovni izrazi
Modificirajte funkciju plotSin(f1) tako da prima dva ulaza:
plotSin(f1,f2)
Ako je broj ulaznih argumenata 1, izvrite naredbu plot koju ste
ranije napisali. U suprotnom, ispiite liniju teksta 'Zadali ste
dvije ulazne vrijednosti'
Uputa: Broj ulaznih argumenata je u ugraenoj varijabli nargin
function plotSin(f1,f2)
x=linspace(0,2*pi,f1*16+1);
figure
if nargin == 1
plot(x,sin(f1*x));
elseif nargin == 2
disp('Zadali ste dvije ulazne vrijednosti');
end
33
Naredba break
Naredba break u MATLAB-u se koristi za izlazak iz petlje
for ili while iskaza, to jest, prekida izvravanje petlje.
Pretpostavimo da je potrebno izraunati vrijednost izraza
k
2
Su za sve cijele brojeve u intervalu [-10,10], ali samo
dok je k
2
Su u.
% Petlja ispod ce izracunavati vrijednosti izraza
% k^2-50 za sve vrijednosti trazenog k sve dok
% izraz ne postane negativan
for k=-10:1:10
if (k^2-50<0)
break;
end
val=k^2-50;
fprintf('\n k=%g val=%g',k,val);
end
34
Naredba continue
Naredba continue u MATLAB-u se koristi za prosljeivanje
kontrole na sljedeu iteraciju u for i while iskazima.
Pretpostavimo da je potrebno izraunati i ispisati vrijednost
izraza k
2
Su za sve cijele brojeve u intervalu [-10,10], ali
samo ako je k
2
Su > u.
% Petlja ispod ce izracunati i ispisati
% vrijednosti izraza k^2-50 za sve vrijednosti
% trazenog k za koje je k^2-50 pozitivno.
for k=-10:1:10
if (k^2-50<0)
continue;
end
val=k^2-50;
fprintf('\n k=%g val=%g',k,val);
end
35
try/catch
Kada imate iskaze u kdu koji mogu dati neeljene
rezultate, stavite ih u try-catch blok koji e "uhvatiti"
greke i obraditi ih na prikladan nain.
Primjer ispod prikazuje try-catch blok unutar funkcije koja
mnoi dvije matrice:
function pomnoziMatrice(A, B)
try
X = A * B
catch
disp '** Greka pri mnoenju A * B'
end
36
try/catch
try-catch blok je podijeljen u dvije sekcije. Prva sekcija
poinje sa try a druga sa catch. Blok se zavrava sa end:
Sve naredbe u segmentu try se izvravaju normalno,
kao da se radi o regularnom kdu. Meutim, ako bilo
koja od ovih operacija rezultira grekom, MATLAB
preskae preostale iskaze u try segmentu i skae na
catch segment bloka.
Segment catch rukuje grekom. U ovom primjeru,
prikazuje optu poruku o greki. Ako postoje razliite
vrste greaka koje se mogu dogoditi, moete utvrditi do
koje je greke dolo i reagirati na tu specifinu greku.
Takoer, moete pokuati da ispravite greku u catch
sekciji.
37
Evaluacija stringa: eval
Funkcija eval interpretira stringove koji sadre Matlab
izraze
Definirati izraz ili funkciju kao string
>> var35 = 'xseven(5)';
>> x = 'sin(n)';
Evaluirati s funkcijom eval
>> thirtyfive = eval(var35)
thirtyfive =
35
>> n = 1;
>> y = eval(x)
y =
0.8415
Funkcija eval uitava cijeli komandni interpreter
function y = xseven(x)
y=x*7;
end
xseven.m
38
Evaluacija stringa: feval
Neke funkcije kao ulazni argument uzimaju ime druge
funkcije, koja je specificirana kao string
Funkcijski stringovi mogu biti direktno evaluirani
Funkcija feval uitava samo ono to je potrebno time je i
bra
Ulazi funkcije su zasebni argumenti
Primjeri
>> sample35 = feval('xseven',5)
sample35 =
35
>> n = 1;
>> x = 'sin(n)';
>> z = feval('asin', eval(x))
z =
1
39
Kraj predavanja 4
(1) Funkcije
(2) Relacijski i logiki operatori
(3) Kontrola toka programa
Nadam se da nije bilo
previe!
40

You might also like