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 -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].