Második zárthelyi megoldások

1. feladat: Írjon egy olyan relevansAtlag(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 a függvény adja vissza a v elemeinek átlagát, ha két bemenettel akkor a v elemi közül az a-nál kisebb abszolút értékűek átlagát, ha három bemenettel az a v elemei közül a és b közé eső értékűek átlagát.

function ki=relevansAtlag(v,a,b)

if nargin==1
    ki=mean(v); %A csoportban minden mean helyett length kell
elseif nargin==2
    ki=mean(v(-a>v & v<a));
elseif nargin==3
    ki=mean(v(a<v & v<b));
end

2. feladat: Írjon 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 testsúlyok kilogrammban, a harmadikban a magasság centiméterben. 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ánynak van a testtömegindexe (testsúly kg/ (méterben vett magasság négyzete)) 18 alatt és hány embernek 25 felett. A függvénynek ne legyen kimenete.

function feldolgozE(s)

szamok=xlsread(s);

bmi=szamok(:,1)./szamok(:,2).^2*1e4;
kicsi=length(bmi(bmi<18));
nagy=length(bmi(bmi>25));
osszes=size(szamok,1);
fprintf('Összesen %d ember adatai vannak a feldolgozott fájlban\n',osszes);
fprintf('Ebből %d embernek 18 alatti a testtömegindexe\n',kicsi); % A csoport
fprintf('Ebből %d embernek 25 feletti a testtömegindexe\n',nagy); % B csoport

3. feladat: Írjon 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 hány 'gy' betű található a szövegben, ez darabszám legyen a függvény kimenetele.

function ki=duplaMs(s)

ki=0;
for i=1:length(s)-1
    if s(i)=='g' % B csoport: 't'
        if s(i+1)=='y'
            ki=ki+1;
        end
    end
end


4. feladat: Írjon egy olyan skalazE(v,a) nevű függvényt, melynek bemenete egy oszlopvektor, amely uint8 típusú számokat tartalmaz és második bemenete a egy valós lebegőpontos szám. A kimenet legyen egy olyan lebegőpontos számokat tartalmazó vektor, amelyben v elemei vannak a-val megszorozva.

function ki=skalazE(v,a)

ki=double(v)*a;

5. feladat: Írjon egy realisAr(c,m) nevű függvényt, amelynek bemenete c egy cell típusú mátrix, m pedig egy pozitív valós szám. c-rő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ünk számolja ki lineáris regresszió (azaz legkisebb négyzetes értelemben legjobban közelítő egyenes) segítségével, hogy mennyi lenne egy m négyzetméteres lakás reális ára ezen adatok alapján.

function ki=realisAr(c,m)

lakasokszama=size(c,1);
meret=zeros(lakasokszama,1);
ar=zeros(lakasokszama,1);

for k=1:size(c,1)
    meret(k)=c{k,2};
    ar(k)=c{k,3};
end

ehok=polyfit(meret,ar,1); % B csoport: polyfit(meret,ar,2)
ki=polyval(ehok,m);

    

Szorgalmi feladat. A Caesar-féle titkosírás egyik változatában nem eggyel, hanem egy tetszőleges számmal toljuk el az üzenetben szereplő betűket. Készítsen el egy olyan caesarKod(s,n) nevű függvényt, amelynek bemenetei: s a kódolandó üzenet sztringként (erről felteheti, hogy angol nyelvű) és n egy pozitív egész szám amely legfeljebb 26 lehet, és azt fejezi ki, hogy mennyivel toljuk előre a betűket az ábécében. A kimenet legyen a kódolt üzenet sztringként. Segítség: caesarKod('Titkos uzenet', 5)-re a helyes kódolt üzenet: 'Ynyptx zejsjy'.

function v=caesarKod(s,n)

asciikod=double(s);

for i=1:length(asciikod)
    if 65 <= asciikod(i) && 90 >=asciikod(i)
       eltolt(i)=rem(asciikod(i)+n-65,26)+65;  
    elseif 97 <= asciikod(i) && 122 >=asciikod(i)
       eltolt(i)=rem(asciikod(i)+n-97,26)+97; 
    else
       eltolt(i)=asciikod(i);
    end
end

v=char(eltolt);