-/* vim: set et ts=4 sw=4 fdm=indent fdl=1 fdn=1 fo+=t:
- *
- * Taller de Programación (75.42).
- *
- * Ejercicio Número 1:
- * Graficador de la solución de una ecuación diferencial por el método
- * de Euler (explícito).
- *
- * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
- * Puede copiar, modificar y distribuir este programa bajo los términos de
- * la licencia GPL (http://www.gnu.org/).
- *
- * Creado: sáb ago 23 16:59:01 ART 2003
- *
- * $Id$
- */
-
-/************************ BIBLIOTECAS USADAS *******************************/
-
-/* Para utilizar printf(), fprintf() y stderr */
-#include <stdio.h>
-/* Para utilizar strtod(), EXIT_SUCCES y EXIT_FAILURE */
-#include <stdlib.h>
-
-
-
-/***************************** CONSTANTES **********************************/
-
-/** Indica un valor verdadero */
-#define TRUE 1
-
-/** Indica un valor falso */
-#define FALSE 0
-
-/** Máxima cantidad de pasos a calcular. */
-#define MAX_PASOS 70
-
-/** Altura (en líneas) utilizadas para dibujar el gráfico. */
-#define ALTO 20
-
-/** Ancho (en líneas) utilizadas para dibujar el gráfico. */
-#define ANCHO 70
-
-/** Tiempo inicial. */
-#define T0 0.0
-
-/** Tiempo final por omisión. */
-#define DEFAULT_TF 70.0
-
-/** Valor inicial de la función por omisión. */
-#define DEFAULT_F0 0.0
-
-/** Valor del pas de iteración por omisión. */
-#define DEFAULT_PASO 1.0
-
-
-
-/******************************* MACROS ************************************/
-
-/**
- * \ref integracion "Calcula" el siguiente paso de la función numérica.
- * Obtiene el siguiente valor de \f$ f \f$, integrando numéricamente la \ref
- * funcion "ecuación diferencial" por el \ref metodo "método de euler".
- * \f[
- * f_{t + step} = f_{(step, f_t)} = f_t + \frac{500 - f_t}{30} \cdot step
- * \f]
- *
- * \note Se pone en un macro para poder reemplazar fácilmente la función sin la
- * pérdida de velocidad que agrega la indirección de un llamado a una
- * función.
- */
-#define FUNCION(paso, ft) ((ft) + ((500.0 - (ft)) / 30.0) * paso)
-
-
-
-/************************ TIPOS DE DATOS UTILIZADOS ************************/
-
-/**
- * Tipo de dato utilizado para medir el tiempo y el valor de la función.
- * Se define como un tipo de dato propio para cambiar fácilmente la precisión.
- */
-typedef float Real;
-
-/**
- * Vector que representa los resultados.
- * El índice del vector representa el número de iteración (que multiplicado por
- * el paso da el tiempo, o eje X). El contenido es el valor de la
- * \ref funcion "función" en ese instante.
- */
-typedef Real Resultados[MAX_PASOS];
-
-
-
-/********************************* FUNCIONES *******************************/
-
-/**
- * Imprime una explicación de como usar el programa.
- *
- * \param fh Archivo en donde imprimir el mensaje (ej: stdout o stderr).
- */
-void imprimir_uso(FILE* fh);
-
-/**
- * Carga (validando) un dato real en una variable.
- * Si al validar hay algún error, muestra un mensaje por la salida de error y
- * devuelve false.
- *
- * \param arg Argumento a cargar (y validar).
- * \param var Variable en donde cargar el real.
- * \param nom Nombre de la variable que se quiere cargar (para el mensaje de
- * error, en caso de haberlo).
- *
- * \return TRUE si se cargó bien, FALSE si no.
- */
-int argtod(const char* arg, Real* var, const char* nom);
-
-/**
- * Carga los datos necesarios por el \ref main "programa".
- * Obtiene los datos desde los parámetros de la línea de comandos, validándolos
- * y mostrando un mensaje de error en caso de haberlo.
- *
- * \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 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);
-
-/**
- * \ref integracion "Calcula" todos los valores de la función.
- *
- * \param res Vector donde se guardan los resultados.
- * \param paso Paso de iteración.
- * \param ti Tiempo de inicio de la iteración.
- * \param tf Tiempo final de la iteración.
- * \param f0 Valor inicial de la función.
- *
- * \return Cantidad de pasos realizados.
- */
-size_t calcular(Resultados* res, Real paso, Real ti, Real tf, Real f0);
-
-/**
- * Devuelve el valor máximo de los resultados.
- *
- * \param res Vector de resultados.
- * \param pasos Cantidad de pasos a iterar.
- *
- * \return Máximo resultado.
- */
-Real resultados_max(Resultados* res, size_t pasos);
-
-/**
- * Devuelve el valor mínimo de los resultados.
- *
- * \param res Vector de resultados.
- * \param pasos Cantidad de pasos a iterar.
- *
- * \return Mínimo resultado.
- */
-Real resultados_min(Resultados* res, size_t pasos);
-
-/**
- * Rellena una cadena de caracteres con un caracter arbitrario.
- *
- * \param linea Cadena de caracteres.
- * \param caracter Caracter utilizado para rellenar.
- * \param cant Cantidad de caracteres a rellenar.
- */
-void inicializar_linea(char* linea, char caracter, size_t cant);
-
-/**
- * Imprime un gráfico de los resultados por pantalla.
- * Realiza un gráfico de la función por pantalla, imprimiendo línea por línea.
- * Cada línea representa un rango de valores. En cada línea se dibuja el
- * caracter \e punto si la función en el tiempo evaluado está en el rango de esa
- * línea. Si no lo está se dibuja el caracter \e blanco.
- *
- * \param res Vector de resultados a graficar.
- * \param pasos Cantidad de pasos a graficar.
- * \param punto Caracter utilizado para dibujar un punto de la función.
- * \param blanco Caracter utilizado para dibujar un punto en blanco.
- */
-void resultados_graficar(Resultados* res, size_t pasos, char punto, char blanco);
-
-/**
- * Programa principal.
- * Este es el programa que se encarga de resolver el trabajo práctico.
- *
- * \param argc Cantidad de parámetros de línea de comandos ingresados.
- * \param argv Parámetros de línea de comandos.
- *
- * \return EXIT_FAILURE si hubo un error, si no EXIT_SUCCESS.
- */
-int main(int argc, const char** argv);
-