1 /* vim: set et sts=4 sw=4 fdm=indent fdl=1 fdn=1 fo+=t tw=80:
3 * Taller de Programación (75.42).
6 * Programa calculadora.
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/).
12 * Creado: sáb ago 30 18:56:28 ART 2003
17 /** \mainpage Trabajo Práctico II
20 También puede ver <a href="../latex/refman.pdf">este documento en formato
25 También puede ver este documento en formato HTML en html/index.html.
28 \section consigna Consigna.
29 \subsection temas Temas a practicar.
30 - Estructura de un programa.
31 - Directivas y Macros.
34 - Estructuras de datos (Lista).
35 - Declaraciones / definiciones.
36 - Estructuras (struct) y tipos de datos del usuario (typedef).
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.
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.
53 Desarrollar una función MemList (), que liste los bloques de memoria
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
64 -# Los bloques liberados no deben ser listados.
65 -# Limitar el nombre del archivo a 20 caracteres.
67 \subsection parte2 Parte 2 - Calculadora.
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.
77 matem.exe var.txt eq.txt
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ú:
87 3 - Evaluar ecuaciones
88 4 - Listar bloques de memoria alocados
92 - La opcion 1 debe listar las variables definidas e indicar
93 un alerta si alguna de ellas esta fuera del rango definido
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
100 - La opcion 5 debe terminar
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
109 a = 20 * 10 + (2 / b) * (pi + c)
112 \subsubsection archivo_variables Archivo de variables.
114 Archivo en formato texto, donde se almacenan variables,
115 con el siguiente formato:
117 [NOMBRE][espacios][VALOR][espacios][MINIMO][espacios][MAXIMO][salto de linea]
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'.
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.
135 temperatura 25 -30 70
138 \subsubsection archivo_ecuaciones Archivo de ecuaciones.
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>.
147 a = 10 * (b + a) * (b + 2*pi)
151 Puede suponerse que estas ecuaciones son válidas.
153 \section conclusiones Conclusiones.
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.