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

Z GeoWikiCZ
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');
    disp('a je mensi nez b');
else
else
    disp('a je vetsi nebo rovno b');
    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');
    disp('a je po prvcich vzdy mensi nez b');
else
else
    disp('a je po prvcich alespon jednou vetsi nez b');
    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');
    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');
    disp('b obsahuje nulovy clen, a neobsahuje zadne nulove cleny');
else
else
    disp('a i b obsahuji nulovy clen');
    disp('a i b obsahuji nulovy clen');
end;
end
      
      
if any(b)
if any(b)
    disp('b obsahuje alespon jeden nenulovy clen');
    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
  case 1
    disp('cislo je 1')
    disp('cislo je 1')
  case {2,3}
  case {2,3}
    disp('cislo je 2 nebo 3')
    disp('cislo je 2 nebo 3')
  case {4,6,7}
  case {4,6,7}
    disp('cislo je 4, 6 nebo 7')
    disp('cislo je 4, 6 nebo 7')
  otherwise
  otherwise
    disp('cislo je 5 nebo vetsi nez 7')
    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
    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
    for j = 1:n
        A(i,j) = i+j
        A(i,j) = i+j
    end
    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
    if rem(i,2) == 0        % rem(a,b) ... zbytek po deleni cisla a cislem b
        A(i,:) = -1 * A(i,:)
        A(i,:) = -1 * A(i,:)
    end
    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 = a + 1;
    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
    if i == 2
        continue;
        continue;
    end
    end
    if i == 4
    if i == 4
        break;
        break;
    end
    end
    fprintf('i = %d\n', i);
    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í

  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: ')

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

Úlohy