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

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

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

%% Naplnenie casti matice obmedzeni A8
cr = 1; % Cislo 1. riadku matice
for i = 1:n
    for j = 1:m
        for k = 1:z
            vysledok = ismember(k, KN); % premenna, do ktorej vyhodnocuje ci k sa nachadza v KN pomocou fcie ismember
            if vysledok == 1            % v pripade hodnoty True, znamena ze k je z mnoziny KN      
                A8(cr, i + (j - 1) * n + (k - 1) * m * n) = -1 ; 
            else                        % v pripade hodnoty True, znamena ze k je z mnoziny KN       
                A8(cr, i + (j - 1) * n + (k - 1) * m * n) = 1;
            end
        end
    end
    A8(cr,n * m * z + (2 * n + i)) = -1; % Hodnota priradena na pozicie odpovedajuce f+ (nezavazne obmedzenie)
    A8(cr,n * m * z + (3* n + i)) = 1; % Hodnota priradena na pozicie odpovedajuce f- (nezavazne obmedzenie)
    cr = cr + 1; % Posun na dalsi riadok matice 
end

%% Naplnenie casti vektoru pravych stran b8 a casti parametru ctype8
b8 = ones(pocet_obmedzeni, 1); % Naplnenie casti vektoru pravych stran b8
ctype8(1:pocet_obmedzeni) = 'S'; % v obmedzeniach sa objavuju rovnosti, preto hodnota S

end