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')