155GIT1 / 6. cvičení: Porovnání verzí

Z GeoWikiCZ
mBez shrnutí editace
Řá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 ===

Verze z 13. 3. 2017, 13:59

Algoritmizace, podmínky a cykly

Náplň cvičení

  1. 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