function [A2, b2, ctype2] = MBKS_zostav_obmedzenie_typ2(n, m, z, pocet_neznamych_celkom, a)
% Funkcia pre zostavenie subcasti matice obmedzeni A, subcasti vektoru
% pravych stran b a subcasti vektoru znakov ctype pre druhe zavazne
% obmedzenie
% 
% Volanie
%   [A2, b2, ctype2] = MBKS_zostav_obmedzenie_typ2(n, m, z, pocet_neznamych_celkom, a)
% Vstup:
%   n - pocet sestier
%   m - pocet dni planovaneho obdobia
%   z - pocet smien
%   a - maximalny pocet po sebe iducich pracovnych dni pre sestru za m 
%   pocet_neznamych_celkom - celkovy pocet neznamych pre zavazne aj nezavazne poziadavky
% Výstup:
%   A2 - subcast matice obmedzeni A
%   b2 - subcast vektoru pravych stran b
%   ctype2 - subcast vektoru znakov ctype
%% ABOUT
% Funkcia MBKS_zostav_obmedzenie_typ2 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 A2, casti vektoru pravych stran b2 a casti parametru ctype2
%
% Pomocou funkcie salloc sa allokuje A2 a nasledne pomocou sustavy
% vnorenych cyklov typu for sa bude A2 naplnat. Maticu A2 sa naplna
% postupnym prechadzanim kazdeho riadku cr a k nemu odpovedajucih stlpcov.
%
% Na zaver sa naplni cast vektoru pravych stran b2 a zvoli vhodna hodnota
% parametru ctype2

%% Deklarovanie parametrov
pocet_obmedzeni = n * (m - a); 
pocet_nenulovych_prvkov = (a + 1) * z  * pocet_obmedzeni; 

%% Inicializacia casti matice obmedzeni A2
A2 = spalloc(pocet_obmedzeni, pocet_neznamych_celkom, pocet_nenulovych_prvkov);

%% Naplnenie casti matice obmedzeni A2
cr = 1; % Cislo 1. riadku matice
for ds = 1:(m - a)
    for i = 1:n
        for j = ds:(ds + a)
            for k = 1:z
                A2(cr, i + (j - 1) * n + (k - 1) * m * n) = 1;
            end
        end
        cr = cr + 1;
    end
end

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

end