]> git.llucax.com Git - z.facultad/75.12/tp2.git/blob - calcula_maxmin
Se expanden keywords del svn.
[z.facultad/75.12/tp2.git] / calcula_maxmin
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_maxmin $
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 < 3 ) {
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";
37     exit;
38 }
39
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 );
46
47 // El primer valor siempre es un máximo.
48 if ( $argv[1] == 'max' )
49     echo "$t0 $z0\n";
50
51 // Procesa archivo calculando máximos y mínimos.
52 while ( ( $s = fgets( $f, 4096 ) ) !== false ) {
53     // Obtiene datos.
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 ) )
57         if ( $z0 > $z )
58             echo "$t0 $z0\n";
59         else
60             echo "$t $z\n";
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 ) )
63         if ( $z0 < $z )
64             echo "$t0 $z0\n";
65         else
66             echo "$t $z\n";
67     // Actualiza valores anteriores.
68     $t0  = $t;
69     $z0  = $z;
70     $dz0 = $dz;
71 }
72
73 fclose( $f );
74
75 ?>