Contents
A for ciklus
A for egy bizonyos fajta ciklus: olyan program részlet, ami többször -a for ciklusnál- határozott számszor lefut. Például a múlt heti házifeladatban a for ciklus belseje 2^n-szer fut le. A ciklus belseje nem minden alkalommal teljesen azonosan fut le mert a ciklusváltozó minden lépésben a megadott vektor -itt ugye az 0:(2^length(be)-1)- közvetkező elemére lép.
function kimenet=reszhalmaz(be)
kimenet='';
for i=0:(2^length(be)-1)
maszk=logical(dec2bin(i,3)-'0');
%display(be(maszk))
kimenet=strcat(kimenet,"{",num2str(be(maszk)),"},");
end
end
Feltételek megadása programban.
Az if parancsal egy elágazást tehetünk a programba például az eldont függvény annyit csinál, hogy ha a bemenet nulla akkor kiírja, hogy "Nulla", ha nem akkor azt írja ki, hogy "Nem nulla"
function kimenet=eldont(szam)
if szam==0
kimenet="Nulla";
else
kimenet="Nem nulla";
end
end
Az eredményt természetesen elmentem az 'eldont.m'-be.
eldont(1)
ans =
"Nem nulla"
eldont(0)
ans =
"Nulla"
eldont(pi)
ans =
"Nem nulla"
Látjuk, hogy jól működik. Most módosítsunk egy kicsit a függvényen: Ha egyet írunk be akkor írja ki hogy "Egy". Ezt egy elseif közbeiktatásával tudjuk megtenni. Az elseif-et az if után az else elé fell írni.
function kimenet=eldont(szam)
if szam==0
kimenet="Nulla";
elseif szam==1
kimenet="Egy";
else
kimenet="Nem nulla";
end
end
eldont(1)
ans =
"Egy"
Az if most a következőképp működik: Ha az if utáni feltétel igaz akkor a következő blokk utasításait hajta végre. Ha nem igaz ellenőrzi (sorban egymás után) az elsif feltételeit ha valamelyik igaz, akkor az ott lévő blokkot végrehajtja, és kilép az if-ből (a többi feltételt már nem nézi meg).
Órai feladat
fejlesszük tovább az eldont függvényt úgy, hogy 0, 1, 2, 3, 4, 5-re is kiírja hogy milyen számot írtunk be, és ha nem ilyet írtunk be akkor írja ki hogy nem 0-tól 5-ig adtunk meg egész számot.
function kimenet=eldont2(szam)
if szam==0
kimenet="Nulla";
elseif szam==1
kimenet="Egy";
elseif szam==2
kimenet="Ketto"
elseif szam==3
kimenet="Harom"
elseif szam==4
kimenet="Negy"
elseif szam==5
kimenet="Ot"
else
kimenet="Nem 0-tol 5-ig adtal meg egesz szamot";
end
end
Írjunk osztalyoz nevű függvényt ami egy bemeneti pontszámhoz rendel érdemjegyet a bemeneti szám max 50 lehet ezért 20 pontig "Elegtelen" 20(vagy egyenlő)-től 27.5-pontig "Elegseges", 27.5(vagy egyenlő) ponttól 35 pontig "Kozepes", 35(vagy egyenlő) ponttól 42.5-ig "Jo" felette "Jeles"
function kimenet=osztalyoz(szam)
if szam<20
kimenet="Elegtelen";
elseif (szam>=20)&(szam<27.5)
kimenet="Elegseges";
elseif (szam>=27.5)&(szam<35)
kimenet="Kozepes"
elseif (szam>=35)&(szam<42.5)
kimenet="Jo"
elseif szam>=42.5
kimenet="Jeles"
else
kimenet="Nem pontszam volt";
end
end
Látjuk hogy a 20<=szam<27.5 helyett a (szam=>20)&(szam<27.5) feltételt kell haszánlni.
Másik megoldás
function kimenet=osztalyoz2(szam)
if szam>=42.5
kimenet="Jeles";
elseif szam<=35
kimenet="Jo";
elseif szam>=27.5
kimenet="Kozepes";
elseif szam>=20
kimenet="Elegseges";
else
kimenet="Elegtelen";
end
end
Mi a különbség a & és a && között
Módosítsuk az eredeti eldont.m-et úgy hogy 1-re a függvénynek sokat kell futnia
function kimenet=eldont(szam)
valami=0
if szam==0
kimenet="Nulla";
elseif szam==1
disp("Most sokat szamolok")
for i=1:100000000
valami=valami+log(i);
end
kimenet="Egy";
else
kimenet="Nem nulla";
end
end
(5<6) | (eldont(1)=="Egy")
valami =
0
Most sokat szamolok
ans =
logical
1
Így mindkét oldat kiértékeli majd "és"-eli az eredményeket.
(5<6) || (eldont(1)=="Egy")
ans = logical 1
Itt csak az első állítést értékeli ki. Mivel az igaz tudja hogy a másodikat nem kell mart az állítás úgyis igaz lesz. Ugyanez történik a &&-nél, csak akkor értékali ki a második állítást, ha igaz. Ha az első állítás hamis akkor nem, mert úgyse lehet az állítás igaz.
Házi feladatok:
Írjunk olyan 'cserelget' nevű függvényt ami bemenetként kap egy vektort, a kimenetét úgy kapjuk, hogy végig lépkedünk a vektoron a feléig és ha az i-edik szám kisebb mint hátulról az i-edik akkor kicseréli őket.
function vektor=cserelget(vektor)
for i=1:length(vektor)/2
if vektor(i)<vektor(end-i+1)
a=vektor(i);
vektor(i)=vektor(end-i+1);
vektor(end-i+1)=a;
end
end
Írjunk olyan 'levag' nevű függvényt ami bememtkánt kap egy vektort, kimenetét úgy kapjuk, hogy az eredeti vektor negtív elemeit kicsréljük 0-ra a tíznél nagyobb elemeit kicsréljük 10-re.
function vki=levag(v)
for i=1:length(v)
if v(i)<0
vki(i)=0;
elseif v(i)>10
vki(i)=10;
else
vki(i)=v(i);
end
end
end
>Második mo:
function vki=levag(v) v(v<0)=0; v(v>10)=10; vki=v; end