3 // vim: set tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
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>
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.
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
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.
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) $
34 echo "Modo de uso:\n";
35 echo "$argv[0] archivo\n";
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 );
45 // Procesa archivo calculando período.
53 while ( ( $s = fgets( $f, 4096 ) ) !== false ) {
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 ) ) {
59 $t_actual = $t - $t_ant;
60 if ( $t_actual > $t_max ) {
64 if ( $t_actual < $t_min ) {
76 // Actualiza valores anteriores.
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";