]> git.llucax.com Git - z.facultad/75.42/calculadora.git/blob - documentacion.h
Versión preliminar del programa del TP. Falta evaluar ecuaciones.
[z.facultad/75.42/calculadora.git] / documentacion.h
1 /* vim: set et sts=4 sw=4 fdm=indent fdl=1 fdn=1 fo+=t tw=80:
2  *
3  * Taller de Programación (75.42).
4  *
5  * Ejercicio Número 2:
6  * Programa calculadora.
7  *
8  * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
9  * Puede copiar, modificar y distribuir este programa bajo los términos de
10  * la licencia GPL (http://www.gnu.org/).
11  *
12  * Creado: sáb ago 30 18:56:28 ART 2003
13  *
14  * $Id$
15  */
16
17 /** \mainpage Trabajo Práctico II
18
19 \htmlonly
20     También puede ver <a href="../latex/refman.pdf">este documento en formato
21     PDF</a>.
22 \endhtmlonly
23
24 \latexonly
25     También puede ver este documento en formato HTML en html/index.html.
26 \endlatexonly
27
28 \section consigna Consigna.
29     \subsection temas Temas a practicar.
30         - Estructura de un programa.
31         - Directivas y Macros.
32         - Códigos de error.
33         - Punteros.
34         - Estructuras de datos (Lista).
35         - Declaraciones / definiciones.
36         - Estructuras (struct) y tipos de datos del usuario (typedef).
37         - Memoria dinámica.
38         - Archivos.
39
40     \subsection introduccion Introducción.
41         El trabajo práctico consiste en desarrollar un programa capaz
42         de evaluar ecuaciones aritméticas, y se compone de dos partes,
43         un manejador de memoria y un módulo matemático.
44
45     \subsection parte1 Parte 1 - Memlist.
46         Desarrollar las funciones malloc2() y free2(), y las
47         correspondientes macros para que al llamar a malloc() y free()
48         se llamen estas funciones.  Las nuevas funciones deben almacenar
49         información de la memoria alocada.  Esta información debe incluir:
50         Puntero, cantidad de bytes alocados, hora, nombre y linea del
51         archivo donde se realizó el malloc.
52
53         Desarrollar una función MemList (), que liste los bloques de memoria
54         alocada.
55         
56         Por ejemplo: 
57         \verbatim
58 Dirección Bytes Archivo Linea Fecha Hora
59 0x48252342 300 ejemplo.c 200  20/08 10:30:30
60 0x48252342 400 ejemplo.c 1110 20/08 10:30:40
61         \endverbatim
62
63         \note
64             -# Los bloques liberados no deben ser listados.
65             -# Limitar el nombre del archivo a 20 caracteres.
66
67     \subsection parte2 Parte 2 - Calculadora.
68
69         Desarrolle un programa capaz de evaluar ecuaciones
70         aritméticas. Para ello deberá cargar en memoria dos archivos,
71         uno de los cuales contiene una lista de variables y otro una
72         lista de ecuaciones. Los nombres de estos archivos deben tomarse
73         por linea de comandos.
74
75         Por ejemplo:
76         \verbatim
77 matem.exe var.txt eq.txt
78         \endverbatim
79
80         Las variables deberán cargarse en una lista de estructuras en
81         memoria, y las ecuaciones en una lista de strings. Una vez hecho
82         esto, el programa deberá mostrar el siguiente menú:
83
84         \verbatim
85 1 - Listar variables
86 2 - Listar ecuaciones
87 3 - Evaluar ecuaciones
88 4 - Listar bloques de memoria alocados
89 5 - Salir
90         \endverbatim
91
92         - La opcion 1 debe listar las variables definidas e indicar
93           un alerta si alguna de ellas esta fuera del rango definido
94           (mínimo y máximo).
95         - La opcion 2 debe listar las ecuaciones.
96         - La opcion 3 debe evaluar las ecuaciones definidas y recalcular
97           los valores de las variables.
98         - La opcion 4 debe listar los bloques de memoria alocados
99           llamando a MemList.
100         - La opcion 5 debe terminar
101           el programa.
102
103         En caso de producirse un error, se debe mostrar en memoria una
104         descripción del mismo, pero no debe interrumpirse la ejecución
105         del programa.
106         
107         Por ejemplo:
108         \verbatim
109 a = 20 * 10 + (2 / b) *  (pi + c)
110         \endverbatim
111
112         \subsubsection archivo_variables Archivo de variables.
113
114             Archivo en formato texto, donde se almacenan variables,
115             con el siguiente formato:
116             \verbatim
117 [NOMBRE][espacios][VALOR][espacios][MINIMO][espacios][MAXIMO][salto de linea]
118             \endverbatim
119
120             Donde:
121                 - \b \c NOMBRE:   Es un string con el nombre de una variable.
122                 - \b \c VALOR:    Es el valor de la variable.
123                 - \b \c MINIMO:   Valor mínimo que puede tomar la variable.
124                 - \b \c MAXIMO:   Valor máximo que puede tomar la variable.
125                 - \b \c espacios: Caracteres \c ' ' o \c '\\t'.
126
127             Los valores mínimo y máximo son opcionales. Si no están,
128             la variable es una constante y no puede ser modificada.
129
130             Por ejemplo:
131             \verbatim
132 a 20.0 10.0 30.0
133 pi 3.14
134 b 23.0 123 800
135 temperatura 25 -30 70
136             \endverbatim
137
138         \subsubsection archivo_ecuaciones Archivo de ecuaciones.
139
140             Es un archivo de texto con el formato <em>variable =
141             ecuación</em>, donde ecuación es una ecuación con sintaxis C,
142             que puede contener los operadores: <tt>+</tt>, <tt>-</tt>,
143             <tt>*</tt>, <tt>/</tt>, <tt>(</tt>, <tt>)</tt>.
144             
145             Por ejemplo:
146             \verbatim
147 a = 10 * (b + a) * (b + 2*pi)
148 b = b * 2
149             \endverbatim
150
151             Puede suponerse que estas ecuaciones son válidas.
152
153 \section conclusiones Conclusiones.
154
155     Problemas:
156         - "Sobrecarga" de malloc. Lo hacía antes de un #include <stdlib.h> y me
157           tiraba un error porque la definicion de la stdlib me expandía el macro.
158         - La búsqueda en la lista al liberar la memoria se realiza de atrás hacia
159           adelante para que sea más eficiente, ya que generalmente se borra primero
160           la memoria que se pidió úitima. 
161         - DLList no usa el memdebug, está bastante testeada y no pierde memoria.
162
163 */