]> git.llucax.com Git - z.facultad/75.42/euler.git/blob - tp1.c
c004b889dfd3912163a2fc211fbb9ccd8bb74c93
[z.facultad/75.42/euler.git] / tp1.c
1 /* vim: set et ts=4 sw=4 fdm=indent fdl=1 fdn=1 fo+=t:
2  *
3  * Taller de Programación (75.42).
4  *
5  * Ejercicio Número 1:
6  * Graficador de la solución de una ecuación diferencial por el método
7  * de Euler (explícito).
8  *
9  * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
10  * Puede copiar, modificar y distribuir este programa bajo los términos de
11  * la licencia GPL (http://www.gnu.org/).
12  *
13  * Creado: sáb ago 23 16:59:01 ART 2003
14  *
15  * $Id$
16  */
17
18 #include "carga.h"
19 #include "calculo.h"
20 #include "grafico.h"
21 /* Para utilizar printf() y stderr */
22 #include <stdio.h>
23 /* Para utilizar EXIT_SUCCES y EXIT_FAILURE */
24 #include <stdlib.h>
25
26 /** Tiempo inicial. */
27 #define T0 0.0
28
29 /** Tiempo final por omisión. */
30 #define DEFAULT_TF 70.0
31
32 /** Valor inicial de la función por omisión. */
33 #define DEFAULT_F0 0.0
34
35 /** Valor del pas de iteración por omisión. */
36 #define DEFAULT_PASO 1.0
37
38 /** Caracter usado para dibujar un punto por omisión. */
39 #define DEFAULT_PUNTO '*'
40
41 /** Caracter usado para dibujar un punto blanco por omisión. */
42 #define DEFAULT_BLANCO ' '
43
44 /**
45  * Imprime una explicación de como usar el programa.
46  *
47  * \param fh Archivo en donde imprimir el mensaje (ej: stdout o stderr).
48  */
49 void imprimir_uso(FILE* fh) {
50     fprintf(fh, "\n");
51     fprintf(fh, "Modo de uso:\n");
52     fprintf(fh, "  tp1 [paso [tf [f0]]]\n");
53     fprintf(fh, "\n");
54     fprintf(fh, "Donde:\n");
55     fprintf(fh, "  paso: Paso a utilizar (%.2f por omisión).\n", DEFAULT_PASO);
56     fprintf(fh, "  tf:   Tiempo final (%.2f por omisión).\n", DEFAULT_TF);
57     fprintf(fh, "  f0:   Valor inicial de la función (%.2f por omisión).\n",
58             DEFAULT_F0);
59 }
60
61 /**
62  * Programa principal.
63  * Este es el programa que se encarga de resolver el trabajo práctico.
64  *
65  * \param argc Cantidad de parámetros de línea de comandos ingresados.
66  * \param argv Parámetros de línea de comandos.
67  *
68  * \return EXIT_FAILURE si hubo un error, si no EXIT_SUCCESS.
69  */
70 int main(int argc, const char** argv) {
71     /* Declaración de variables. (TODO: describir variables) */
72     Resultados  resultados;
73     size_t      pasos;
74     Real        paso    = DEFAULT_PASO;
75     Real        tf      = DEFAULT_TF;
76     Real        f0      = DEFAULT_F0;
77     char        punto   = DEFAULT_PUNTO;
78     char        blanco  = DEFAULT_BLANCO;
79     /* Obtención de datos. */
80     if (!cargar_datos(argc, argv, &paso, &tf, &f0)) {
81         /* Si hay error, imprime mensaje con modo de uso y sale con error. */
82         imprimir_uso(stderr);
83         return EXIT_FAILURE;
84     }
85     /* Cálculo de la solución, dejando en un array los valores de cada paso. */
86     pasos = resultados_calcular(&resultados, paso, T0, tf, f0);
87     /* XXX - sacar o poner más lindo. */
88     printf("paso = %f, tf = %f, f0 = %f, pasos = %i\n", paso, tf, f0, pasos);
89     /* TODO: Barrido de pantalla de arriba hacia abajo consultando el array
90      *       y dibujando los resultados pertinentes. */
91     resultados_graficar(&resultados, pasos, punto, blanco);
92     return EXIT_SUCCESS;
93 }
94