% 2. Funkce

% Funkce a scripty

% script - soubor s příkazy, proměnné globální
%
% funkce - soubor s příkazy, definovány vstupní a výstupní
% proměnné, proměnné v rámci funkce lokální (není-li definováno jinak)

x = [3, 2, -4, 1, 0, 7]

% script - stredni_hodnota.m

%n = length(x)
%sh = sum(x) / n

stredni_hodnota

% funkce - sstredni_hodnota.m

%function sh = stredni_hodnota2(x)
%
%n = length(x);
%sh = sum(x) / n;

stredni_hodnota2(x)

% pomocí příkazu global definuji globální proměnnou

%function sh = stredni_hodnota3(x)
%
%global n
%
%n = length(x);
%sh = sum(x) / n;

%

global n

n = 0

stredni_hodnota2(x)

n % n = 0

stredni_hodnota3(x)

n % n = length(x)

% cykly: for, while

% podmínky: if - elseif - else, switch

% pi = 4 * (1 - 1/3 + 1/5 - 1/7 + ...)
%
%function p = vypocet_pi(n)
%
%p = 0;
%
%for l = 1:n
%  if rem(l, 2) == 0
%    p = p + 1 / (2*l - 1);
%  else
%    p = p - 1 / (2*l - 1);
%  end
%end
%
%p = p * 4;

vypocet_pi(10000)

%function p = vypocet_pi(n)
%
%p = 0;
%
%for l = 1:n
%  if rem(l, 2) == 0
%    p = p + 1 / (2*l - 1);
%  else
%    p = p - 1 / (2*l - 1);
%  end
%end
%
%p = p * 4;

% použití maticových/vektorových operací

%function p = vypocet_pi2(n)

%nn = 1:n;
%p = 4 * (1 + sum((-1).^nn./(2*nn + 1)));

% srovnání časové náračnosti
tic; vypocet_pi(1e8); toc % Elapsed time is 6.239253 seconds.
tic; vypocet_pi2(1e8); toc % Elapsed time is 2.536213 seconds.

% numerický výpočet integrálu
%
%function I = integral_obd(a, b, N, funkce)
%
%h = (b-a)/N;
%I = 0;
%
%for x = a:h:(b-h),
%    y = feval(funkce, x);
%    I = I + h*y;
%end

integral_obd(0, pi, 1000, @sin)

%function I = integral_obd2(a, b, N, funkce)
%
%h = (b-a)/N;
%I = h * sum( feval( funkce, a:h:(b-h) ) );

tic; integral_obd(0, pi, 1e6, @sin); toc % Elapsed time is 3.600347 seconds.
tic; integral_obd2(0, pi, 1e6, @sin); toc % Elapsed time is 0.033825 seconds.

% return, break, continue

%function idx = najdi_prvek(vec, hod)
%
%vlevo = 1;
%vpravo = length(vec);
%idx = -1;
%
%while vlevo <= vpravo
%  stred = ceil((vpravo + vlevo) / 2);
%  if vec(stred) == hod
%    idx = stred;
%    return
%  elseif vec(stred) > hod
%      vpravo = stred - 1;
%  else
%    vlevo = stred;
%  end
%end

najdi_prvek([2 4 7 9 13 16 21], 7)

% použití switch

%function z = znamenko( x )
%
%if x == 0
%    z = '0';
%    return
%end
%
%switch (x/abs(x))
%    case 1
%        z = '+';
%    case -1
%        z = '-';
%end

znamenko(-5)

% načtení a výpis textového souboru

%function vypis_soubor(nazev_souboru)
%
%fid = fopen(nazev_souboru, 'r');
%
%i = 1;
%while not(feof(fid))
%  radek = fgetl(fid);
%  disp([num2str(i), ': ', radek])
%  i = i + 1;
%end
%
%fclose(fid)

vypis_soubor('znamenko.m')

% součet libovolného počtu matic ?

% příklady na procvičení

% 1) Vytvořte funkci, která ze zadaného řetězce odstraní znak 'X'.
%odstran('abcXXX12X3') --> 'abc123'

% 2) Vytvořte funkci, která simuluje náhodný hod třemi kostkami. Funkce
% bude generovat trojici náh. čísel z intervalu <1;6> tak dlouho,
% dokud nebude výsledek [6, 6, 6].
%hod_kostkou
%
%2 3 6
%4 1 2
%...
%6 6 6

