function [A4a, b4a, ctype4a] = MBKS_zostav_obmedzenie_typ4(n, m, z, pocet_neznamych_celkom, min_poc_den, max_poc_den)
% Funkcia pre zostavenie subcasti matice obmedzeni A, subcasti vektoru
% pravych stran b a subcasti vektoru znakov ctype pre stvrte zavazne
% obmedzenie
% 
% Volanie
%   [A4, b4, ctype4] = MBKS_zostav_obmedzenie_typ4(n, m, z, pocet_neznamych_celkom, min_poc_den, max_poc_den)
% Vstup:
%   n - pocet sestier
%   m - pocet dni planovaneho obdobia
%   z - pocet smien
%   pocet_neznamych_celkom - celkovy pocet neznamych pre zavazne aj nezavazne poziadavky
%   min_poc_den - min pocet pracovnych dni
%   max_poc_den - max pocet pracovnych dni 
% Výstup:
%   A4 - subcast matice obmedzeni A
%   b4 - subcast vektoru pravych stran b
%   ctype4 - subcast vektoru znakov ctype
%% ABOUT
% Funkcia MBKS_zostav_obmedzenie_typ4 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 A4, casti vektoru pravych stran b4 a casti parametru ctype4.
% Toto zopakujeme v podstate dvakrat nakolko tie iste obmedzenia maju
% spodne aj horne ohranicenie.
%
% Pomocou funkcie salloc sa allokuje A4 a nasledne pomocou sustavy
% vnorenych cyklov typu for sa bude A4 naplnat. Maticu A4 sa naplna
% postupnym prechadzanim kazdeho riadku cr a k nemu odpovedajucih stlpcov.
%
% Na zaver sa naplni cast vektoru pravych stran b4 a zvoli vhodna hodnota
% parametru ctype4 a to spojenim casti pre spodne a casti pre horne
% ohranicenie obmedzeni.

%% Deklarovanie parametrov
pocet_obmedzeni = n;
pocet_nenulovych_prvkov = m * z * pocet_obmedzeni;

%% Inicializacia casti matice obmedzeni A4 
A4a = spalloc(pocet_obmedzeni, pocet_neznamych_celkom, pocet_nenulovych_prvkov);
A4b = spalloc(pocet_obmedzeni, pocet_neznamych_celkom, pocet_nenulovych_prvkov);


%% Naplnenie casti matice obmedzeni A4 pre spodnu hranicu obmedzenia
cr = 1; % Cislo 1. riadku matice
for i = 1:n
    for j = 1:m
        for k = 1:z
            A4a(cr, i + (j - 1) * n + (k - 1) * m * n) = 1;
        end
    end
    cr = cr + 1;
end

%% Naplnenie casti matice obmedzeni A4 pre hornu hranicu obmedzenia
cr = 1; % Cislo 1. riadku matice
for i = 1:n
    for j = 1:m
        for k = 1:z
            A4b(cr, i + (j - 1) * n + (k - 1) * m * n) = 1;
        end
    end
    cr = cr + 1; % posun na dalsi riadok matice
end

%% Naplnenie casti vektoru pravych stran b4 a casti parametru ctype4 pre prvu a druhu cast obmedzenia
b4a = ones(pocet_obmedzeni, 1) * min_poc_den; % Naplnenie casti vektoru pravych stran b4 pre spodnu hranicu obmedzeni
b4b = ones(pocet_obmedzeni, 1) * max_poc_den; % Naplnenie casti vektoru pravych stran b4 pre hornu hranicu obmedzeni
ctype4a(1:pocet_obmedzeni) = 'L'; % v obmedzeniach sa objavuju nerovnosti >=, preto hodnota L
ctype4b(1:pocet_obmedzeni) = 'U'; % v obmedzeniach sa objavuju nerovnosti <=, preto hodnota U

%% Spojenie prvej a druhej casti matice obmedzenia A4, vektoru pravych stran b4, parametru ctype4
A4a = [A4a; A4b];
b4a = [b4a; b4b];
ctype4a = [ctype4a, ctype4b];

end