Advertisement
r_russo

Búsqueda

May 24th, 2022
1,227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.50 KB | None | 0 0
  1. {
  2.     Se dispone de una estación meteorológica que cada media hora, se registran los valores de todos los sensores y se
  3.     almacenan en una memoria. Completado el día y cada 24hs, reporta sus mediciones en forma de archivo de texto.
  4.     Este archivo contiene tres campos por línea:
  5.         - Horario de registro: en formato HHMM
  6.         - Temperatura en grados Celsius
  7.         - Humedad relativa en %
  8.     Se pide escribir un programa que permita cargar esos datos en vectores paralelos para poder determinar:
  9.         1) Mostrar los datos cargados en un tabla
  10.         2) Mostrar las mediciones para un horario que ingresa el usuario por teclado (hora y minuto por separado).
  11.         Verificar que el horario ingresado sea correcto (minutos entre 0 y 59 y horas entre 0 y 23).
  12. }
  13.  
  14. program sensores;
  15.  
  16. type
  17.     TVectorHorario = array[1..50] of Word;
  18.     TVectorMedicion = array[1..50] of Real;
  19.    
  20. var
  21.     g_cantidad: Byte;
  22.     g_vec_hora: TVectorHorario;
  23.     g_vec_temp, g_vec_hum: TVectorMedicion;
  24.     g_opcion: Char;
  25.  
  26. procedure cargar_datos(var cantidad: Byte; var vec_hora: TVectorHorario;
  27.         var vec_temp: TVectorMedicion; var vec_hum: TVectorMedicion);
  28.        
  29. var
  30.     archivo: Text;
  31.  
  32. begin
  33.     assign(archivo, 'datos.txt');
  34.     reset(archivo);
  35.  
  36.     cantidad := 0;
  37.     while not eof(archivo) do
  38.     begin
  39.         cantidad := cantidad + 1;
  40.         readln(archivo, vec_hora[cantidad], vec_temp[cantidad], vec_hum[cantidad]);
  41.     end;
  42. end;
  43.  
  44. procedure mostrar_en_tabla(cantidad: Byte; vec_hora: TVectorHorario;
  45.         vec_temp: TVectorMedicion; vec_hum: TVectorMedicion);
  46.        
  47. var
  48.     i: Byte;
  49.  
  50. begin
  51.     writeln('Horario|Temperatura|Humedad');
  52.     writeln('-------+-----------+-------');
  53.     for i := 1 to cantidad do
  54.     begin
  55.         writeln(vec_hora[i]:7, '|', vec_temp[i]:11:2, '|', vec_hum[i]:7:2);
  56.     end;
  57. end;
  58.  
  59. function busqueda_secuencial(horario: Word; cantidad: Byte; vec_hora: TVectorHorario): Byte;
  60. var
  61.     i: Byte;
  62. begin
  63.     i := 1;
  64.     while (i <= cantidad) and (horario <> vec_hora[i]) do
  65.     begin
  66.         i := i + 1;
  67.     end;
  68.     busqueda_secuencial := i;
  69. end;
  70.  
  71. function busqueda_binaria(horario: Word; cantidad: Byte; vec_hora: TVectorHorario): Byte;
  72. var
  73.     a, b, m: Byte;
  74. begin
  75.     a := 1;
  76.     b := cantidad;
  77.     m := (a + b) div 2;
  78.     while (a < b) and (horario <> vec_hora[m]) do
  79.     begin
  80.         if horario < vec_hora[m] then
  81.         begin
  82.             b := m - 1;
  83.         end
  84.         else
  85.         begin
  86.             a := m + 1;
  87.         end;
  88.         m := (a + b) div 2;
  89.     end;
  90.    
  91.     if vec_hora[m] = horario then
  92.         busqueda_binaria := m
  93.     else
  94.         busqueda_binaria := cantidad + 1;
  95. end;
  96.  
  97. procedure buscar_horario(cantidad: Byte; vec_hora: TVectorHorario;
  98.         vec_temp: TVectorMedicion; vec_hum: TVectorMedicion);
  99.        
  100. var
  101.     hora, minutos, i: Byte;
  102.     horario: Word;
  103.        
  104. begin
  105.     write('Ingrese la hora (0 - 23):');
  106.     readln(hora);
  107.    
  108.     while hora >= 24 do
  109.     begin
  110.         write('Ingresó mal la hora. Por favor vuelva a ingresar la hora: ');
  111.         readln(hora);
  112.     end;
  113.    
  114.     write('Ingrese los minutos (0 - 59):');
  115.     readln(minutos);
  116.    
  117.     while minutos >= 60 do
  118.     begin
  119.         write('Ingresó mal los minutos. Por favor vuelva a ingresar los minutos: ');
  120.         readln(minutos);
  121.     end;
  122.    
  123.     horario := hora * 100 + minutos;
  124.    
  125.     // i := busqueda_secuencial(horario, cantidad, vec_hora);
  126.     i := busqueda_binaria(horario, cantidad, vec_hora);
  127.    
  128.     if i > cantidad then
  129.         writeln('No se encontró el registro para ese horario')
  130.     else
  131.     begin
  132.         writeln('La temperatura medida fue ', vec_temp[i]:0:2, '°C');
  133.         writeln('La humedad medida fue ', vec_hum[i]:0:2, '%');
  134.     end;
  135. end;
  136.  
  137. procedure mostrar_menu();
  138.  
  139. begin
  140.     writeln('Elija una opción:');
  141.     writeln('     1) Mostrar los datos cargados en un tabla');
  142.     writeln('     2) Mostrar las mediciones para un horario');
  143.     writeln('     s) Salir');
  144. end;
  145.  
  146. begin
  147.     cargar_datos(g_cantidad, g_vec_hora, g_vec_temp, g_vec_hum);
  148.    
  149.     mostrar_menu();
  150.     readln(g_opcion);
  151.     while upcase(g_opcion) <> 'S' do
  152.     begin
  153.         case g_opcion of
  154.             '1': mostrar_en_tabla(g_cantidad, g_vec_hora, g_vec_temp, g_vec_hum);
  155.             '2': buscar_horario(g_cantidad, g_vec_hora, g_vec_temp, g_vec_hum);
  156.         else
  157.             writeln('Opción no reconocida');
  158.         end;
  159.        
  160.         mostrar_menu();
  161.         readln(g_opcion);
  162.     end;
  163.    
  164. end.
  165.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement