155GIT1 / 5. cvičení: Porovnání verzí
mBez shrnutí editace |
mBez shrnutí editace |
||
Řádek 15: | Řádek 15: | ||
<source lang=octave> | <source lang=octave> | ||
disp('Program vyzaduje vstup'); | disp('Program vyzaduje vstup'); | ||
a = input('Zadejte cislo a: ') | a = input('Zadejte cislo a: ') | ||
</source> | </source> | ||
Řádek 25: | Řádek 25: | ||
* funkce '''all()''' (uvažujme např. vícero výsledků relačních výrazů současně) | * funkce '''all()''' (uvažujme např. vícero výsledků relačních výrazů současně) | ||
<source lang=octave> | <source lang=octave> | ||
all([1 1 1]) | all([1 1 1]) | ||
all([0 0 1]) | all([0 0 1]) | ||
all([0 0 0]) | all([0 0 0]) | ||
</source> | </source> | ||
* funkce '''any()''' (uvažujme např. vícero výsledků relačních výrazů současně) | * funkce '''any()''' (uvažujme např. vícero výsledků relačních výrazů současně) | ||
<source lang=octave> | <source lang=octave> | ||
any([1 1 1]) | any([1 1 1]) | ||
any([0 0 1]) | any([0 0 1]) | ||
any([0 0 0]) | any([0 0 0]) | ||
</source> | </source> | ||
Řádek 42: | Řádek 42: | ||
<source lang=octave> | <source lang=octave> | ||
% skalarni podminka | % skalarni podminka | ||
a = randi(10) | a = randi(10) | ||
b = randi(10) | b = randi(10) | ||
if a < b | if a < b | ||
disp('a je mensi nez b'); | |||
else | else | ||
disp('a je vetsi nebo rovno b'); | |||
end | end | ||
% vektorova podminka | % vektorova podminka | ||
a = [1 2]; | a = [1 2]; | ||
b = [0 3]; | b = [0 3]; | ||
if a < b | if a < b | ||
disp('a je po prvcich vzdy mensi nez b'); | |||
else | else | ||
disp('a je po prvcich alespon jednou vetsi nez b'); | |||
end | end | ||
% test na (ne)nulove prvky promenne (promenna obvykle obsahuje vysledky relacnich vyrazu, tj. 0 ci 1) | % test na (ne)nulove prvky promenne (promenna obvykle obsahuje vysledky relacnich vyrazu, tj. 0 ci 1) | ||
if b % totez jako: if all(b) | if b % totez jako: if all(b) | ||
disp('b neobsahuje zadne nulove cleny'); | |||
elseif a % totez jako: if all(a) | elseif a % totez jako: if all(a) | ||
disp('b obsahuje nulovy clen, a neobsahuje zadne nulove cleny'); | |||
else | else | ||
disp('a i b obsahuji nulovy clen'); | |||
end | end | ||
if any(b) | if any(b) | ||
disp('b obsahuje alespon jeden nenulovy clen'); | |||
end | end | ||
</source> | </source> | ||
Řádek 78: | Řádek 78: | ||
<source lang=octave> | <source lang=octave> | ||
cislo = randi(10) | cislo = randi(10) | ||
switch cislo | 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 | end | ||
</source> | </source> | ||
Řádek 96: | Řádek 96: | ||
<source lang=octave> | <source lang=octave> | ||
% tvorba vektoru | % tvorba vektoru | ||
n = 3 | n = 3 | ||
for i = 1:n | for i = 1:n | ||
a(i) = i | |||
end | end | ||
% tvorba matice | % tvorba matice | ||
m = 4 % pocet radku | m = 4 % pocet radku | ||
n = 3 % pocet sloupcu | n = 3 % pocet sloupcu | ||
for i = 1:m | for i = 1:m | ||
for j = 1:n | |||
A(i,j) = i+j | |||
end | |||
end | end | ||
% priklad - v matici vyhledat sude radky (jedna z moznych variant zapisu) | % priklad - v matici vyhledat sude radky (jedna z moznych variant zapisu) | ||
A = rand(5,4) | A = rand(5,4) | ||
for i=1:size(A,1) | 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 | ||
</source> | </source> | ||
Řádek 122: | Řádek 122: | ||
<source lang=octave> | <source lang=octave> | ||
a = 1; | a = 1; | ||
b = 5; | b = 5; | ||
while a < b | while a < b | ||
a | |||
a = a + 1; | |||
end | end | ||
</source> | </source> | ||
Řádek 133: | Řádek 133: | ||
<source lang=octave> | <source lang=octave> | ||
for i = 1:5 | for i = 1:5 | ||
if i == 2 | |||
continue; | |||
end | |||
if i == 4 | |||
break; | |||
end | |||
fprintf('i = %d\n', i); | |||
end | end | ||
</source> | </source> | ||
Verze z 26. 3. 2017, 05:18
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: ')
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ě)
all([1 1 1])
all([0 0 1])
all([0 0 0])
- funkce any() (uvažujme např. vícero výsledků relačních výrazů současně)
any([1 1 1])
any([0 0 1])
any([0 0 0])
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 (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
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 (jedna z 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
Cyklus while
a = 1;
b = 5;
while a < b
a
a = a + 1;
end
Příkazy break, continue
for i = 1:5
if i == 2
continue;
end
if i == 4
break;
end
fprintf('i = %d\n', i);
end