]> git.llucax.com Git - z.facultad/75.12/tp2.git/blob - calcula_periodo
Se expanden keywords del svn.
[z.facultad/75.12/tp2.git] / calcula_periodo
1 #!/usr/bin/php4 -qC
2 <?
3 // vim: set tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
4 //
5 // Trabajo Práctico II de Análisis Numérico I
6 // Este programa resuelve un sistema de ecuaciones diferenciales
7 // resultante de un problema físico de oscilación de líquidos.
8 // Copyright (C) 2002 Leandro Lucarella <leandro@lucarella.com.ar>
9 // 
10 // Este programa es Software Libre; usted puede redistribuirlo
11 // y/o modificarlo bajo los términos de la "GNU General Public
12 // License" como lo publica la "FSF Free Software Foundation",
13 // o (a su elección) de cualquier versión posterior.
14 // 
15 // Este programa es distribuido con la esperanza de que le será
16 // útil, pero SIN NINGUNA GARANTIA; incluso sin la garantía
17 // implícita por el MERCADEO o EJERCICIO DE ALGUN PROPOSITO en
18 // particular. Vea la "GNU General Public License" para más
19 // detalles.
20 // 
21 // Usted debe haber recibido una copia de la "GNU General Public
22 // License" junto con este programa, si no, escriba a la "FSF
23 // Free Software Foundation, Inc.", 59 Temple Place - Suite 330,
24 // Boston, MA  02111-1307, USA.
25 //
26 // $URL: http://www.llucax.hn.org:81/svn/facultad/75.12/tp2/calcula_periodo $
27 // $Date: 2002-12-01 02:26:18 -0300 (dom, 01 dic 2002) $
28 // $Rev: 33 $
29 // $Author: luca $
30 //
31
32 // Muestra ayuda.
33 if ( $argc < 2 ) {
34     echo "Modo de uso:\n";
35     echo "$argv[0] archivo\n";
36     exit;
37 }
38
39 // Abre archivo y obtiene datos iniciales.
40 $f = fopen( $argv[1], 'r' );
41 $s = fgets( $f, 4096 )
42     or die( "El archivo está vacío o no se pudo abrir.\n" );
43 list( $t0, $z0 ) = preg_split( '/\s/', $s );
44
45 // Procesa archivo calculando período.
46 $t_ant  = 0;
47 $c      = 0;
48 $t_sum  = 0;
49 $t_max  = 0;
50 $tt_max = 0;
51 $t_min  = 5000;
52 $tt_min = 0;
53 while ( ( $s = fgets( $f, 4096 ) ) !== false ) {
54     // Obtiene datos.
55     list( $t, $z ) = preg_split( '/\s/', $s );
56     // Se fija si es un "cero decreciente".
57     if ( $z0 > 0 and ( $z < 0  or $z == 0 ) ) {
58         if ( $t_ant ) {
59             $t_actual = $t - $t_ant;
60             if ( $t_actual > $t_max ) {
61                 $t_max  = $t_actual;
62                 $tt_max = $t;
63             }
64             if ( $t_actual < $t_min ) {
65                 $t_min  = $t_actual;
66                 $tt_min = $t;
67             }
68             echo "$t_actual\n";
69             $t_sum += $t_actual;
70             $t_ant = $t;
71             $c++;
72         } else {
73             $t_ant = $t;
74         }
75     }
76     // Actualiza valores anteriores.
77     $t0 = $t;
78     $z0 = $z;
79 }
80
81 fclose( $f );
82
83 // Imprime período.
84 echo "Períodos promedio: " . $t_sum / $c . " ($c períodos promediados)\n";
85 echo "Período máximo: $t_max (en t = $tt_max)\n";
86 echo "Período mínimo: $t_min (en t = $tt_min)\n";
87
88 ?>