1 /* vim: set et ts=4 sw=4 fdm=indent fdl=1 fdn=1 fo+=t:
3 * Taller de Programación (75.42).
6 * Graficador de la solución de una ecuación diferencial por el método
7 * de Euler (explícito).
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/).
13 * Creado: sáb ago 23 16:59:01 ART 2003
21 /* Para utilizar printf() y stderr */
23 /* Para utilizar EXIT_SUCCES y EXIT_FAILURE */
26 /** Tiempo inicial por omisión. */
27 #define DEFAULT_T0 0.0
29 /** Tiempo final por omisión. */
30 #define DEFAULT_TF 70.0
32 /** Valor inicial de la función por omisión. */
33 #define DEFAULT_F0 0.0
35 /** Valor del pas de iteración por omisión. */
36 #define DEFAULT_PASO 1.0
38 /** Caracter usado para dibujar un punto por omisión. */
39 #define DEFAULT_PUNTO '*'
41 /** Caracter usado para dibujar un punto blanco por omisión. */
42 #define DEFAULT_BLANCO ' '
45 * Imprime una explicación de como usar el programa.
47 * \param fh Archivo en donde imprimir el mensaje (ej: stdout o stderr).
49 void imprimir_uso(FILE* fh) {
51 fprintf(fh, "Modo de uso:\n");
52 fprintf(fh, " tp1 [paso [tf [f0]]]\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",
63 * Este es el programa que se encarga de resolver el trabajo práctico.
65 * \param argc Cantidad de parámetros de línea de comandos ingresados.
66 * \param argv Parámetros de línea de comandos.
68 * \return EXIT_FAILURE si hubo un error, si no EXIT_SUCCESS.
70 int main(int argc, const char** argv) {
71 /* Declaración de variables. */
72 Resultados resultados; /* Vector de resultados. */
73 size_t pasos; /* Cantidad de pasos a dibujar. */
74 Real paso = DEFAULT_PASO; /* Tamaño del paso */
75 Real t0 = DEFAULT_T0; /* Tiempo inicial */
76 Real tf = DEFAULT_TF; /* Tiempo final */
77 Real f0 = DEFAULT_F0; /* Valor inicial de la función */
78 char punto = DEFAULT_PUNTO; /* Caracter para dibujar un punto */
79 char blanco = DEFAULT_BLANCO; /* Caracter para dibujar un blanco */
80 /* Obtención de datos. */
81 if (!cargar_datos(argc, argv, &paso, &t0, &tf, &f0)) {
82 /* Si hay error, imprime mensaje con modo de uso y sale con error. */
86 /* Cálculo de la solución, dejando en un array los valores de cada paso. */
87 pasos = resultados_calcular(&resultados, paso, t0, tf, f0);
88 /* Impresión de variables principales. */
89 printf("\nt0 = %f | tf = %f | f0 = %f | paso = %f | pasos = %i\n\n",
90 t0, tf, f0, paso, pasos);
91 /* Impresión del gráfico de la solución. */
92 resultados_graficar(&resultados, pasos, punto, blanco);