4. Előadás Programvezérlő utasítások. (begyakorló feladatok) Salamon Júlia Előadás I. éves mérnök hallgatók számára
If utasítás A Matlab a döntések meghozatalát szolgáló feltételek vizsgálatára és a döntés végrehajtására az if utasítás szolgál. Az utasítás általános alakja: if feltétel utasítás(ok)1 else utasítás(ok)2 H Logikai_feltétel utasítás2 end Ha feltételben egy igaz állítás szerepel, akkor az if és else közötti utasítások hajtódnak végre, ha hamis akkor I az else és az end közötti utasítások. utasítás1 Példaprogram: Döntsük el egy számról, hogy osztható-e hárommal. a=input('Szam='); if mod(a,3)==0 disp('Oszthato 3-mal') else disp('Nem oszthato 3-mal') end 2007.10.25.
IV. előadás
2
Elseif Az egymásba ágyazott if utasításokra kifejlesztették az if utasítás elseif-es változatát. Az utasítás általános alakja: if feltétel1 utasítás(ok)1 elseif feltétel2 utasítás(ok)2 else utasítás(ok)3 end
Logikai feltétel1
Utasítás1
H Logikai feltétel2
Ha a feltétel1 igaz állítás, akkor az utasítások1 hajtódnak végre, ha hamis, akkor kiértékelődik az elseif feltétele. Ha a feltétel2 igaz akkor az utasítások2 hajtódik végre, ha ez a feltétel is hamis akkor, az else utáni utasítások kerülnek kiértékelésre.
2007.10.25.
I
IV. előadás
I
Utasítás2
H Utasítás3
3
For utasítás Ha a programon belül bizonyos utasításokat egymás után többször kell elvégeznünk, de tudjuk, előre, hogy pontosan hányszor, akkor a for utasítást kell használjuk. Az utasítás általános alakja: for változó=kifejezés i= k_érték utasítás(ok) end A kifejezés az esetek nagy részében a : H operátorral adjuk meg. i<=v_érték kifejezés=k_érték:l:v_érték Ebben az esetben az utasítások a : operátor I által megadott számszor hajtódnak végre. Utasítás Példaprogram: Egy bekért számig írd ki a számok négyzeteit. i=i+l n=input('n='); for i=1:n disp(i^2) end 2007.10.25.
IV. előadás
4
Zárthelyi dolgozat felépítése 1. Mátrixműveletek 2. Egyszerű lineáris struktúrájú feladat 3. If utasítás használata 4. For utasítás használata 5. Nehezebb feladat (if, for használata kombinálva) Jelenlét
2007.10.25.
IV. előadás
2p 1,5p 1,5p 2p 2p 1p
5
Mátrixműveletek a) Számold ki a A=(2,5,1), B=(-1,0,1) vektorok skalár szorzatát. b) Old meg a következő egyenletrendszert: 4x+0.3y=5 3x+2y-z=-1 x+0.2y+z=1 c) Emeld négyzetre A mátrix második össze. 2 −1 A= 2 5 2 −6 Megoldás: A=[2 5 1] B=[-1; 0; 1] skalarszorzat=A*B A=[4 0.3 0; 3 2 -1; 1 0.2 1] B=[5;-1;1] X=inv(A)*B A=[2 -1 0;2 5 1;2 -6 3] N=A(:,2).^2 osszeg=sum(A(1,:)) 2007.10.25.
oszlopát, majd a mátrix első sorának elemeit add 0 1 3
IV. előadás
6
Egyszerű lineáris struktúrájú feladat 1. Generálj egy Ascii kódot, 2. Olvass be egy karaktermajd írasd ki a neki láncot, hány ‘ma’ részkarakmegfelelő karaktert a terláncot találsz benne? képernyőre. k=ceil(255*rand); generaltkarakter=char(k)
2007.10.25.
sz=input('Szoveg=','s'); x=findstr(sz,'ma'); disp(['elofordulasok szama=' num2str(length(x))])
IV. előadás
7
If utasítás használata 1. Generálj véletlenszerűen két valós számot, 2. Egy számról döntsd el hogy 2-be végződikés a nagyobbikat írasd ki. e? a=10*rand; n=input('n='); b=10*rand; if mod(n,10)==2 if a>b disp('2-be vegzodik') disp(a) else else disp('nem 2-be vegzodik') disp(b) end end 3. Olvass be 3 számot és a párosak összegét 4. Olvass be egy karakterláncot, döntsd el, írasd ki a parancssorba. hogy hossza meghaladja-e a 10 karaktert. a=input('a='); sz=input('Szoveg=','s'); b=input('b='); if length(sz)<10 c=input('c='); disp('rovidebb 10 karakternel') s=0; else if mod(a,2)==0 s=s+a; end disp('hosszabb 10 karakternel') if mod(b,2)==0 s=s+b; end if mod(c,2)==0 s=s+c; end end parosokosszege=s 2007.10.25.
IV. előadás
8
For utasítás használata 1. Írasd ki 1-től egy bekért számig a 4-gyel 2. Olvass be n darab számot. osztható számokat. n=input('n='); for i=4:4:n disp(i) end
n=input('n='); for i=1:n x=input('Szam='); end
3. Írj programot, amely egy karakterlánc 4. Olvass be egy karakterláncot és törölj ki minden harmadik betűjét ’s’ betűre írja át. belőle minden szóközt. sz=input('Szoveg=','s'); sz=input('Szoveg=','s'); v=findstr(sz,' '); for i=3:3:length(sz) v=fliplr(v); n=length(v); sz(i)='s'; for i=1:n end sz(v(i))=[]; disp(sz) end disp(sz) 2007.10.25.
IV. előadás
9
5. Írj programot, amely egy tömb elemeinek az átlagát adja vissza a legkisebb elem elhagyásával. (for utasítást használva) x=input('Vektor='); s=0; for i=1:length(x) s=s+x(i); end s=s-min(x); atlag=s/(length(x)-1)
6. Írj programot, amely egy tömb minden második elemének a szorzatát elosztja az utolsó előtti elemmel. x=input('Vektor='); s=1; for i=2:2:length(x) s=s*x(i); end eredmeny=s/x(length(x)-1)
7. Olvass be egy mátrixot, majd számold ki az 8. Olvass be egy négyzetes mátrixot, a főátló utolsó sorának szorzatát. elemeit cseréld le generált elemekre. A=input('Matrix=') s=1; [n,m]=size(A); for i=1:m s=s*A(n,i); end szorzat=s
2007.10.25.
A=input('Matrix=') [n,m]=size(A); for i=1:n A(i,i)=rand; end ujmatrix=A
IV. előadás
10
Nehezebb feladat (if, for használata kombinálva) 1. Írasd ki egy bekért számtól 2. Írasd ki egy szám 100-ig a 7-tel osztható legnagyobb valódi osztóját. számokat. n=input('n='); for i=n:100 if mod(i,7)==0 disp(i) end end 2007.10.25.
n=input('n='); for i=1:n-1 if mod(n,i)==0 nv=i; end end legnagyobboszto=nv IV. előadás
11
3. Olvass be egy karakterláncot, 4. Olvass be egy karakterláncot, majd jelenítsd meg minden szóköz utáni töröld ki belőle minden szóköz utáni 'k' betűt. karakterét. sz=input('Szoveg=','s'); for i=1:length(sz) if sz(i)==' ' disp(sz(i+1)); end end
2007.10.25.
sz=input('szoveg=','s'); e=sz(1); for i=1:length(sz)-1 if (sz(i)~=' ')|(sz(i+1)~='k') e=[e sz(i+1)]; end end disp(e) Egy másik megoldási lehetőség sz=input('szoveg=','s'); for i=1:length(sz)-1 if (sz(i)==' ')&(sz(i+1)=='k') sz(i+1)=[]; sz=[sz ' ']; end end deblank(sz); disp(sz)
IV. előadás
12
5. Olvass be egy karakter- 6. Írj programot, amely egy n elemű láncot, írasd ki hol találhatók tömböt tölts fel véletlenszerűen [20,20] intervallumbeli elemekkel, az s betűk. majd a tömb minden pozitív elemét sz=input('Szoveg=','s') for i=1:length(sz) if sz(i)=='s' disp(i) end end
2007.10.25.
összeadja, és negatívokat.
ebből
kivonja
a
n=input('n='); x=40*rand(1,n)-20 s=0; for i=1:n if x(i)>0 s=s+x(i); else s=s-x(i); end end eredmeny=s
IV. előadás
13
7. Írj programot, amely egy n elemű tömböt feltölt véletlenszerűen elemekkel, majd a tömb 5-tel osztható elemeinek az átlagát adja meg. n=input('n='); x=fix(100*rand(1,n)) s=0; d=0; for i=1:n if mod(x(i),5)==0 s=s+x(i); d=d+1; end end atlag=s/d 2007.10.25.
8. Generálj egy nxm-es mátrixot, majd minden második sorában található elemeket szorozd össze. n=input('n='); m=input('m='); A=rand(n,m) s=1; for i=1:n for j=1:m if mod(j,2)==0 s=s*A(i,j); end end end szorzat=s
IV. előadás
14