155GIT1 / 6. cvičení: Porovnání verzí
m →Úlohy |
mBez shrnutí editace |
||
Řádek 24: | Řádek 24: | ||
<source lang=octave> | <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]; | a = [1 2]; | ||
b = [0 3]; | b = [0 3]; | ||
if a < b | if a < b | ||
disp('a je mensi nez b'); | disp('a je po prvcich vzdy mensi nez b'); | ||
else | else | ||
disp('a je vetsi nez b'); | disp('a je po prvcich alespon jednou vetsi nez b'); | ||
end; | end; | ||
if b | % test na (ne)nulove prvky promenne | ||
if b % totez jako: if all(b) | |||
disp('b neobsahuje zadne nulove cleny'); | disp('b neobsahuje zadne nulove cleny'); | ||
elseif a | elseif a | ||
disp('a neobsahuje zadne nulove cleny'); | disp('b obsahuje nulovy clen, a neobsahuje zadne nulove cleny'); | ||
else | |||
disp('a i b obsahuji nulovy clen'); | |||
end; | end; | ||
Řádek 54: | Řádek 68: | ||
case {2,3} | case {2,3} | ||
disp('cislo je 2 nebo 3') | disp('cislo je 2 nebo 3') | ||
case {4, | case {4,6,7} | ||
disp('cislo je 4, | disp('cislo je 4, 6 nebo 7') | ||
otherwise | otherwise | ||
disp('cislo je vetsi nez 7') | disp('cislo je 5 nebo vetsi nez 7') | ||
end | end | ||
</source> | </source> | ||
Řádek 64: | Řádek 78: | ||
<source lang=octave> | <source lang=octave> | ||
% | % tvorba vektoru | ||
n = 3 | n = 3 | ||
for i = 1:n | for i = 1:n | ||
a(i) = i | a(i) = i | ||
end | end | ||
% matice | |||
for i = 1: | % tvorba matice | ||
m = 4 % pocet radku | |||
n = 3 % pocet sloupcu | |||
for i = 1:m | |||
for j = 1:n | for j = 1:n | ||
A(i,j) = i+j | A(i,j) = i+j | ||
end | |||
end | |||
% priklad - v matici vyhledat sude radky | |||
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 | ||
end | end | ||
Řádek 100: | Řádek 125: | ||
end | end | ||
</source> | </source> | ||
=== Složené podmínky === | |||
<source lang=octave> | |||
% logicke AND - musi platit vsechny podminky soucasne | |||
% iterativni proces proto skonci jiz pri splneni jedne z podminek | |||
dx = 10; | |||
dy = 10; | |||
i = 0; % citac iteraci | |||
while dx > 0.1 & dy > 0.1 | |||
i = i+1 | |||
dx = dx/2 | |||
dy = dy/5 | |||
end | |||
% totez | |||
dx = 10; | |||
dy = 10; | |||
i = 0; % citac iteraci | |||
while [dx > 0.1, dy > 0.1] | |||
i = i+1 | |||
dx = dx/2 | |||
dy = dy/5 | |||
end | |||
% totez | |||
dx = 10; | |||
dy = 10; | |||
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 proto skonci az po splneni vsech podminek | |||
dx = 10; | |||
dy = 10; | |||
i = 0; % citac iteraci | |||
while dx > 0.1 | dy > 0.1 | |||
i = i+1 | |||
dx = dx/2 | |||
dy = dy/5 | |||
end | |||
% totez | |||
dx = 10; | |||
dy = 10; | |||
i = 0; % citac iteraci | |||
while any([dx > 0.1, dy > 0.1]) | |||
i = i+1 | |||
dx = dx/2 | |||
dy = dy/5 | |||
end | |||
</source> | |||
== Úlohy == | == Úlohy == | ||
* [[155GIT1 / 6. cvičení / Příklady|6. cvičení - příklady]] | * [[155GIT1 / 6. cvičení / Příklady|6. cvičení - příklady]] |
Verze z 5. 4. 2016, 13:08
Algoritmizace, podmínky a cykly
Náplň cvičení
- zobrazení zpráv, zadaní vstup
- podmínky (if, else, elseif, end, all, any)
- větvení (switch)
- podmínky (for, while)
- příkazy break, continue
Ukázky
Interaktivní vstup
disp('Program vyzaduje vstup');
a = input('Zadejte cislo a: ')
Větvení (if)
% 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
if b % totez jako: if all(b)
disp('b neobsahuje zadne nulove cleny');
elseif 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;
Větvení (switch)
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
Cyklus for
% 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
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
Cyklus while
a = 1;
b = 5;
while a < b
a
a = a + 1;
end
Příkazy break, continue
for i = 1:5
if i == 1
continue;
elseif i == 3
break;
end
fprintf('i=%d\n', i);
end
Složené podmínky
% logicke AND - musi platit vsechny podminky soucasne
% iterativni proces proto skonci jiz pri splneni jedne z podminek
dx = 10;
dy = 10;
i = 0; % citac iteraci
while dx > 0.1 & dy > 0.1
i = i+1
dx = dx/2
dy = dy/5
end
% totez
dx = 10;
dy = 10;
i = 0; % citac iteraci
while [dx > 0.1, dy > 0.1]
i = i+1
dx = dx/2
dy = dy/5
end
% totez
dx = 10;
dy = 10;
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 proto skonci az po splneni vsech podminek
dx = 10;
dy = 10;
i = 0; % citac iteraci
while dx > 0.1 | dy > 0.1
i = i+1
dx = dx/2
dy = dy/5
end
% totez
dx = 10;
dy = 10;
i = 0; % citac iteraci
while any([dx > 0.1, dy > 0.1])
i = i+1
dx = dx/2
dy = dy/5
end