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