return FALSE;
}
/* TODO Verificar que el paso no sea cero y que tf > ti. */
- /* XXX - sacar */
- printf("paso = %f, tf = %f, f0 = %f\n", *paso, *tf, *f0);
return TRUE;
}
/* Itero paso a paso calculando el valor de la función. */
for (i = 1; i < pasos; i++) {
/* f(t+paso) = FUNCION(paso, f(t)) */
- (*res)[i] = FUNCION(paso, (*res)[i-1]);
- /* FIXME sacar!!!! */
- printf("i = %i, t = %.2f, f(t) = %.2f\n", i, (Real)i * paso, (*res)[i]);
+ (*res)[i] = FUNCION(paso, (*res)[i-1]);
}
return pasos;
}
-Real max(const Resultados* res, size_t pasos) {
- size_t i;
- Real max = (*res)[0];
+Real resultados_max(Resultados* res, size_t pasos) {
+ size_t i;
+ Real max = (*res)[0];
for (i = 1; i < pasos; i++) {
if ((*res)[i] > max) {
max = (*res)[i];
return max;
}
-Real min(const Resultados* res, size_t pasos) {
- size_t i;
- Real min = (*res)[0];
+Real resultados_min(Resultados* res, size_t pasos) {
+ size_t i;
+ Real min = (*res)[0];
for (i = 1; i < pasos; i++) {
if ((*res)[i] < min) {
min = (*res)[i];
return min;
}
+void inicializar_linea(char* linea, char caracter, size_t cant) {
+ size_t j;
+ for (j = 0; j < cant; j++) {
+ linea[j] = caracter;
+ }
+ linea[cant] = '\0';
+}
+
+void resultados_graficar(Resultados* res, size_t pasos, char punto, char blanco) {
+ /* Máximo valor de la función. */
+ Real min;
+ /* Mínimo valor de la función. */
+ Real max;
+ /* Paso utilizado para la representación de las líneasMínimo valor de la función. */
+ Real pasoh;
+ int i;
+ int j;
+ 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, MAX_PASOS);
+ /* Por cada línea a dibujar. */
+ for (i = ALTO; i >= 0; i--) {
+ /* Se fija si hay algún punto que entre en el rango. */
+ for (j = 0; j < pasos; j++) {
+ /* Si está entre en el rango a imprimir, se agrega un punto. */
+ if (((min + pasoh * i) <= (*res)[j])
+ && ((*res)[j] < (min + pasoh * (i + 1)))) {
+ linea[j] = punto;
+ /* Si no, se lo deja en blanco. */
+ } else {
+ linea[j] = blanco;
+ }
+ }
+ printf("%8.2f _%s\n", min + pasoh * i, linea);
+ }
+}
+
int main(int argc, const char** argv) {
/* TODO: Declaración de variables. */
Resultados resultados;
size_t pasos;
- Real paso = DEFAULT_PASO;
- Real tf = DEFAULT_TF;
- Real f0 = DEFAULT_F0;
+ Real paso = DEFAULT_PASO;
+ Real tf = DEFAULT_TF;
+ Real f0 = DEFAULT_F0;
+ char punto = '*';
+ char blanco = ' ';
/* Obtención de datos. */
if (!cargar_datos(argc, argv, &paso, &tf, &f0)) {
/* Cálculo de la solución, dejando en un array los valores de cada paso. */
pasos = 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. */
- /* TODO: Liberación de memoria y otras limpiezas, en caso de ser necesario. */
+ resultados_graficar(&resultados, pasos, punto, blanco);
+
return EXIT_SUCCESS;
}