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++) {
26 /* Temino la cadena con caracter nulo. */
30 Real resultados_max(Resultados* res, size_t pasos) {
33 for (i = 1; i < pasos; i++) {
34 if ((*res)[i] > max) {
41 Real resultados_min(Resultados* res, size_t pasos) {
44 for (i = 1; i < pasos; i++) {
45 if ((*res)[i] < min) {
52 void resultados_graficar(Resultados* res, size_t pasos, char punto, char blanco) {
53 /* Máximo valor de la función. */
54 Real min = resultados_min(res, pasos);
55 /* Mínimo valor de la función. */
56 Real max = resultados_max(res, pasos);
57 /* Paso utilizado para la representación de las líneas. */
58 Real pasoh = (max - min) / (ALTO);
59 /* Variables de iteración. */
62 /* Buffer de la línea a imprimir. */
64 /* Inicializa la línea. */
65 inicializar_linea(linea, blanco, ANCHO);
66 /* Por cada línea a dibujar. */
67 for (i = ALTO; i >= 0; i--) {
68 /* Se fija si hay algún punto que entre en el rango. */
69 for (j = 0; j < pasos; j++) {
70 /* Si está entre en el rango a imprimir, se agrega un punto. */
71 if (((min + pasoh * i) <= (*res)[j])
72 && ((*res)[j] < (min + pasoh * (i + 1)))) {
74 /* Si no, se lo deja en blanco. */
79 /* Imprime la línea actual. */
80 printf("%8.2f _%s\n", min + pasoh * i, linea);