]> git.llucax.com Git - z.facultad/75.42/euler.git/commitdiff
Se completa el TP y la documentación.
authorLeandro Lucarella <llucax@gmail.com>
Tue, 26 Aug 2003 05:37:00 +0000 (05:37 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Tue, 26 Aug 2003 05:37:00 +0000 (05:37 +0000)
Doxyfile
carga.c
carga.h
documentacion.h
grafico.c
tp1.c

index bf54cacd03924d7436215e30fc6c34b3947d1eb9..aaa5c7901889cdcb79f97e5a3e1b141b42f26ec4 100644 (file)
--- a/Doxyfile
+++ b/Doxyfile
@@ -126,7 +126,7 @@ LATEX_HIDE_INDICES     = YES
 GENERATE_RTF           = NO
 RTF_OUTPUT             = rtf
 COMPACT_RTF            = NO
-RTF_HYPERLINKS         = NO
+RTF_HYPERLINKS         = YES
 RTF_STYLESHEET_FILE    = 
 RTF_EXTENSIONS_FILE    = 
 #---------------------------------------------------------------------------
@@ -135,7 +135,7 @@ RTF_EXTENSIONS_FILE    =
 GENERATE_MAN           = NO
 MAN_OUTPUT             = man
 MAN_EXTENSION          = .3
-MAN_LINKS              = NO
+MAN_LINKS              = YES
 #---------------------------------------------------------------------------
 # configuration options related to the XML output
 #---------------------------------------------------------------------------
@@ -161,7 +161,7 @@ ENABLE_PREPROCESSING   = YES
 MACRO_EXPANSION        = YES
 EXPAND_ONLY_PREDEF     = NO
 SEARCH_INCLUDES        = YES
-INCLUDE_PATH           = /usr/include
+INCLUDE_PATH           = 
 INCLUDE_FILE_PATTERNS  = 
 PREDEFINED             = 
 EXPAND_AS_DEFINED      = 
diff --git a/carga.c b/carga.c
index 67470880fa3622ceb536f17716dbf659d6b2725b..108a8104d9954aa33dbffa6e0b420b581dbce433 100644 (file)
--- a/carga.c
+++ b/carga.c
@@ -39,7 +39,8 @@ int argtod(const char* arg, Real* var, const char* nom) {
     }
 }
 
-int cargar_datos(int argc, const char** argv, Real* paso, Real* tf, Real* f0) {
+int cargar_datos(int argc, const char** argv, Real* paso, Real* t0, Real* tf,
+        Real* f0) {
     switch (argc) {
         /* Si no tiene parámetros usa los valores por omisión. */
         case 1:
@@ -69,7 +70,17 @@ int cargar_datos(int argc, const char** argv, Real* paso, Real* tf, Real* f0) {
             fprintf(stderr, "Error: Demasiados parámetros.\n");
             return FALSE;
     }
-    /* TODO Verificar que el paso no sea cero y que tf > ti. */
+    /* El paso debe ser mayor que cero. */
+    if (*paso <= 0.0) {
+        fprintf(stderr, "Error: El paso (%f) debe ser mayor que cero.", *paso);
+        return FALSE;
+    }
+    /* El tiempo final debe ser mayor que el inicial. */
+    if (*t0 >= *tf) {
+        fprintf(stderr, "Error: El tiempo final (%f) no es mayor que ", *tf);
+        fprintf(stderr, "el tiempo inicial (%f).", *t0);
+        return FALSE;
+    }
     return TRUE;
 }
 
diff --git a/carga.h b/carga.h
index 376364277613d11ba64d593fabd0d5880ad51ef2..968dac11e56062a4637f5139321c7bb70b8af3f9 100644 (file)
--- a/carga.h
+++ b/carga.h
@@ -42,14 +42,12 @@ int argtod(const char* arg, Real* var, const char* nom);
  * \param argc Cantidad de parámetros de línea de comandos ingresados.
  * \param argv Parámetros de línea de comandos.
  * \param paso Paso utilizado para las iteraciones.
+ * \param t0   Tiempo inicial.
  * \param tf   Tiempo final.
  * \param f0   Valor inicial de la función.
  *
  * \return TRUE si se cargaron bien, FALSE si no.
- * \todo \b TODO: Verificar que el paso no sea cero y que tf > ti.
- * \todo \b TODO: Agregar opciones para especificar caracter en blanco y de
- *                punto.
  */
-int cargar_datos(int argc, const char** argv, Real* paso, Real* tf, Real* f0);
+int cargar_datos(int argc, const char** argv, Real* paso, Real* t0, Real* tf, Real* f0);
 
 #endif
index efae98d7d1225f870cae873ac3d59c76027e06f1..d5d4e7ff46a3cea93d95183949cc0c7b9a0b4413 100644 (file)
@@ -1,4 +1,4 @@
-/* vim: set et ts=4 sw=4 fdm=indent fdl=1 fdn=1 fo+=t:
+/* vim: set et ts=4 sw=4 fdm=indent tw=80 fdl=1 fdn=1 fo+=t:
  *
  * Taller de Programación (75.42).
  *
 
 /** \mainpage Taller de Programación I (75.42)
 
+\htmlonly
+También puede ver <a href="../latex/refman.pdf">este documento en formato
+PDF</a>.
+\endhtmlonly
+
+\latexonly
+También puede ver este documento en formato HTML en html/index.html.
+\endlatexonly
+
 \section objetivo Objetivo.
     Desarrollar un \ref main "programa" que resuelva, utilizando un
     \ref metodo "método iterativo", una \ref funcion "función diferencial"
@@ -37,7 +46,7 @@
             \f]
 
         \subsubsection variables Variables.
-            - \f$t_i\f$:     \ref T0 "Tiempo inicial de la iteración" = 0.
+            - \f$t_i\f$: Tiempo inicial de la iteración = 0.
 
             Solicitar al usuario el ingreso de las restantes variables por
             línea de comandos:
@@ -76,7 +85,8 @@
         Antes de comenzar a hacer cálculos es necesario obtener los valores de
         las \ref variables "variables" de la entrada del usuario (en este caso
         a través de parámetros de línea de comandos). Esta tarea es realizada
-        por la función cargar_datos().
+        por la función cargar_datos(). En el archivo carga.c y carga.h puede
+        encontrarse esta función y otras funciones relacionadas a esta tarea.
 
     \subsection integracion Integración de la ecuación diferencial.
         Reemplazando la \ref funcion "ecuación diferencial" \f$ df_{(t)} \f$
 
         Todo lo que resta es iterar, paso a paso, calculando los valores de la
         función y almacenándolos en el \ref Resultados "vector de resultados",
-        tarea realizada por la función calcular().
+        tarea realizada por la función resultados_calcular(). En el archivo
+        calculo.c y calculo.h puede encontrarse esta función y otras funciones
+        relacionadas a esta tarea.
 
     \subsection impresion Impresión del gráfico por pantalla.
         Finalmente todo lo que queda es graficar por pantalla el resultado de la
         función. Para esto se va imprimiendo línea por línea, chequeando qué
         punto de la función cae en cada rango de valores representados por una
         línea. Esta tarea es realizada por la función resultados_graficar().
+        En el archivo grafico.c y grafico.h puede encontrarse esta función y
+        otras funciones relacionadas a esta tarea.
+
+    \subsection plataforma Plataforma y compilador.
+        Este trabajo práctico fue realizado y probado bajo la plataforma Debian
+        GNU/Linux sid. El compilador utilizado fue GNU GCC versión 3.3.1.
+
+        De todas formas, al estar programado sólo utilizando funciones ANSI C,
+        debería poder compilarse bajo cualquier plataforma y compilador que
+        soporte este estándar.
 
 \section conclusiones Conclusiones.
     Realmente no se me presentaron muchos problemas para resolver el TP. El
     único problema que tuve fue realizando el \ref impresion "gráfico", en
     ciertas circunstancias (por problemas de redondeo) el valor máximo de la
     función no era graficado. Esto se solucionó incluyendo una línea más al
-    gráico, con el rango que va desde el máximo de la función (en realidad desde
-    el mínimo más 20 pasos verticales) hasta el máximo más un paso vertical.
-    Es por esto que en realidad se grafican 21 pasos. Podría haber graficado 20
-    pasos pero el código quedaría menos claro (o tendría que poner la constante
-    \ref ALTO en 19 en vez de 20).
+    gráfico, con el rango que va desde el máximo de la función (en realidad
+    desde el mínimo más 20 pasos verticales) hasta el máximo más un paso
+    vertical. Es por esto que en realidad se grafican 21 pasos. Podría haber
+    graficado 20 pasos pero el código quedaría menos claro (o tendría que
+    poner la constante \ref ALTO en 19 en vez de 20).
+
+    El programa también fue pensado para aceptar como parámetros el caracter
+    utilizado para dibujar un \ref DEFAULT_PUNTO "punto" de la función y un
+    espacio en \ref DEFAULT_BLANCO "blanco", así como el
+    \ref DEFAULT_T0 "tiempo inicial". Por problemas de tiempo, no pude
+    terminar de implementar estas características extra.
 
     Otro detalle que cabe ser mencionado es que para valores altos del
     \ref variables "step" (mayores a 30), la solución se vuelve inestable.
index 173c955a12047016ca36a444651ec61d0d5fabe9..e7d423f8b78bfddb6f3978f4b2c0c7ef863c4217 100644 (file)
--- a/grafico.c
+++ b/grafico.c
@@ -23,6 +23,7 @@ void inicializar_linea(char* linea, char caracter, size_t cant) {
     for (j = 0; j < cant; j++) {
         linea[j] = caracter;
     }
+    /* Temino la cadena con caracter nulo. */
     linea[cant] = '\0';
 }
 
@@ -50,18 +51,16 @@ Real resultados_min(Resultados* res, size_t pasos) {
 
 void resultados_graficar(Resultados* res, size_t pasos, char punto, char blanco) {
     /* Máximo valor de la función. */
-    Real min;
+    Real min = resultados_min(res, pasos);
     /* Mínimo valor de la función. */
-    Real max;
+    Real max = resultados_max(res, pasos);
     /* Paso utilizado para la representación de las líneasMínimo valor de la función. */
-    Real pasoh;
+    Real pasoh = (max - min) / (ALTO);
+    /* Variables de iteración. */
     int  i;
     int  j;
+    /* Buffer de la línea a imprimir. */
     char linea[ANCHO];
-    min = resultados_min(res, pasos);
-    max = resultados_max(res, pasos);
-    pasoh = (max - min) / (ALTO);
-    printf("min: %f, max: %f, pasoh: %f\n", min, max, pasoh);
     /* Inicializa la línea. */
     inicializar_linea(linea, blanco, ANCHO);
     /* Por cada línea a dibujar. */
@@ -77,6 +76,7 @@ void resultados_graficar(Resultados* res, size_t pasos, char punto, char blanco)
                 linea[j] = blanco;
             }
         }
+        /* Imprime la línea actual. */
         printf("%8.2f _%s\n", min + pasoh * i, linea);
     }
 }
diff --git a/tp1.c b/tp1.c
index c004b889dfd3912163a2fc211fbb9ccd8bb74c93..d68bb58a1da5ea8ad40b8c0bee6c64fb183bffb1 100644 (file)
--- a/tp1.c
+++ b/tp1.c
@@ -23,8 +23,8 @@
 /* Para utilizar EXIT_SUCCES y EXIT_FAILURE */
 #include <stdlib.h>
 
-/** Tiempo inicial. */
-#define T0 0.0
+/** Tiempo inicial por omisión. */
+#define DEFAULT_T0 0.0
 
 /** Tiempo final por omisión. */
 #define DEFAULT_TF 70.0
@@ -68,26 +68,26 @@ void imprimir_uso(FILE* fh) {
  * \return EXIT_FAILURE si hubo un error, si no EXIT_SUCCESS.
  */
 int main(int argc, const char** argv) {
-    /* Declaración de variables. (TODO: describir variables) */
-    Resultados  resultados;
-    size_t      pasos;
-    Real        paso    = DEFAULT_PASO;
-    Real        tf      = DEFAULT_TF;
-    Real        f0      = DEFAULT_F0;
-    char        punto   = DEFAULT_PUNTO;
-    char        blanco  = DEFAULT_BLANCO;
+    /* Declaración de variables. */
+    Resultados  resultados; /* Vector de resultados. */
+    size_t      pasos; /* Cantidad de pasos a dibujar. */
+    Real        paso    = DEFAULT_PASO; /* Tamaño del paso */
+    Real        t0      = DEFAULT_T0; /* Tiempo inicial */
+    Real        tf      = DEFAULT_TF; /* Tiempo final */
+    Real        f0      = DEFAULT_F0; /* Valor inicial de la función */
+    char        punto   = DEFAULT_PUNTO; /* Caracter para dibujar un punto */
+    char        blanco  = DEFAULT_BLANCO; /* Caracter para dibujar un blanco */
     /* Obtención de datos. */
-    if (!cargar_datos(argc, argv, &paso, &tf, &f0)) {
+    if (!cargar_datos(argc, argv, &paso, &t0, &tf, &f0)) {
         /* Si hay error, imprime mensaje con modo de uso y sale con error. */
         imprimir_uso(stderr);
         return EXIT_FAILURE;
     }
     /* Cálculo de la solución, dejando en un array los valores de cada paso. */
-    pasos = resultados_calcular(&resultados, paso, T0, tf, f0);
-    /* XXX - sacar o poner más lindo. */
-    printf("paso = %f, tf = %f, f0 = %f, pasos = %i\n", paso, tf, f0, pasos);
-    /* TODO: Barrido de pantalla de arriba hacia abajo consultando el array
-     *       y dibujando los resultados pertinentes. */
+    pasos = resultados_calcular(&resultados, paso, t0, tf, f0);
+    /* Impresión de variables principales. */
+    printf("\nt0 = %f | tf = %f | f0 = %f | paso = %f | pasos = %i\n\n", t0, tf, f0, paso, pasos);
+    /* Impresión del gráfico de la solución. */
     resultados_graficar(&resultados, pasos, punto, blanco);
     return EXIT_SUCCESS;
 }