function [ usp ] = simrand( minim, maxim, n, m )
%fce provede m simulaci  na hadani cisel, tj. snazi se
%za n otazek uhodnout cislo lezici v intervalu minim a maxim; vystupem fce
%je (*100) procentualni hodnota, kolikrat byl algoritmus uspesny
%nahodne urcuje, jestli delicim intervalem bude polovina, tretina nebo
%ctvrtina (v kazdem kroku)

usp1=zeros([m,1]);                          %promena nabyvajici hodnoty 1 jestli uhodl, 0 jestli neuhodl - postupne se plnici vektor rozmeru m (pocet simulaci)
                    
r=zeros([m,1]);                             %vektor nahodnych cisel, naplnen pro zacatek nulami                          
                    
if minim==maxim;
    usp=1;
end
if minim>maxim error('Spatne zadany interval!');
    usp=0;
end

i=0;                    %pocitadlo jednotlivych hadani (hadat by bylo mozne i pomoci cyklu FOR s prikazem BREAk (if i prekroci n)
j=1;                    %pocitadlo simulaci

%---------------------
minim1=minim;
maxim1=maxim;           %uchovani hodnot minima a maxima
%---------------------

for j=1:m;
    r(j)=randi([minim1,maxim1]);        %vygenerovani nahodneho hadaneho cisla pro prvni az m-tou simulaci, postupne se plni vektor hadanych cisel r
    k=randi([2,4]);                     %interval ted nahodne pouze nepulime, ale i "tretime" nebo "ctvrtime"
    
    minim=minim1;
    maxim=maxim1;                       %protoze minim a maxim se v cyklu while meni, je treba je pro dalsi hadane cislo opet resetovat na puvodni hodnoty
    
    while and(minim<maxim,i<n); 
        i=i+1;
        x=floor((maxim-minim)/k+minim);
        if r(j)>x;
            minim=x+1;
        end    
        if r(j)<=x;
            maxim=x;
        end    
    end

    if minim==maxim     %pocet pokusu stacil, muzu presne urcit cislo
        usp1(j)=1;
    else                %nestacil pocet pokusu, nahodne hadam na zuzenem intervalu
        z=randi([minim,maxim]);
            if z==r(j);
                 usp1(j)=1;
            else usp1(j)=0;
            end;
      end     


    end
    
    usp=sum(usp1)/m;    %celkova uspesnost - vystup fce
    
    %-------------------------------------------------------------
    %--------GRAFY-------
    
    
    %--zakresleni cetnosti cisel--
    d=1;
    for i=minim1:maxim1
        x(d)=length(find(r==i));    %vektor urcujici cetnost ve vektoru nahodnych cisel
        d=d+1;
    end
    
    figure(1)
    axis([minim1 maxim1 min(x) max(x)])
    plot(minim1:maxim1,x,'kd')       %osa x vsechna cisla mezi minim a maxim, osa y cetnost
    title('Cetnost nahodnych cisel v simulaci')
    xlabel('Nahodna cisla')
    ylabel('Cetnost')
    
    hold on
    
    
    %--zakresleni procentualniho uhadnuti jednotnivych cisel na intervalu
    %[minim, maxim]--
   
    h=1;
    x=[];
    ppst=zeros([maxim1-minim1,1]);          %vektor pravdepodobnosti vynulovan
    for i=minim1:maxim1
        x=find(r==i);                       %vektor indexu, na nichz se dane cislo nachazi 
        if isempty(x);
            ppst(h)=-1;                     %pokud cislo nebylo ani jednou hadano, nebude v grafu zobrazena ppst   
        end    
        ppst(h)=sum(usp1(x))/length(x);  
        h=h+1;     
    end
    
    figure(2)
    axis([minim1 maxim1 0 1])
    plot(minim1:maxim1,ppst, 'ro')
    title('Procentualni cetnost uhodnuti nahodneho cisla')
    xlabel('Nahodna cisla')
    ylabel('Procent pripadu uhodnuto')
    
    hold off
    
    
    

end