• Publicidad

Problemas con funciones seno y coseno

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

Problemas con funciones seno y coseno

Notapor lis » 2008-11-22 15:57 @706

Hola amigos del foro: Hice un script y no me funciona y según yo está bien pero aún no veo dónde está el error para que me funcione, a ver si me ayudan.

Tengo una carpeta que se llama Abril y dentro de ésta tengo 30 archivos con extensión .dat que, a modo de ejemplo, uno de estos archivos contiene lo siguiente:

Código: Seleccionar todo
1001.0    137   13.2    9.1     76   7.29    170      3  286.3  306.8  287.5
1000.0    125   13.0    8.0     72   6.77    165      2  286.1  305.3  287.3
 925.0    774    7.4    7.0     97   6.84    245      2  286.9  306.2  288.1
 915.0    863    6.6    6.0     96   6.45    155      8  286.9  305.3  288.1
 913.0    881    6.6    6.2     97   6.55    136      9  287.1  305.7  288.3
 911.0    899    9.0    4.0     71   5.63    118     10  289.8  306.1  290.8
 910.0    909   10.8   -9.2     24   2.10    109     10  291.7  298.2  292.1
 909.0    918   12.0   -9.3     22   2.09    100     11  293.0  299.5  293.4
 903.0    974   19.0  -10.0     13   1.99    117     11  300.8  307.2  301.2
 893.0   1069   20.8   -9.2     12   2.14    147     10  303.6  310.6  304.0


Y este es mi script:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

while ($data=<Abril/*.dat>) {
    $fecha=substr($data,6,5);

    open (DATOS, "<$data");
    open (ARCHIVOS, ">$fecha.dat");

    while($lineas=<DATOS>){
        chop($lineas);
        @datos=split(" ",$lineas);

        $u=$datos[7]*cos($datos[6]);
        $v=$datos[7]*sin($datos[6]);

        print ARCHIVOS "$u $v\n";
    }
}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Lo que quiero hacer es multiplicar todos los valores de la columna ocho, de cada archivo .dat, por el seno de cada valor de la columna 7.

Les agradezco cualquier ayuda, adiós.
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946

Publicidad

Notapor creating021 » 2008-11-22 16:19 @722

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
use strict;

my @ficheros = glob "*.dat";
foreach my $fichero ( @ficheros ) {
    my $salida = substr( $fichero, 6, 5 );
    open FL, $fichero or die "Error con $fichero: $!\n";
    open SALIDA, $salida or die "Error con $salida $!\n";
    while ( my $linea = <FL> ){
        chomp $linea;
        my @datos = split " ", $linea;
        my $sin = $datos[7] * ( sin $datos[6] );
        my $cos = $datos[7] * ( cos $datos[7] );
        print SALIDA "$sin $cos\n";
    }
    close SALIDA;
    close FL;
}
 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Una posible solución...
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor lis » 2008-11-22 17:46 @782

Gracias Creating021 por tu respuesta, me ayudaste a solucionar el problema, pero en el script faltaba poner algo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 open FL, "<$fichero" or die "Error con $fichero $!\n";
open SALIDA, ">$salida.dat" or die "Error con $salida $!\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Te agradezco tu valiosa ayuda, adiós.... :P
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946

Notapor explorer » 2008-11-22 18:01 @792

Pero... me parece que la columna del ángulo está en grados... y las funciones trigonométricas solo usan valores en radianes... hay que hacer una conversión... ¿no?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;

my $GRADOSaRADIANES = 3.14/180;

for my $fichero ( <Abril/*.dat> ) {
    my $fecha = substr($fichero, 6, 5);

    open (DATOS,   "<$fichero"  )       or die "$!\n";
    open (ARCHIVO, ">$fecha.dat")       or die "$!\n";

    while ( <DATOS> ) {
        my ($ang, $hip) = (split)[6,7];

        $ang *= $GRADOSaRADIANES;

        printf ARCHIVO "%5.2f %5.2f\n",
                       $hip * cos $ang,
                       $hip * sin $ang;
    }

    close DATOS;
    close ARCHIVO;
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2008-11-23 06:17 @303, editado 2 veces en total
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

Notapor lis » 2008-11-22 18:49 @825

¡¡¡¡Genial, Explorer, como siempre!!!! Muchas gracias.
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 41 invitados

cron