background image

 

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

 

background image

 

 

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. 

 

background image

 

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

 

background image

 

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.