Estación meteorológica

De Ejercicios

Contenido

Enunciado

Tenemos una estación meteorológica que nos proporciona los datos de temperaturas a lo largo de una semana completa, empezándose a medir cualquier día entre el lunes y el domingo. Los datos se almacenan en un fichero de 3 líneas: la 1ª almacena el día de la semana en el que se empiezan a tomar medidas, la 2ª para temperaturas mínimas y la 3ª para las máximas. Por ejemplo:

miércoles
 2    0    4    6    5    7    6		
12    9   10   20   16   18   14		

Lo que significa que los datos de este archivo se empiezaron a medir el miércoles, y el viernes (tercer dato de cada fila) hubo una temperatura mínima de 4 y máxima de 10

Apartado 1. Implementa un módulo que dado el nombre de un archivo con el formato anteriormente indicado devuelva en un parámetro el día de la semana de inicio y en otro una matriz con los datos de las temperaturas.
Apartado 2. Implementa un programa que pida al usuario el nombre del archivo con los datos de las temperaturas y calcule y muestre un vector con la diferencia entre temperaturas máxima y mínima de cada día de la semana y el día en el que se obtuvo una mayor diferencia entre ambas. Si hay varios con el mismo valor se puede devolver cualquiera de ellos.
Para el ejemplo anterior, el vector que debe devolver es
10	9	6	14	11	11	8
Y el día: sábado (diferencia 14 y cuarto día, empezando desde el miércoles)

Soluciones

Programa en Matlab

Apartado 1

function [dia,temperaturas]=Lectura(nombre)
%Parámetros de entrada:
%   nombre: nombre del fichero donde están los datos
%Parámetros de salida:
%   dia: día de la semana en que comienzan las mediciones (1ª fila 
%         fichero)
%   temperaturas: matriz con 2 filas (temperatura máxima y mínima de 
%   los días de la semana)
 
fich=fopen(nombre,'r');
if (fich==-1)
    dia=' ';
    temperaturas=[];
else
    dia=fscanf(fich,'%s',1);
    temperaturas=fscanf(fich,'%d',[7,2]);
    fclose(fich);
    temperaturas=temperaturas';
end

Apartado 2

%Programa Temperaturas
%Entradas:
%   nombre: nombre del fichero donde están los datos,
%       día de la semana en que comienzan las mediciones y 
%       temperaturas máxima y mínima de los días de la semana)
%Salidas:la diferencia entre temperaturas máxima y mínima de cada día de la
%       semana y el día en el que se obtuvo una mayor diferencia entre ambas
 
nombrefich=input('Introduce el nombre del fichero: ','s');
[inicio,temp]=Lectura(nombrefich); 
if (inicio==' ')
    disp('Error al abrir el fichero');
else
    diferencias=temp(2,:)-temp(1,:);
    [mayor,pmayor]=max(diferencias);
    switch (inicio)
        case 'lunes'
            pos=1;
        case 'martes'
            pos=2;
        case 'miércoles'
            pos=3;
        case 'jueves'
            pos=4;
        case 'viernes'
            pos=5;
        case 'sábado'
            pos=6;
        case 'domingo'
            pos=7;
    end
    dias=[pos:1:7,1:1:pos-1];
    switch (dias(pmayor))
        case 1
            diamayor='lunes';
        case 2
            diamayor='martes';
        case 3
            diamayor='miércoles';
        case 4
            diamayor='jueves';
        case 5
            diamayor='viernes';
        case 6
            diamayor='sábado';
        case 7
            diamayor='domingo';
    end
    disp('Las diferencias de temperatura en los días han sido: ');
    disp(diferencias);
    disp(['La diferencia máxima se alcanzó el ',diamayor,' con ',num2str(mayor),' grados']);
end