ene 21

Etiquetas: , , , , ,

Como llevaba toda la tarde repasando cosillas del matlab, y llevaba muchos meses sin programar, se me ocurrió hacer una pequeña y sencilla función para calcular el disco duro más económico en función de una lista de discos en la que se indica su capacidad y su precio. Es cierto que hay muchos otros factores a tener en cuenta, pero bueno, podemos hacer un pequeño parche que os cuento ahora ;) . Por lo pronto, aquí os dejo la función (muy sencilla y, por supuesto, mejorable [por ejemplo, sustituyendo los for por operaciones elemento a elemento xD]):

Uso de la función:


>> help discosduros
[precio_giga,mas_barato,mas_caro]=calculador_discos(referencias,capacidades,precios);
Esta función calcula el disco duro más barato y el más caro
de la lista especificada.

PARAMETROS DE ENTRADA:
- referencias: vector con los identificadores de los discos
OJO: las referencias deben ser un valor entero
- capacidades: vector con las capacidades de los discos
- precios: vector con los precios de los discos

PARAMETROS DE SALIDA:
- precio_giga: vector con los precios por giga de cada uno de los discos
- mas_barato: referencia del disco mas barato
- mas_caro: referencia del disco mas caro

Función en sí:


function [precio_giga,mas_barato,mas_caro]=calculador_discos(referencias,capacidades,precios);
%[precio_giga,mas_barato,mas_caro]=calculador_discos(referencias,capacidades,precios);
%Esta función calcula el disco duro más barato y el más caro
%de la lista especificada.
%
%PARAMETROS DE ENTRADA:
%- referencias: vector con los identificadores de los discos
%OJO: las referencias deben ser un valor entero
%- capacidades: vector con las capacidades de los discos
%- precios: vector con los precios de los discos
%
%PARAMETROS DE SALIDA:
%- precio_giga: vector con los precios por giga de cada uno de los discos
%- mas_barato: referencia del disco mas barato
%- mas_caro: referencia del disco mas caro

fprintf('Se va a analizar el precio de %i discos.\n',length(capacidades))

if length(precios)~=length(capacidades)
error('El numero de capacidades no corresponde con el numero de precios')
elseif length(precios)~=length(referencias)
error('El numero de referencias no corresponde con el numero de precios')
end

precio_giga=zeros(1,length(capacidades));

for i=1:length(capacidades)
precio_giga(i)=precios(i)/capacidades(i);
end

figure(1)
plot(precio_giga)
xlabel('Situacion del disco en el vector');
ylabel('Precio por giga');

mas_barato=referencias(find(precio_giga==min(precio_giga)));
mas_caro=referencias(find(precio_giga==max(precio_giga)));

fprintf('El disco mas barato es el %i\n',mas_barato);
fprintf('El disco mas caro es el %i\n',mas_caro);

Ahora vamos con los peros. Es cierto que se pueden considerar más cosas aparte de la capacidad, como la velocidad de giro, el tiempo de acceso, la caché, el fabricante… Por ejemplo, probé la función con la lista de discos de PCBox y me salió que el más económico era un Western digital, pero son discos que no me gustan, así que sería interesante acceder al segundo disco más barato. Para eso basta con introducir los siguientes comandos (quien quiera editar la función, ya sabe):


precio_giga_ordenado=sort(precio_giga);
referencias(find(precio_giga==precio_giga_ordenado(i)));

Con el primer comando reordenamos la lista de precios por giga de menor a mayor (más óptimo a menos óptimo en función de la capacidad), y con el segundo, obtenemos la referencia del disco i en esa lista ordenada (i=1 se corresponderá con el más óptimo, i=2 con el segundo más óptimo, i=length(precio_giga_ordenado) será el menos óptimo…). De esta forma, si el más óptimo no nos convence por alguna de sus características, podemos buscar la referencia del siguiente, para ver si nos sirve.

Supongo que es un método un poco chapucero de hacer todo ésto, pero bueno, me aburría y hacer la funcioncilla me sirvió para pasar el rato :P

Deja una ida de olla