Hatodik labor: Gyakorló óra

1. feladat: Írjunk egy olyan szorzoTabla(n,m) nevű függvényt, melynek bemenete n és m pozitív egészek, és a kimenete egy mátrix, melynek elemei a $n\times m$-es szorzótábla értékei.

Első megoldás ciklussal

function ki=szorzoTabla(n,m)

ki=zeros(n,m);

for i=1:n
    for j=1:m
        ki(i,j)=i*j;
    end
end


Második megoldás diádszorzattal

function ki=szorzotabla2(n,m)

ki=(1:n)'*(1:m);

2. feladat: Írjunk egy olyan fibonacciSzorzat(n) nevű függvényt, melynek bemenete n pozitív egész, és a kimenete a Fibonacci-sorozat n-edik és n+1-edik tagjának szorzata. (A Fibonacci sorozat elsõ és második tagja 1, és minden elem az õt megelőző két elem összege.)

Első megoldás: a sorozat összes elemének tárolásával

function ki=fibonacciSzorzat2(n)

fsz=[1,1];
for i=3:n+1
    fsz(i)=fsz(i-1)+fsz(i-2);
end
ki=fsz(n)*fsz(n+1);

Második megoldás: a sorozat összes utolsó két elemeének tárolásával

function ki=fibonacciSzorzat(n)

aktualis=0;
kovetkezo=1;
for i=1:n
    osszeg=aktualis+kovetkezo;
    aktualis=kovetkezo;
    kovetkezo=osszeg;
end
ki=kovetkezo*aktualis;

3. feladat: Írjunk egy olyan idenJanuar(n) nevű függvényt, melynek bemenete n egy és 31 közötti pozitív egész, és kiírja, hogy idén január n-edike milyen napra esett.

function idenJanuar(n)

if mod(n,7)==1 
    fprintf('Hétfő\n');
elseif mod(n,7)==2 
    fprintf('Kedd\n');
elseif mod(n,7)==3 
    fprintf('Szerda\n');
elseif mod(n,7)==4 
    fprintf('Csütörtök\n');
elseif mod(n,7)==5 
    fprintf('Péntek\n');
elseif mod(n,7)==6 
    fprintf('Szombat\n');
else
    fprintf('Vasárnap\n');
end

4. feladat: Írjunk olyan idosebb(ev1, ho1, nap1, ev2, ho2, nap2) nevű függvényt, melynek bemenete 6 pozitív valós szám, melyek két ember születésnapját jelentik. A kimenet legyen 0, ha egyidősek, 1 ha az első ember idősebb, 2, hogy ha a második.

Első megoldás:

function ki=idosebb(ev1, ho1, nap1, ev2, ho2, nap2)

if ev1>ev2 
    ki=2;
elseif ev1<ev2 
    ki=1;
elseif ho1>ho2 
    ki=2;
elseif ho1<ho2 
    ki=1;
elseif nap1>nap2 
    ki=2;
elseif nap1<nap2 
    ki=1;
else
    ki=0;
end

Második megoldás:

function ki=idosebb2(ev1, ho1, nap1, ev2, ho2, nap2)

if ev1==ev2 && ho1==ho2 && nap1==nap2 
    ki=0;
elseif ev1==ev2 && ho1==ho2 && nap1<nap2 
    ki=1;
elseif ev1==ev2 && ho1<ho2
    ki=1;
elseif ev1<ev2 
    ki=1;
else
    ki=2;
end

5. feladat: Írjunk egy olyan hanyadikelem(v,n) nevű függvényt melynek első bemenete egy számokból álló sorvektor, a második egy valós szám. A függvény határozza meg, hogy hányadik helyen szerepel először v-ben n, a kimenet legyen ezen index. Ha nem szerepel n a vektorban, akkor a kimenet legyen -1.

function ki=hanyadikelem(v,n)

for i=1:length(v)
    if v(i)==n
        ki=i;
        return
    end
end

ki=-1;

6. feladat: Írjunk egy olyan csere(v,a,b) nevű függvényt, melynek 3 bemenete van: egy v vektor, és két valós szám: a és b. A függvény cserélje ki v minden a-val egyenlő elemét b-re.

function w=csere(v,a,b)

w=v;
w(w==a)=b;

7. feladat: Írjunk egy olyan szamolAtlag(v) nevŰ függvényt, amelynek bemenete egy sorvektor, amelyben valós számok vannak. A függvény kimenete legyen a v vektor 0 és -1 közé eső elemeinek összege.

function ki=szamolAtlag(v)

ki=mean(v(v>-1 & v<0));

8. feladat: Írjunk olyan mennyiDb(v) nevű függvényt amely meghatározza a bemenetként kapott v vektor páratlan indexű helyein lévő egész elemeinek számát.

function db=mennyiDb(v)

v=v(1:2:end);
db=sum(v==ceil(v));