• Publicidad

Calcular parámetro con dos matrices

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Calcular parámetro con dos matrices

Notapor lis » 2018-09-05 22:05 @962

Hola, Perleros.

Tengo que estimar un índice de ignición (adjunto la tabla con los valores predeterminados, ignicion.jpg), que depende de la temperatura y de una humedad, donde este último va de 2 a 17, y debe calcularse a diario (también les adjunto los archivo de temperatura y humedad).

Hice un código, pero solo para el primer rango de temperatura que es de 30 a 39 °F y sólo para el primer valor de cada matriz.

En esto quiero pedirles su ayuda y orientación, para que sea óptimo el cálculo para cada rango de temperaturas y su humedad, y por supuesto la matriz resultante (9x19) guardarla en un archivo.

Muchas gracias.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. my (@tmp, @hcfm, $pi, @PI);
  6.  
  7. for my $files (glob("*_TMP.txt *_CFM.txt")) {  
  8.  
  9. my $name=substr($files,0,-8);
  10. my $f1 = $name . '_TMP.txt';
  11. my $f2 = $name . '_CFM.txt';
  12. my $f3 = $name . '_PI.txt';
  13.  
  14. open( PI, '>', $f3);
  15.  
  16. open( TMP, '<', $f1);
  17. while( <TMP> ) {
  18. chomp;
  19. my @rowtmp = split;
  20. push (@tmp, \@rowtmp);
  21. }
  22. close (TMP);
  23.  
  24. open( HCFM, '<', $f2);
  25. while( <HCFM> ) {
  26. chomp;
  27. my @rowhcfm = split ;
  28. push (@hcfm, \@rowhcfm);
  29. }
  30. close (HCFM);
  31.  
  32. # foreach my $fila ( 0 .. 8 ){
  33. # foreach my $columna ( 0 .. 18) {
  34.  
  35. if (($tmp[0][0] >= 30) &&  ($tmp[0][0] <= 39)  && ($hcfm[0][0] <= 2))  {$PI[0][0] = 80}
  36. if (($tmp[0][0] >= 30) &&  ($tmp[0][0] <= 39)  && ($hcfm[0][0] == 3))  {$PI[0][0] = 70}
  37. if (($tmp[0][0] >= 30) &&  ($tmp[0][0] <= 39)  && ($hcfm[0][0] == 4))  {$PI[0][0] = 60}
  38. if (($tmp[0][0] >= 30) &&  ($tmp[0][0] <= 39)  && ($hcfm[0][0] == 5))  {$PI[0][0] = 50}
  39. if (($tmp[0][0] >= 30) &&  ($tmp[0][0] <= 39)  && ($hcfm[0][0] == 6))  {$PI[0][0] = 50}
  40. if (($tmp[0][0] >= 30) &&  ($tmp[0][0] <= 39)  && ($hcfm[0][0] == 7))  {$PI[0][0] = 40}
  41. if (($tmp[0][0] >= 30) &&  ($tmp[0][0] <= 39)  && ($hcfm[0][0] == '8'))  {$PI[0][0] = 30}
  42. if (($tmp[0][0] >= 30) &&  ($tmp[0][0] <= 39)  && ($hcfm[0][0] == 9))  {$PI[0][0] = 30}
  43. if (($tmp[0][0] >= 30) &&  ($tmp[0][0] <= 39)  && ($hcfm[0][0] == 10 or $hcfm[0][0] == 11 or $hcfm[0][0] == 12)) {$PI[0][0] = 20}
  44. if (($tmp[0][0] >= 30) &&  ($tmp[0][0] <= 39)  && ($hcfm[0][0] == 13 or $hcfm[0][0] == 14 or $hcfm[0][0] == 15)) {$PI[0][0] = 10}
  45.  
  46. # print PI @PI;
  47. print PI (join("\t", @$_), "\n") for @PI;
  48. close PI;
  49. # }}
  50. }
  51.  
  52.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Adjuntos
ignicion.jpg
ignicion.jpg (27.75 KiB) Visto 1761 veces
Valle_TMP.txt
(894 Bytes) 142 veces
Valle_CFM.txt
(876 Bytes) 141 veces
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946

Publicidad

Re: Calcular parámetro con dos matrices

Notapor explorer » 2018-09-06 12:46 @574

Bueno, en las tablas hay valores de temperatura inferiores a 30, o porcentajes de humedad superiores a 17, así que no sabemos qué hacer en esos casos.

Lo de poner un montón de if() es... muy cansado.

Hay formas mejores de resolverlo. Fíjate que los porcentajes de humedad se incrementan de uno en uno (empezando en 2), así que pueden servir como índices dentro de una fila o array. Y la temperatura va por tramos de 10 grados, así que la reducción a valores de índice empezando por 0 también es factible y fácil. El resultado es que tienes dos índices que te permiten acceder a un elemento dentro de un vector de dos dimensiones (un array de arrays).

Solo tienes que hacer el doble bucle para recorrer los valores de entrada, y calcular el valor de ignición para ese punto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Calcular parámetro con dos matrices

Notapor lis » 2018-09-06 13:44 @614

Gracias, explorer, vamos a ver qué se puede hacer. :idea:
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados