X-Git-Url: https://git.llucax.com/z.facultad/75.42/euler.git/blobdiff_plain/977e05b75c7af07b8b733b0ce17c0f9e5cefa13b..cd5e734a119e8827615d5a51820d048f32efdcae:/documentacion.h diff --git a/documentacion.h b/documentacion.h index a5c1b2b..c791966 100644 --- a/documentacion.h +++ b/documentacion.h @@ -1,8 +1,8 @@ -/* 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). * - * Ejercicio Número 1: + * Trabajo Práctico Número 1: * Graficador de la solución de una ecuación diferencial por el método * de Euler (explícito). * @@ -15,10 +15,19 @@ * $Id$ */ -/** \mainpage Taller de Programación I (75.42) +/** \mainpage Trabajo Práctico I + +\htmlonly +También puede ver este documento en formato +PDF. +\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 + Desarrollar un \ref tp1.c "programa" que resuelva, utilizando un \ref metodo "método iterativo", una \ref funcion "función diferencial" en un intervalo de tiempo dado. \note Utilizar sólo funciones ANSI C. @@ -26,7 +35,7 @@ \section desarrollo Desarrollo. \subsection parte1 Parte 1. Dada una \ref funcion "función diferencial" \f$df_{(t)}\f$, - desarrolle un \ref main "programa" que calcule la integral de la + desarrolle un \ref tp1.c "programa" que calcule la integral de la misma utilizando el método iterativo (\ref metodo "Euler explícito"), tal como se explica a continuación. Almacene estos resultados en un \ref Resultados "vector". @@ -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: @@ -69,14 +78,15 @@ \endverbatim \section resolucion Resolución. - El \ref main "programa principal" se divide en FIXME N tareas principales, + El \ref tp1.c "programa principal" se divide en 3 tareas principales, cada una realizada por una función particular. \subsection obtencion Obtención y validación de parámetros del usuario. 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). Esto es realizado - por la función cargar_datos(). + a través de parámetros de línea de comandos). Esta tarea es realizada + 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$ @@ -95,7 +105,79 @@ 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 corridas Corridas de ejemplo. + A continuación se presentan corridas del programa junto a los parámetros + con los cuales ha sido llamado. + + \$ ./tp1 2 + \verbinclude corrida_2.txt + \$ ./tp1 2 -200 -150 + \verbinclude corrida_2__200__150.txt + \$ ./tp1 2 20a0 -150 + \verbinclude corrida_2_20a0__150.txt + \$ ./tp1 2 200 -150 + \verbinclude corrida_2_200__150.txt + \anchor inestable \$ ./tp1 50 5000 + \verbinclude corrida_50_5000.txt + +\section requerimientos Requerimientos y modo de uso. + \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. + El ejecutable entregado corre bajo esta esta plataforma y u uso se + describe en la \ref uso "sección siguiente". + + 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. + + \subsection uso Modo de uso. + El programa debe ser llamado desde un intérprete de comandos. Acepta + parámetros opcionales pasados como argumento: + \verbatim ./tp1 [paso [tf [f0]]] \endverbatim + Donde: + - \c paso es el paso a utilizar. Si no se especifica se usa un + \ref DEFAULT_PASO "valor por omisión". + - \c tf es el tiempo final en el cual se intentará evaluar la + función (no siempre será posible porque si el paso es muy + pequeño uede no llegarse a este tiempo final). Si no se + especifica se usa un \ref DEFAULT_TF "valor por omisión". + - \c f0 es el valor inicial (en \ref DEFAULT_T0 "el tiempo inicial") + de la función. Si no se especifica se usa un + \ref DEFAULT_F0 "valor por omisión". + +\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á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 + \ref inestable "inestable". */