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 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 az else és az közötti utasítások. 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') Logikai_feltétel 2007.10.25. IV. előadás 2 I utasítás1 H utasítás2
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 Logikai feltétel1 H Logikai feltétel2 I I Utasítás1 Utasítás2 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. H Utasítás3 2007.10.25. IV. előadás 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 utasítás(ok) A kifejezés az esetek nagy részében a : operátorral adjuk meg. kifejezés=k_érték:l:v_érték Ebben az esetben az utasítások a : operátor által megadott számszor hajtódnak végre. Példaprogram: Egy bekért számig írd ki a számok négyzeteit. for i=1:n disp(i^2) i= k_érték i<=v_érték 2007.10.25. IV. előadás 4 I Utasítás i=i+l H
Zárthelyi dolgozat felépítése 1. Mátrixműveletek 2p 2. Egyszerű lineáris struktúrájú feladat 1,5p 3. If utasítás használata 1,5p 4. For utasítás használata 2p 5. Nehezebb feladat (if, for használata kombinálva) 2p Jelenlét 1p 2007.10.25. IV. előadás 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ő egyenletrszert: 4x+0.3y=5 3x+2y-z=-1 x+0.2y+z=1 c) Emeld négyzetre A mátrix második oszlopát, majd a mátrix első sorának elemeit add össze. 2 1 0 A = 2 5 1 2 6 3 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. IV. előadás 6
Egyszerű lineáris struktúrájú feladat 1. Generálj egy Ascii kódot, majd írasd ki a neki megfelelő karaktert a képernyőre. k=ceil(255*rand); generaltkarakter=char(k) 2. Olvass be egy karakterláncot, hány ma részkarakterláncot találsz benne? sz=input('szoveg=','s'); x=findstr(sz,'ma'); disp(['elofordulasok szama=' num2str(length(x))]) 2007.10.25. IV. előadás 7
If utasítás használata 1. Generálj véletlenszerűen két valós számot, és a nagyobbikat írasd ki. a=10*rand; b=10*rand; if a>b disp(a) else disp(b) 3. Olvass be 3 számot és a párosak összegét írasd ki a parancssorba. a=input('a='); b=input('b='); c=input('c='); s=0; if mod(a,2)==0 s=s+a; if mod(b,2)==0 s=s+b; if mod(c,2)==0 s=s+c; parosokosszege=s 2. Egy számról döntsd el hogy 2-be végződike? if mod(n,10)==2 else 4. Olvass be egy karakterláncot, döntsd el, hogy hossza meghaladja-e a 10 karaktert. sz=input('szoveg=','s'); if length(sz)<10 else disp('2-be vegzodik') disp('nem 2-be vegzodik') disp('rovidebb 10 karakternel') disp('hosszabb 10 karakternel') 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 osztható számokat. for i=4:4:n disp(i) 2. Olvass be n darab számot. for i=1:n x=input('szam='); 3. Írj programot, amely egy karakterlánc minden harmadik betűjét s betűre írja át. sz=input('szoveg=','s'); for i=3:3:length(sz) sz(i)='s'; disp(sz) 4. Olvass be egy karakterláncot és törölj ki belőle minden szóközt. sz=input('szoveg=','s'); v=findstr(sz,' '); v=fliplr(v); n=length(v); for i=1:n sz(v(i))=[]; 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) 7. Olvass be egy mátrixot, majd számold ki az utolsó sorának szorzatát. A=input('Matrix=') s=1; [n,m]=size(a); for i=1:m s=s+x(i); s=s-min(x); atlag=s/(length(x)-1) s=s*a(n,i); szorzat=s 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) 8. Olvass be egy négyzetes mátrixot, a főátló elemeit cseréld le generált elemekre. A=input('Matrix=') [n,m]=size(a); for i=1:n s=s*x(i); eredmeny=s/x(length(x)-1) A(i,i)=rand; ujmatrix=a 2007.10.25. IV. előadás 10
Nehezebb feladat (if, for használata kombinálva) 1. Írasd ki egy bekért számtól 100-ig a 7-tel osztható számokat. for i=n:100 if mod(i,7)==0 disp(i) 2. Írasd ki egy szám legnagyobb valódi osztóját. for i=1:n-1 if mod(n,i)==0 nv=i; legnagyobboszto=nv 2007.10.25. IV. előadás 11
3. Olvass be egy karakterláncot, jelenítsd meg minden szóköz utáni karakterét. sz=input('szoveg=','s'); for i=1:length(sz) if sz(i)==' ' disp(sz(i+1)); 4. Olvass be egy karakterláncot, majd töröld ki belőle minden szóköz utáni 'k' betűt. 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)]; 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 ' ']; deblank(sz); disp(sz) 2007.10.25. IV. előadás 12
5. Olvass be egy karakterláncot, írasd ki hol találhatók az s betűk. sz=input('szoveg=','s') for i=1:length(sz) if sz(i)=='s' disp(i) 6. Írj programot, amely egy n elemű tömböt tölts fel véletlenszerűen [- 20,20] intervallumbeli elemekkel, majd a tömb minden pozitív elemét összeadja, és ebből kivonja a negatívokat. 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); eredmeny=s 2007.10.25. 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. 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; atlag=s/d 8. Generálj egy nxm-es mátrixot, majd minden második sorában található elemeket szorozd össze. 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); szorzat=s 2007.10.25. IV. előadás 14