Második pótzh megoldásai
1. feladat: Írjunk egy olyan histMod(v,a,b) nevű függvényt, melynek első bemenete v, egy sorvektor és többi bemenete (ha van) akkor pozitív valós számok. Ha egy bemenettel hívtuk meg, akkor rajzolja ki a képernyőre ábrázolja hisztogramon v elemeinek eloszlását, ha három bemenettel akkor dobja ki v elemei közül az a-nál kisebbeket és a b-nél nagyobbakat, majd a megmaradt elemekből készítse el a hisztogramot. A függvénynek ne legyen kimenete.
function histMod(v,a,b) if nargin==1 hist(v) elseif nargin==3 v=v(v>a & v<b); hist(v) end
2. feladat: Írjunk egy olyan feldolgozE(s) nevű függvényt, amelynek bemenete egy sztring, amely egy Excel fájl neve. Ebben a fájlban három oszlopban vannak adatok: az elsőben a személyek nevei, a másodikban a születési dátum éééé.hh.nn. formátumban, a harmadikban a személy neme (F vagy N betű). A függvény írja ki a képernyőre, hogy összesen hány ember adatait tartalmazza az Excel fájl, és ebből hány legfeljebb 50 éves nő van. A függvénynek ne legyen kimenete.
function feldolgozE(s) [~, ~, minden]=xlsread(s); osszesember=size(minden,1); no50=0; for i=1:osszesember ev = str2double(minden{i,2}(1:4)); ho = str2double(minden{i,2}(6:7)); nap= str2double(minden{i,2}(9:10)); % 2018. dec. 13-án van az zh if minden{i,3}=='N' && ev< 2018-50 no50=no50+1; elseif minden{i,3}=='N' && ev==2018-50 && ho > 12 no50=no50+1; elseif minden{i,3}=='N' && ev==2018-50 && ho==12 && nap>=13 no50=no50+1; end end fprintf('A fájlban %d ember adati vannak, ezek közül %d személy 50 évnél nem idősebb nő\n',osszesember, no50);
3. feladat: Írjunk egy olyan duplaMs(s) függvényt, amelynek a bemenete egy sztring, amely egy magyar nyelvű szöveget tartalmaz. A függvény számolja meg, hogy összesen hány kétbetűs (dz, gy, ly, ny, sz, ty, zs) mássalhangzó van s-ben ez a szám legyen a függvény kimenete.
function osszes=duplaMs(s) osszes=0; % Fapados megoldás: % for i=1:length(s)-1 % if (s(i)=='d' && s(i+1)=='z') ||... % (s(i)=='g' && s(i+1)=='y') ||... % (s(i)=='l' && s(i+1)=='y') ||... % (s(i)=='n' && s(i+1)=='y') ||... % (s(i)=='s' && s(i+1)=='z') ||... % (s(i)=='t' && s(i+1)=='y') ||... % (s(i)=='z' && s(i+1)=='s') % osszes=osszes+1; % end % end %% % Trükkösebb megoldás erdekes=['dz'; 'gy'; 'ly'; 'ny'; 'sz'; 'ty'; 'zs']; for i=1:length(s)-1 osszes=osszes+sum(sum([s(i) s(i+1)]==erdekes,2)>1); end
4. feladat: Írjunk egy garzonD(c) nevű függvényt, amelynek bemenete egy cell típusú mátrix, amelyről tudjuk, hogy lakások adatait tartalmazza. A mátrix első oszlopában a cím található sztringként, másodikban a lakás mérete négyzetméterben számként megadva, a harmadikban az ára forintban. A függvény számolja meg hány 30 nm-nél kisebb lakás van, amelynek ára meghaladta a 20 millió forintot. A kimenet ezen lakások száma legyen.
function ki=garzonD(c) ki=0; for i=1:size(c,1) if c{i,2}<30 && c{i,3}>2e7 ki=ki+1; end end
5. feladat: Írjunk olyan romaiSzam(n) nevű függvényt, amelynek bemenete egy pozitív egész szám, amely legfeljebb 19 lehet. A függvény készítse el sztringként a szám római számjegyekkel leírt alakját, legyen ez a kimenet.
function ki=romaiSzam(n) ki=[]; if n>9 ki=['x',ki]; n=n-10; end if n==9 ki=[ki 'ix']; return end if n>=5 ki=[ki 'v']; n=n-5; end if n==4 ki=[ki 'iv']; elseif n==3 ki=[ki 'iii']; elseif n==2 ki=[ki 'ii']; elseif n==1 ki=[ki 'i']; end %% % Fapados megoldás: 19 elágazásos if-elseif
Szorgalmi feladat: Írjunk olyan romaiSzam2(s) nevű függvényt, amelynek bemenete egy sztring, amely egy pozitív egész szám római számjegyekkel szabályosan leírt alakja (ez a szám legfeljebb 19 lehet). A függvény készítse el uint8 típusú változóként a szám arab számjegyekkel leírva, legyen ez a kimenet. Ha s nem egy szabályosan leírt szám, akkor ezt ismerjük fel, és adjunk vissza hibaüzenetet.
function ki=romaiSzam2(s) for i=1:19 if strcmp(romaiSzam(i),s) ki=uint8(i); return end end error('Ez nem egy szabályos alakban írt 1 és 19 közötti szám')