function [A1, b1, ctype1] = MBKS_zostav_obmedzenie_typ1(n, m, z, pocet_neznamych_celkom)
% Funkcia pre zostavenie subcasti matice obmedzeni A, subcasti vektoru
% pravych stran b a subcasti vektoru znakov ctype pre druhe zavazne
% obmedzenie
% 
% Volanie
%   [A1, b1, ctype1] = MBKS_zostav_obmedzenie_typ1(n, m, z, pocet_neznamych_celkom)
% Vstup:
%   n - pocet sestier
%   m - pocet dni planovaneho obdobia
%   z - pocet smien
%   pocet_neznamych_celkom - celkovy pocet neznamych pre zavazne aj nezavazne poziadavky
% Výstup:
%   A1 - subcast matice obmedzeni A
%   b1 - subcast vektoru pravych stran b
%   ctype1 - subcast vektoru znakov ctype
%% ABOUT
% Funkcia MBKS_zostav_obmedzenie_typ1 si zavola vstupne premenne zo
% skriptu MBKS_vstupne_parametre. Jej vystupy budu predstavovat cast matice
% ombedzeni A, vektoru pravych stran b, a parametru ctype. 
%
% Na zaciatku si zadeklarujeme premenne pocet_obmedzeni a
% pocet_nenulovych_prvkov, potrebnych pre urcenie velkosti casti matice
% obmedzeni A1, casti vektoru pravych stran b1 a casti parametru ctype1
%
% Pomocou funkcie salloc sa allokuje A1 a nasledne pomocou sustavy
% vnorenych cyklov typu for sa bude A1 naplnat. Maticu A1 sa naplna
% postupnym prechadzanim kazdeho riadku cr a k nemu odpovedajucih stlpcov.
%
% Na zaver sa naplni cast vektoru pravych stran b1 a zvoli vhodna hodnota
% parametru ctype1

%% Deklarovanie parametrov
pocet_obmedzeni = n * m + n * (m - 1) * (z - 1); % Pocita sa podla toho cez ake indexy prebieha, u podmienok prveho typu je
                                                 % to m*n pre prvu z podmienok a n*(m-1) pre dalšie z-1 podmienok, dohormady teda celkom 
                                                 % n*m+n*(m-1)*(z-1) podmienok
pocet_nenulovych_prvkov = z * pocet_obmedzeni; % Pocet nenulovych prvkov sa odhadu podla tvaru podmienok, je evidentne ze v kazdej podmienke
                                               % je celkom z nenulovych clenov a teda to cele prenasobime poctom obmedzeni

%% Inicializacia casti matice obmedzeni A1
A1 = spalloc(pocet_obmedzeni, pocet_neznamych_celkom, pocet_nenulovych_prvkov); % Spalloc priraduje alokovany priestor pre riedkú maticu

%% Naplnenie prveho obmedzenia z prveho poziadavku
cr = 1; % Cislo 1. riadku matice
for i = 1:n
    for j = 1:m
        for k = 1:z
            A1(cr, i + (j - 1) * n + (k - 1) * m * n) = 1; % Priradenie hodnoty 1 na poziciu v riadku cr a odpovedajucom stlpcovom indexe
        end
        cr = cr + 1; % Posun na dalsi riadok matice
    end
end

%% Naplnenie dalsich obmedzeni z prveho poziadavku
for ds = 2:z
    for i = 1:n
        for j = 1:(m - 1)
            for k = ds:z
                A1(cr, i + (j - 1) * n + (k - 1) * m * n) = 1;
            end
            for k = 1:(ds - 1)
                A1(cr, i + j * n + (k - 1) * m * n) = 1;
            end
            cr = cr + 1; % Posun na dalsi riadok matice
        end
    end
end

%% Naplnenie casti vektoru pravych stran b1 a casti parametru ctype1
b1 = ones(pocet_obmedzeni, 1); % Naplnenie casti vektoru pravych stran b1
ctype1(1:pocet_obmedzeni) = 'U'; % v obmedzeniach sa objavuju nerovnosti <=, preto hodnota U

end