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

Z GeoWikiCZ
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,5,6}
   case {4,6,7}
     disp('cislo je 4, 5 nebo 6')
     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>
% vektor
% 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:n
% 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í

  1. zobrazení zpráv, zadaní vstup
  2. podmínky (if, else, elseif, end, all, any)
  3. větvení (switch)
  4. podmínky (for, while)
  5. 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


Úlohy