|
|
Řádek 4: |
Řádek 4: |
| == Náplň cvičení == | | == Náplň cvičení == |
|
| |
|
| # zobrazení zpráv, zadaní vstup
| |
| # podmínky (<tt>if, else, elseif, end, all, any</tt>)
| |
| # větvení (<tt>switch</tt>)
| |
| # podmínky (<tt>for, while</tt>)
| |
| # příkazy <tt>break, continue</tt>
| |
| # složené podmínky | | # složené podmínky |
|
| |
|
| == Ukázky == | | == Ukázky == |
|
| |
| === Interaktivní vstup ===
| |
|
| |
| <source lang=octave>
| |
| disp('Program vyzaduje vstup');
| |
| a = input('Zadejte cislo a: ')
| |
| </source>
| |
|
| |
| === Vyhodnocování relačních výrazů, all, any ===
| |
|
| |
| * pravdivá relace je vyhodnocena jako 1
| |
| * nepravdivá relace je vyhodnocena jako 0
| |
| * funkce '''all()''' (uvažujme např. vícero výsledků relačních výrazů současně)
| |
| <source lang=octave>
| |
| all([1 1 1])
| |
| all([0 0 1])
| |
| all([0 0 0])
| |
| </source>
| |
| * funkce '''any()''' (uvažujme např. vícero výsledků relačních výrazů současně)
| |
| <source lang=octave>
| |
| any([1 1 1])
| |
| any([0 0 1])
| |
| any([0 0 0])
| |
| </source>
| |
|
| |
| === Větvení (if) ===
| |
|
| |
| * [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#63]
| |
|
| |
| <source lang=octave>
| |
| % skalarni podminka
| |
| a = randi(10)
| |
| b = randi(10)
| |
|
| |
| if a < b
| |
| disp('a je mensi nez b');
| |
| else
| |
| disp('a je vetsi nebo rovno b');
| |
| end;
| |
|
| |
| % vektorova podminka
| |
| a = [1 2];
| |
| b = [0 3];
| |
|
| |
| if a < b
| |
| disp('a je po prvcich vzdy mensi nez b');
| |
| else
| |
| disp('a je po prvcich alespon jednou vetsi nez b');
| |
| end;
| |
|
| |
| % test na (ne)nulove prvky promenne (promenna obvykle obsahuje vysledky relacnich vyrazu, tj. 0 ci 1)
| |
| if b % totez jako: if all(b)
| |
| disp('b neobsahuje zadne nulove cleny');
| |
| elseif a % totez jako: if all(a)
| |
| disp('b obsahuje nulovy clen, a neobsahuje zadne nulove cleny');
| |
| else
| |
| disp('a i b obsahuji nulovy clen');
| |
| end;
| |
|
| |
| if any(b)
| |
| disp('b obsahuje alespon jeden nenulovy clen');
| |
| end;
| |
| </source>
| |
|
| |
| === Větvení (switch) ===
| |
|
| |
| <source lang=octave>
| |
| cislo = randi(10)
| |
|
| |
| switch cislo
| |
| case 1
| |
| disp('cislo je 1')
| |
| case {2,3}
| |
| disp('cislo je 2 nebo 3')
| |
| case {4,6,7}
| |
| disp('cislo je 4, 6 nebo 7')
| |
| otherwise
| |
| disp('cislo je 5 nebo vetsi nez 7')
| |
| end
| |
| </source>
| |
|
| |
| === Cyklus for ===
| |
|
| |
| <source lang=octave>
| |
| % tvorba vektoru
| |
| n = 3
| |
| for i = 1:n
| |
| a(i) = i
| |
| end
| |
|
| |
| % tvorba matice
| |
| m = 4 % pocet radku
| |
| n = 3 % pocet sloupcu
| |
| for i = 1:m
| |
| for j = 1:n
| |
| A(i,j) = i+j
| |
| end
| |
| end
| |
|
| |
| % priklad - v matici vyhledat sude radky (jedna z vicero moznych variant zapisu)
| |
| A = rand(5,4)
| |
| for i=1:size(A,1)
| |
| if rem(i,2) == 0 % rem(a,b) ... zbytek po deleni cisla a cislem b
| |
| A(i,:) = -1 * A(i,:)
| |
| end
| |
| end
| |
| </source>
| |
|
| |
| === Cyklus while ===
| |
|
| |
| <source lang=octave>
| |
| a = 1;
| |
| b = 5;
| |
| while a < b
| |
| a
| |
| a = a + 1;
| |
| end
| |
| </source>
| |
|
| |
| === Příkazy break, continue ===
| |
|
| |
| <source lang=octave>
| |
| for i = 1:5
| |
| if i == 2
| |
| continue;
| |
| end
| |
| if i == 4
| |
| break;
| |
| end
| |
| fprintf('i=%d\n', i);
| |
| end
| |
| </source>
| |
|
| |
|
| === Složené podmínky === | | === Složené podmínky === |
Algoritmizace, podmínky a cykly
Náplň cvičení
- složené podmínky
Ukázky
Složené podmínky
% logicke AND - musi platit vsechny podminky soucasne
% iterativni proces v ukazce proto skonci jiz pri splneni jedne z pozadovanych presnosti
dx = 10; % pozadovana presnost v souradnici x
dy = 10; % pozadovana presnost v souradnici y
i = 0; % citac iteraci
while dx > 0.1 & dy > 0.1
i = i+1
dx = dx/2
dy = dy/5
end
% totez
dx = 10; % pozadovana presnost v souradnici x
dy = 10; % pozadovana presnost v souradnici y
i = 0; % citac iteraci
while [dx > 0.1, dy > 0.1]
i = i+1
dx = dx/2
dy = dy/5
end
% totez
dx = 10; % pozadovana presnost v souradnici x
dy = 10; % pozadovana presnost v souradnici y
i = 0; % citac iteraci
while all([dx > 0.1, dy > 0.1])
i = i+1
dx = dx/2
dy = dy/5
end
% logicke OR - musi platit alespon jedna podminka
% iterativni proces v ukazce proto skonci az po splneni vsech pozadovanych presnosti
dx = 10; % pozadovana presnost v souradnici x
dy = 10; % pozadovana presnost v souradnici y
i = 0; % citac iteraci
while dx > 0.1 | dy > 0.1
i = i+1
dx = dx/2
dy = dy/5
end
% totez
dx = 10; % pozadovana presnost v souradnici x
dy = 10; % pozadovana presnost v souradnici y
i = 0; % citac iteraci
while any([dx > 0.1, dy > 0.1])
i = i+1
dx = dx/2
dy = dy/5
end
Úlohy