function cent = centros_barras(a,b,n)
% function cent = centros_barras(a,b,n) 
% Devolver un vector con los centros de las barras de un histograma
% definido en el intervalo [a,b], si deseamos n barras
% a,b: numeros reales, con a < b
% n: numero (entero) de barras que se desean
% cent: vector fila con las coordenadas de los centros de las barras
%
% El uso tipico de esta funcion es como auxiliar para dibujar un
% histograma, por ejemplo:
% hist(norminv(rand(1,10000)),centros_barras(-4,4,60))
% Ricard Torres (rtorres@itam.mx)

if ( nargin ~= 3 )
   mostrar_uso();
   error('La funcion requiere tres argumentos');
end

if ~ and( isscalar(a), and( isscalar(b), isscalar(n) ) )
   mostrar_uso();
   error('Los argumentos deben ser numericos');
end

if ( a >= b )
   mostrar_uso();
   error('a debe ser estrictamente menor a b');
end

if ( n < 1 )
   mostrar_uso();
   error('n debe ser mayor o igual a 1');
end

% Aseguramos que n es entero, pero que opera como numero real
n = double(uint64(n)); 
% El ancho de cada barra
barra = (b - a) / n;
% el primer centro tiene por coordenada a + (barra/2), y
% el ultimo centro b - (barra/2)
cent = [ a + (barra/2) : barra : b - (barra/2) ] ;

end

function mostrar_uso()
fprintf('Uso: function cent = centros_barras(a,b,n)\n');
fprintf('Devolver un vector con los centros de las barras de un histograma\n');
fprintf('definido en el intervalo [a,b], si deseamos n barras\n');
fprintf('a,b: numeros reales, con a < b\n');
fprintf('n: numero (entero) de barras que se desean\n');
fprintf('cent: vector fila con las coordenadas de los centros de las barras\n');
fprintf('\nEl uso tipico de esta funcion es como auxiliar para dibujar un\n');
fprintf('histograma, por ejemplo:\n');
fprintf('hist(norminv(rand(1,10000)),centros_barras(-4,4,60))\n');
end




