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_maxmin $
27 // $Date: 2002-12-01 02:26:18 -0300 (dom, 01 dic 2002) $
34 echo "Modo de uso:\n";
35 echo "$argv[0] modo archivo\n";
36 echo "Donde modo es 'max' para calcular los máximos o 'min' para calcular los mínimos.\n";
40 // Abre archivos y obtiene datos iniciales.
41 $f = fopen( $argv[2], 'r' )
42 or die( "Error al abrir $argv[2] para lectura.\n" );
43 $s = fgets( $f, 4096 )
44 or die( "El archivo $argv[2] está vacío.\n" );
45 list( $t0, $z0, $dz0 ) = preg_split( '/\s/', $s );
47 // El primer valor siempre es un máximo.
48 if ( $argv[1] == 'max' )
51 // Procesa archivo calculando máximos y mínimos.
52 while ( ( $s = fgets( $f, 4096 ) ) !== false ) {
54 list( $t, $z, $dz ) = preg_split( '/\s/', $s );
55 // Se fija si la derivada es un "cero decreciente" (si es un máximo).
56 if ( $argv[1] == 'max' and $dz0 > 0 and ( $dz < 0 or $dz == 0 ) )
61 // Se fija si la derivada es un "cero creciente" (si es un mínimo).
62 if ( $argv[1] == 'min' and $dz0 < 0 and ( $dz > 0 or $dz == 0 ) )
67 // Actualiza valores anteriores.