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