1
Wszelkie prawa do zada
ń
, plików i instrukcji s
ą
zastrze
ż
one, nikt poza prowadz
ą
cymi zaj
ę
cia i studentami IA
na AGH nie ma prawa ich wykorzystywa
ć
. A tych co maj
ą
takie prawa, prosz
ę
, aby nie umieszczali ich w innym
miejscu w sieci.
funkcje
Funkcje to równie
ż
pliki o rozszerzeniu m tylko w odró
ż
nieniu od skryptów funkcje
przyjmuj
ą
argumenty przy wywołaniu i zwracaj
ą
warto
ś
ci przy wyj
ś
ciu.
Przypomnienie:
Nazwy plików powinny zaczyna
ć
si
ę
od litery i powinny zawiera
ć
tylko litery/cyfry i znak ‘_’.
Nazwy plików powinny by
ć
1. ró
ż
ne od nazw zmiennych, które wyst
ę
puj
ą
w funkcji
2. ró
ż
ne od nazw funkcji zdefiniowanych standardowo w Matlabie
Funkcje si
ę
wywołuje poprzez podanie jej nazwy.
Zad 1. Prosz
ę
napisa
ć
funkcj
ę
, która znajduje si
ę
na powy
ż
szym rysunku. Prosz
ę
wywoła
ć
funkcj
ę
z poziomu Commad Window:
fun(10)
a=fun(10)
A=fun(0:0.1:1)
Wszystkie skrypty i funkcje maj
ą
by
ć
zapisane w dowolnym folderze nale
żą
cym do
Pa
ń
stwa.
function [<arg_wy1> <arg_wy2> ...] =nazwa_funkcji>(<arg_we>)
Nazwa pliku to nazwa funkcji
2
Zmienne wyst
ę
puj
ą
ce w funkcjach s
ą
lokalne w funkcji i nieprzechowywane w przestrzeni
roboczej Matlab’a. Nie s
ą
te
ż
widziane przez inne funkcje czy skrypty.
Zmienne utworzone w przestrzeni roboczej Matlab’a nie s
ą
z kolei dost
ę
pne w ciele funkcji.
Mo
ż
na jednak uczyni
ć
zmienn
ą
globaln
ą
. Słu
ż
y do tego polecenie global zmienna;
function [.....]=fun(....)
global a1 a2 a3;
.....
% koniec funkcji
w przestrzeni roboczej/skrypcie
global a1 a2 a3;
a1=....
a2=.....
a3=.....
Zad 2. Prosz
ę
napisa
ć
skrypt, który losuje liczb
ę
z zakresu od 0-1. Je
ś
li warto
ść
wylosowanej
liczby b
ę
dzie wi
ę
ksza ni
ż
0.5 skrypt ma wywoła
ć
funkcj
ę
orzel, w przeciwnym wypadku wykonuje
polecenie reszka.
a) Funkcja orzel ma wypisywa
ć
tekst „wylosowano orła” funkcja resztka wypisuje tekst
„wylosowano reszk
ę
”.
function
orzel
disp(
'wylosowano orła'
);
Jak wida
ć
nie jest to jeszcze typowe zastosowanie funkcji – nie ma parametrów wej
ś
ciowych, ani
wyj
ś
ciowych.
Sprawd
ź
czy program działa poprawnie.
b) Prosz
ę
, dopisa
ć
instrukcje, tak aby:
- program zapytał ile razy ma by
ć
losowanie i wykonał to losowanie i komentowanie nkrotnie -
czyli tyle razy ile kto
ś
wcze
ś
niej sobie za
ż
yczył.
c)
dopisz do wszystkich plików – skryptu głównego i do obu funkcji dwie zmienne globalne:
ilo
ść
_o, ilo
ść
_r;
W funkcji orzel licznik ilo
ść
_o zwi
ę
ksza si
ę
o jeden, a w funkcji reszka licznik ilo
ść
_r zwi
ę
ksza
si
ę
o jeden.
W głównym programie po zako
ń
czeniu p
ę
tli komputer wypisuje ile było reszek, a ile orłów.
3
d) Zmie
ń
w funkcji orzeł napis na informacj
ę
kto wygrywa - je
ś
li jest wi
ę
ksza ilo
ść
orłów, to
w funkcji orzeł jest napis „brawo orły”, a je
ś
li jest wi
ę
cej reszek to mamy napis „orły do
boju”. Komentarz dla remisu te
ż
b
ę
dzie mile widziany.
TERAZ prosz
ę
skopiowa
ć
funkcje orzel, reszka i program główny do innego folderu. Prosz
ę
wyrzuci
ć
wszystkie funkcje globalne i tak poprawi
ć
program, wykorzystuj
ą
c parametry wej
ś
ciowe
oraz parametry wyj
ś
ciowe funkcji, aby algorytm działał tak samo jak poprzedni.
Zad 3. Prosz
ę
napisa
ć
skrypt, który losuje do wektora W o długo
ś
ci 10 000 liczby z zakresu od
[1:100] ( W=floor(rand(1,10000)*100)+1).
Ten skrypt powinien wywoływa
ć
5 funkcji w nast
ę
puj
ą
cy sposób
ile_parz=fun1(W);
[sum srednia] =fun2(W);
Itp.;
za pomoc
ą
p
ę
tli for, …..
A) Napisz funkcj
ę
, która sprawdza ile jest liczb parzystych w tym wektorze ( warunek – reszta
z dzielenia przez 2 jest równa 0).
B) Napisz drug
ą
funkcj
ę
, która obliczy sum
ę
i
ś
redni
ą
wszystkich wylosowanych liczb
C) Napisz trzeci
ą
funkcj
ę
, która obliczy sum
ę
i
ś
redni
ą
tych liczb, które s
ą
podzielne przez 3
D) Napisz czwart
ą
funkcj
ę
, która znajdzie warto
ść
maksymaln
ą
i minimalna w
ś
ród liczb, które
s
ą
podzielne przez 5.
E) Napisz pi
ą
t
ą
funkcj
ę
, która znajdzie warto
ść
maksymaln
ą
i minimalna w
ś
ród liczb, które s
ą
podzielne przez warto
ść
wysłan
ą
do funkcji jako parametr wej
ś
ciowy.
REKURENCJA
albo rekursja (z łac. recurrere, przybiec z powrotem) to w programowaniu
odwoływanie si
ę
funkcji do samej siebie.
function s=silnia(n)
% Obliczanie silni metod
ą
rekurencyjn
ą
if n==1
s=1;
else
s=n*silnia(n-1);
end
Zad 5. Poni
ż
ej zdefiniowany jest ci
ą
g. Napis funkcj
ę
, która oblicza warto
ść
ci
ą
gu dla pewnej
liczby za pomoc
ą
rekurencji.
= 1 = 1
−
∗ > 1
4
Zad 6. Napisz funkcj
ę
, która wyznaczy za pomoc
ą
rekurencji kolejny wyraz ci
ą
gu Fibonacciego.
Prosz
ę
napisa
ć
kolejn
ą
funkcj
ę
, która wyznaczy kolejny wyraz ci
ą
gu Fibonacciego za pomoc
ą
iteracji.
Prosz
ę
wróci
ć
do poprzedniej instrukcji i wykona
ć
te zadania, które jeszcze nie zostały zrobione.