% ZAPG 2024: CVICENI 3

clc; clear all;
% prace s polem
% min/max

N = 10;         % pocet radku/sloupcu nasledujici matice
A = zeros(N);    % matice samych 0, NxN

for i=1:N
    for j=1:N
        A(i,j) = i*j * 2*rand   % naplnime matici, 'rand' vrati
                                % nahodne cislo (float) v intervalu (0,1)
                                % viz: 'help rand'
    end
end

%disp(A);

min(A)          % vrati nejmensi hodnoty ze sloupcu matice A
min(min(A))     % vrati nejmensi nejmensi hodnotu z matice A

[hodnoty, indexy] = max(A)  % indexy obsahují čísla řádků 
                            % v odpovídajícím sloupci

% Pokud chceme tyto operace provest pro radky 
% -> A' (pouzijeme transponovanou matici)        

B = [1 7 18 5 7 9 1 5 78 9 -5];
A = [1 2 3;
     4 5 6;
     7 8 9]

mean(B) % prumer z prvku ve vektoru B
mean(A) % prumery z sloupcu matice A
mean(mean(A)) % prumer vsech prvku matice


A = [1 4 1 2 3 4 1 1 5];
B = [4 8 7 9 5 3 7 8 4 4 4 7];
mean(A)
mean(B)

[prumer, ktery] = min([mean(A),mean(B)]) % vytvorime vektor 1x2 se 2 prumery
                                         % funkce min vybere nejmensi a
                                         % priradi hodnotu a index (1. nebo 2. prumer)

A = 2*rand(10)          % matice nahodnych prvku v intervalu (0,2)
A>1                     % zobrazi matici 0/1 pro prvky, ktere splnuji podminku
[row, col] = find(A>1)  % indexy prvku, pro ktere je splnena podminka                                   

% pouziti cyklu pro soucet
soucet = 0;             % inicializace souctu
for i=1:size(A,1)       % cyklus pres radky
    for j=1:size(A,2)   % cyklus pres sloupce
        soucet = soucet + A(i,j);
    end
end

% porovnani/kontrola
disp(soucet)
disp(sum(sum(A)))


% pouziti cyklu pro minimum z matice A
minimum = A(1,1);       % nastavime minimum na 'prvni' prvek z matice
for i=1:size(A,1)       % cyklus pres radky
    for j=1:size(A,2)   % cyklus pres sloupce
        if (A(i,j) < minimum) % pokud je dany prvek mensi nez soucasne minimum
            minimum = A(i,j); % tak nastavime minimum jako tento prvek
        end
    end
end

% porovnani/kontrola
disp(minimum)
disp(min(min(A)))

