
function flag=numero_perfetto(n)

% La funzione Matlab "numero_perfetto", ha
%
% * in input un numero naturale positivo "n",
%
% * in output una variabile "flag" che se
%      vale "1" afferma che il numero e' perfetto, ovvero e' la somma dei
%      suoi divisori minori di "n",
%      vale "0" se non lo e',
%      vale "-1" se il numero "n" non e' naturale positivo.

valore=isitinteger(n);
if valore == 0 % n: numero reale non intero
    flag=-1;
else
    if n <= 0 % n: numero intero non positivo
        flag=-1;
    else % n: numero intero  positivo
        divisori=[];
        for m=1:n-1
            resto=rem(n,m);
            if resto == 0
                divisori(m)=m;
            else
                divisori(m)=0;
            end
        end
        somma_divisori=sum(divisori);
        if somma_divisori == n
            flag=1;
        else
            flag=0;
        end
    end
end




% codice alternativo
% valore=isinteger(n);
% if valore == 0 % n: numero reale non intero
%     flag=-1; return;
% end
% 
% if n <= 0 % n: numero intero non positivo
%     flag=-1; return;
% end
% 
% divisori=[];
% for m=1:n-1
%     resto=rem(n,m);
%     if resto == 0
%         divisori(m)=m;
%     else
%         divisori(m)=0;
%     end
% end
% 
% somma_divisori=sum(divisori);
% if somma_divisori == n
%     flag=1;
% else
%     flag=0;
% end


function valore=isitinteger(n)

value=n-round(n);

if value == 0
    valore=1;
else
    valore=0;
end


