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.

function ki=szorzoTabla(n,m)
v=(1:n)';
w=(1:m);
ki=v*w;

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 azt megelőző két elem összege.)

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)==2 
    fprintf('Hétfő\n');
elseif mod(n,7)==3 
    fprintf('Kedd\n');
elseif mod(n,7)==4 
    fprintf('Szerda\n');
elseif mod(n,7)==5 
    fprintf('Csütörtök\n');
elseif mod(n,7)==6 
    fprintf('Péntek\n');
elseif mod(n,7)==0 
    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.

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

5. 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;

6. 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 átlaga.

function ki=szamolAtlag(v)

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

7. feladat: Írjunk egy elliP(a,b) nevű függvényt, amelynek két bemenete egy-egy pozitív valós szám. A függvény rajzolja ki a x(t)=a*cos(t), y(t)=b*sin(t) paraméteres görbét, ahol a t paraméter 0 és 2*pi között megy, majd mentse el a címmel ellátott ábrát egy jpg-fájlba. A függvénynek ne legyen kimenete.

function elliP(a,b)

t=linspace(0,2*pi);
plot(a*cos(t), b*sin(t))
title('Ellipszis')
saveas(gca,'ellipszis.jpg')

8. feladat: Írjon egy histMod(v,a,b) nevű függvényt, amely v bemenete egy sorvektor, a és b valós számok. A függvény dobja el v minden olyan elemét, amelynek értéke kevesebb mint a vagy több mint b, majd ábrázolja a megmaradt elemek eloszlását hisztogramon.

function histMod(v,a,b)

k=(v(v>a & v<b));
hist(k)

9. feladat: Adott egy xls fájl, melynek első oszlopában nevek vannak, a másodikban a születési dátumok éééé.hh.nn formátumban. Írjunk egy celKoz(s) nevű függvényt, melynek bemenete a fájl teljes neve sztringként, a kimenete pedig a 30 év feletti emberek száma a mai napon.

function darab=celKoz(s)

[~, szoveg, osszes]=xlsread(s);
darab=0;

for i=1:size(osszes, 1)
    ev = str2double(szoveg{i,2}(1:4));
    ho = str2double(szoveg{i,2}(6:7));
    nap= str2double(szoveg{i,2}(9:10));
    % 2019. márc. 13-án volt az óra
    if  ev< 2019-30
        darab=darab+1;
    elseif ev==2019-30 && ho < 3
        darab=darab+1;
    elseif ev==2019-30 && ho==3 && nap<=13
        darab=darab+1;
    end
end

10. feladat: Írjunk egy hazArak(s) nevű függvényt, amelynek bemenete egy szrting. Ez a sztring egy excel fájl neve, amelyről felteheti, hogy az aktuális munkakönyvtárban van. Az excel-táblázat soraiban eladó ingatlanok adatai találhatóak. Az első oszlopbanban az árak forintban, a második oszlopban az alapterület négyzetméterben, a harmadik oszlopban a szobák száma. A függvény kimenete legyen a 2 szobás ingatlanok átlag négyzetméterára. (Felteheti, hogy az xls fájlban csak számok vannak).

function atlagar=hazArak(s)

lakasok=xlsread(s);
ketszobas=lakasok(:,3)==2;
atlagar=mean(lakasok(ketszobas,1)./lakasok(ketszobas,2));


11. feladat: Írjunk olyan maganHangzo(s1) nevű függvényt amelynek bemenete egy s1 sztring és a függvény kimenete, hogy hány magánhangzó van s1-ben (csak az angol ábécé magánhangzóit ideértve).

function ki=maganHangzo(s1)

s=lower(s1);

ki=length(strfind(s,'a'))+length(strfind(s,'e'))+length(strfind(s,'i'))+length(strfind(s,'o'))+length(strfind(s,'u'))+length(strfind(s,'y'));

12. feladat: Adott egy csv fájl, amiben egy ismeretlen, egész számokból álló mátrix elemei vannak (a mátrix nem feltétlenül négyzetes). Írjunk egy olyan nagyNegyzet(s) nevű függvényt, amelynek bemenete a fájl neve sztringként. A függvény keresse meg azon 3*3-as négyzetet a mátrixon belül, amelyben a számok összege a legnagyobb. A kimenet legyen ezen négyzet bal felső sarkának két indexe.

function [ki1, ki2]=nagyNegyzet(s)

bemx=dlmread(s);

if size(bemx,1)<3 || size(bemx,2)<3
    error('Nem megfelelő bemenet')
end

ki1=1; ki2=1;
legnagyobbosszeg=sum(sum(bemx(1:3,1:3)));
for i=1:size(bemx,1)-2
    for j=1:size(bemx,2)-2
        if sum(sum(bemx(i:i+2,j:j+2)))>legnagyobbosszeg
            legnagyobbosszeg=sum(sum(bemx(i:i+2,j:j+2)));
            ki1=i;
            ki2=j;
        end
    end
end
    


13. feladat*: Írjunk egy flipP(A) nevű függvényt, amelynek bemenete egy négyeztes mátrix. A kimenet legyen ezen mátrix (1,n), (n,1) elemeket átmenő átlójára tükrözöttje.

function B=flipP(A)
n=size(A,1);
B=zeros(size(A));
% Az (1,n) és (n,1) átlótól vett távolság n+1-(i+j),
% Ezt kell hozzáadni a jelenlegi indexekhez
for i=1:size(A,1)
    for j=1:size(A,2)
            B(n+1-j,n+1-i)=A(i,j);
    end
end

Példa: flipP([1 2 3; 4 5 6; 7 8 9]) kimenete [9 6 3; 8 5 2; 7 4 1].