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