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 void inicializar_linea(char* linea, char caracter, size_t cant) {
23 for (j = 0; j < cant; j++) {
29 Real resultados_max(Resultados* res, size_t pasos) {
32 for (i = 1; i < pasos; i++) {
33 if ((*res)[i] > max) {
40 Real resultados_min(Resultados* res, size_t pasos) {
43 for (i = 1; i < pasos; i++) {
44 if ((*res)[i] < min) {
51 void resultados_graficar(Resultados* res, size_t pasos, char punto, char blanco) {
52 /* Máximo valor de la función. */
54 /* Mínimo valor de la función. */
56 /* Paso utilizado para la representación de las líneasMínimo valor de la función. */
61 min = resultados_min(res, pasos);
62 max = resultados_max(res, pasos);
63 pasoh = (max - min) / (ALTO);
64 printf("min: %f, max: %f, pasoh: %f\n", min, max, pasoh);
65 /* Inicializa la línea. */
66 inicializar_linea(linea, blanco, ANCHO);
67 /* Por cada línea a dibujar. */
68 for (i = ALTO; i >= 0; i--) {
69 /* Se fija si hay algún punto que entre en el rango. */
70 for (j = 0; j < pasos; j++) {
71 /* Si está entre en el rango a imprimir, se agrega un punto. */
72 if (((min + pasoh * i) <= (*res)[j])
73 && ((*res)[j] < (min + pasoh * (i + 1)))) {
75 /* Si no, se lo deja en blanco. */
80 printf("%8.2f _%s\n", min + pasoh * i, linea);