Professional Documents
Culture Documents
Gestin/Sistemas
10
MDULOS
Contenido
_____________________________________________________________________
10.1.- Introduccin.
10.1.1.- Ventajas de la modularizacin de programas.
10.1.2.- Creacin de un proyecto con Dev-C++.
10.2.- Mdulos de biblioteca.
10.2.1.- Espacios de nombres.
10.2.2.- Mdulos de Definicin.
10.2.3.- Mdulos de Implementacin.
10.2.4.- Ejemplo. El mdulo Mcomplejo.
10.3.- Compilacin separada.
10.4.- Estructuras de Datos Avanzadas.
10.4.1.- Pilas.
10.4.2.- Colas.
10.4.3.- rboles Binarios.
10.5.- Un Ejemplo Completo.
Ejercicios
_____________________________________________________________________
10.1.- Introduccin
Para entender el concepto de mdulo, pinsese que se nos encargara disear un automvil.
Seguramente lo haramos definiendo las distintas partes independientes que lo constituyen
(carrocera, motor, sistema elctrico, transmisin, etc.) as como la manera de conectar estos
sistemas entre s. La definicin de estos sistemas (mdulos) se hace de manera que sean lo
ms independientes posible unos de otros. Esta es la esencia de una buena modularidad.
Igualmente, cualquier programa real est compuesto por varias partes separadas.
Hasta ahora hemos utilizado los procedimientos y funciones para escribir estas partes en las
que dividimos la solucin a un problema. El uso de mdulos pretende ser un paso ms en la
metodologa del diseo descendente, permitiendo definir por separado las distintas partes de
un programa y las interfaces entre ellas. Adems, un mdulo permite agrupar elementos que
compartan alguna afinidad.
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 1
Los mdulos son una herramienta potente para crear grandes programas. Un
programador puede disear un programa grande como un conjunto de mdulos,
relacionados entre s mediante interfaces definidas apropiadamente. Escribir y depurar
el programa es ms fcil porque el programador puede trabajar con un mdulo cada
vez, usando los servicios facilitados por otros mdulos pero ignorando los detalles de
cmo estos mdulos trabajan (principio de abstraccin). Este tipo de diseo modular
es particularmente necesario cuando el programa se est desarrollando entre un
conjunto de programadores.
Ayudar a que el programa sea ms fcil de modificar. Puesto que los detalles de
implementacin de un mdulo se ocultan al resto de mdulos se pueden cambiar
detalles de un mdulo sin afectar al resto.
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 2
Figura 1
Una vez guardado el fichero de proyecto se nos muestra una pantalla como la de la
Figura 2. En ella se puede observar que a la izquierda aparece una pequea ventana con el
nombre del proyecto (en este caso complejos) del cual sale el nombre de cada uno de los
ficheros fuente que forman el proyecto. Como acabamos de crearlo solo hay un fichero por
defecto que se denomina Untitled.
Figura 2
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 3
Podemos crear nuevos ficheros fuente dentro del proyecto con la opcin New Unit in
Project del men Project. La Figura 3 muestra un proyecto que consta de tres ficheros fuentes:
principal.cpp, complejo.h y complejo.cpp. Con las opciones respectivas del men
Project tambin se pueden agregar ficheros fuente ya existentes o eliminar del proyecto un
fichero fuente.
Figura 3
Una vez creado el proyecto se puede compilar con la opcin Compile del men Execute
tal como lo habamos hecho hasta ahora cuando slo usbamos un fichero fuente. Una vez
compilados todos los ficheros, se procede al enlazado automtico de los distintos ficheros
objeto que se han generado para crear el ejecutable.
Un programa consistir en un mdulo de programa (el programa principal) y
cualquier nmero de mdulos de biblioteca desde los cuales el mdulo de programa importa
entidades (constantes, tipos, variables y procedimientos). Estos mdulos de biblioteca a su vez
pueden importar de otros mdulos de biblioteca. El compilador proporciona una coleccin
bsica de mdulos de biblioteca (stdlib, iostream, etc.) adems de los cuales, el
programador tambin puede escribir sus propios mdulos de biblioteca adicionales, para
usarlos en uno o en varios programas. Esto es precisamente lo que vamos a estudiar en este
tema. Tendremos por tanto:
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 4
Los mdulos usan listas de importacin para controlar los recursos externos que van
a utilizar.
Mdulos
Pg 5
conversionAngulos
iostream
stdlib
math
Donde las flechas indican utiliza. Sin embargo, el uso de las bibliotecas estndar no
se suele representar, con lo que quedara:
calculatercerlado
conversionAngulos
Para poder utilizar las funciones que ofrece el fichero de cabecera, el programa cliente
debe incluir dicho fichero de cabecera. Esto se hace de forma similar a como lo habamos
hecho hasta ahora con los ficheros de biblioteca estndar como iostream o stdlib pero
sustituyendo los parntesis angulares por comillas dobles. Esto indica al compilador que ese
fichero de cabecera es nuestro y que, por tanto, debe buscarlo en otros directorios distintos a
los directorios en los que busca los ficheros de cabecera estndar. En general, los ficheros de
cabecera se buscan en el mismo directorio donde est el archivo que los incluya excepto que
se diga lo contrario en las opciones de compilacin del proyecto.
El programa principal de la aplicacin es el que se muestra a continuacin:
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 6
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 7
Mdulos
Pg 8
Con lo cual, ya podemos utilizar la funcin sin tener que cualificarla. Esto es
particularmente til cuando el nombre que se est usando se utiliza muchas veces.
La tercera opcin es importar con una sola sentencia todo el espacio de nombres. Es
ese caso tendramos que poner using namespace Mconversionangulos; con lo que ahora
todos los identificadores del espacio de nombres son visibles sin tener que estar cualificados.
Esta opcin, aunque cmoda, puede no ser la ms aconsejable puesto que si importamos dos
espacios de nombres que exportan el mismo identificador volveramos a entrar en conflicto
(con lo cual los espacios de nombres perderan su sentido).
Por ltimo, en el mdulo de implementacin, se puede volver a definir el mismo
espacio de nombres para implementar cada una de las operaciones definidas en el fichero de
cabecera:
conversionangulos.cpp
#include "conversionangulos.h"
namespace Mconversionangulos{
const double pi=3.14159;
double gradosAradianes (double grad)
/* convierte un ngulo de grados a radianes */
{
return (pi * grad) / 180.0;
}
double radianesAgrados (double rad)
/* convierte un ngulo de radianes a grados */
{
return 180 * rad / pi;
}
}
// fin del mdulo
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 9
Un mdulo que importe el tipo complejo importa automticamente los nombres de sus
campos p_real y p_imag. Sin embargo, para seguir una metodologa de diseo correcta, es
conveniente que cuando se defina un tipo, tambin se definan todos los procedimientos o
funciones que manejen ese tipo. De esta forma, el mdulo cliente de este tipo es independiente
de su implementacin, de forma que si realiza un cambio en la implementacin del tipo o de
sus operaciones, el mdulo cliente no se vea afectado.
- Variables.
Las definiciones de variables son idnticas a las declaraciones de variables normales.
Estas variables son globales, por lo que se uso slo es recomendable en casos muy concretos.
- Procedimientos y funciones.
La definicin de un procedimiento o funcin consta de la cabecera del mismo. La
declaracin completa debe aparecer en el mdulo de implementacin. No es necesario ponerle
nombre a los parmetros, basta con indicar su tipo.
10.2.3.- Mdulos de implementacin.
Al igual que los mdulos de programa, los mdulos de implementacin pueden
contener tanto listas de importacin como declaraciones. Mediante listas de importacin un
mdulo de implementacin puede importar entidades de otros mdulos de biblioteca.
Las declaraciones sirven para dos propsitos:
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 10
- Constantes.
Las constantes definidas en la parte de definicin son visibles en la parte de
implementacin. Todas las constantes declaradas en un mdulo de implementacin son locales
a dicho mdulo; no son visibles fuera del mdulo de implementacin.
- Tipos.
Los tipos definidos en la parte de definicin del mdulo son visibles en la parte de
implementacin. Si es necesario, se pueden definir nuevos tipos que son locales al mdulo de
implementacin.
- Variables.
Las variables declaradas en la parte de definicin no pueden volver a ser declaradas en
la parte de implementacin puesto que son visibles en sta. Todas las variables declaradas en
la parte de implementacin son locales a sta.
- Procedimientos y funciones.
La parte de implementacin de un mdulo debe contener una declaracin completa de
todos los procedimientos y funciones cuya definicin aparece en el fichero de cabecera. Habr
que respetar estrictamente la forma en que se definieron, es decir, habr que declarar el mismo
nmero de parmetros y los mismos tipos para ellos.
10.2.4.- Ejemplo. El mdulo Mcomplejo.
A continuacin se muestra un programa que utiliza un mdulo de biblioteca
denominado Mcomplejo que exporta el tipo de datos complejo as como algunas operaciones
que se pueden realizar con este tipo de datos. La estructura del programa sera la siguiente:
principal
Mcomplejo
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 11
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 12
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 13
Insertar
Extraer
Cabeza
Pila
Otras operaciones posibles sobre la pila son la creacin de una pila vaca, la
interrogacin de la misma para determinar si contiene o no algn elemento y la destruccin de
la pila.
Para implementar una pila como una estructura dinmica de datos se usan listas
enlazadas, las operaciones de extraccin e insercin en la lista (pila) se hacen siempre sobre la
cabeza de la misma.
La estrucutura de datos usada para representar una pila que almacene elementos de
tipo int es la siguiente:
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 14
#ifndef _MPila_h_
// para evitar inclusin duplicada
#define _MPila_h_
// Modulo MPila
// Exporta el tipo TPila, pila de enteros y los procedimientos
// crearPila, destruirPila, pilaVacia, meterPila y sacarPila
namespace MPila{
struct NodoPila {
int elemento;
NodoPila * sig;
};
typedef NodoPila* TPila;
TPila crearPila (); // Crea la Pila
void destruirPila (TPila& pila); // libera la memoria
bool pilaVacia (TPila pila); // comprueba si la pila est vaca
void meterPila (TPila& pila, int valor);
// introduce valor en la pila
void sacarPila (TPila& pila, int & valor);
// saca el valor de la cima de la pila
}
#endif
En este caso se mantiene un slo puntero de tipo TPila que apunte a la cabeza de la
pila de elementos. A continuacin se muestra el mdulo de implementacin del tipo de datos
pila.
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 15
#include <stdlib.h>
#include <iostream.h>
#include "mpila.h"
// Implementa las operaciones para manejar el tipo TPila
namespace MPila{
TPila crearPila ()
{
return NULL;
}
bool pilaVacia (TPila pila)
{
return (pila == NULL);
}
void destruirPila (TPila & pila)
{
TPila ptr;
while (pila != NULL)
{
ptr = pila;
pila= pila->sig;
delete ptr;
}
}
void meterPila (TPila& pila, int valor)
{
TPila ptr;
ptr = new NodoPila;
ptr->elemento = valor;
ptr->sig = pila;
pila = ptr;
}
void sacarPila (TPila& pila, int& valor)
{
TPila ptr;
if (pilaVacia (pila))
{
cout << "Error en la pila. Pila Vacia " << endl;
}
else
{
ptr = pila;
valor = pila->elemento;
pila= pila->sig;
delete ptr;
}
}
}
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 16
Por ltimo mostramos un programa sencillo que usa el tipo de datos pila. Simplemente
lee nmeros enteros hasta leer un cero y a continuacin los muestra en orden inverso:
#include <stdlib.h>
#include <iostream.h>
#include "mpila.h"
using namespace MPila;
int main()
{
TPila p;
int n;
p= crearPila ();
cout <<"Introduzca un numero (0 para terminar)" <<endl;
cin >> n;
while (n != 0)
{
meterPila (p,n);
cout <<"Introduzca un numero (0 para terminar)" <<endl;
cin >>n;
}
cout <<"Los numeros al reves son:" <<endl;
while ( !pilaVacia(p) )
{
sacarPila (p,n);
cout << n << endl;
}
destruirPila (p);
system ("pause");
return 0;
}
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 17
10.4.2. Colas.
En muchas aplicaciones se cumple el hecho de que el primer proceso que solicita un
servicio o recurso es el primero en ser servido. Para retirar elementos (servicios, recursos) en
el mismo orden en que fueron solicitados, se necesitan unas estructuras de datos abstractas
que mantengan una secuencia de valores y permitan aadir nuevos elementos por un extremo
y retirarlos por el otro. Esta estructura recibe el nombre de cola.
En las colas el elemento que entr el primero sale tambin el primero, por ello se le
conoce tambin como listas FIFO (first-in, first-out; primero en entrar, primero en salir.)
Se define la cola, como una estructura de datos homognea de tamao variable que
soporta el siguiente modo de acceso: insercin por un extremo y extraccin por el opuesto.
Operaciones posibles sobre la cola son la creacin de una cola vaca, la determinacin de s la
cola est o no vaca y la destruccin de la cola.
De igual modo que se ha visto para la pila, una cola se puede implementar haciendo
uso de las estructuras dinmicas de datos. En este caso, se simula mediante una lista enlazada
que mantiene dos punteros, uno llamado frente por donde se van extrayendo los elementos
ms antiguos de la cola, y otro llamado final, que seala al extremo por el cual se irn
aadiendo elementos a la cola. De esta forma, el puntero final nos garantiza que cada vez que
se tenga que extraer un elemento de la cola, no sea necesario recorrer sta desde el principio,
lo cual sera altamente ineficiente para colas largas. Las operaciones de insertar y extraer de la
cola tienen acceso directo a los nodos de la cola en los que se van a realizar estas operaciones.
La diferencia con las pilas reside en el modo de entrada y salida de los datos, en las
colas las inserciones se realizan al final de la lista, no al principio.
Aadir
Extraer
Cola
FrenteFinal
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 18
#ifndef _MCola_h_
// para evitar inclusin duplicada
#define _MCola_h_
// Modulo MCola
// Exporta el tipo TCola, Cola de enteros y los procedimientos
// crearCola, destruirCola, ColaVacia, meterCola y sacarCola
namespace MCola{
struct NodoCola {
int elemento;
NodoCola * sig;
};
typedef NodoCola * TPuntero ;
struct TCola {
TPuntero frente, final;
};
TCola crearCola (); // Crea la Cola
void destruirCola (TCola& cola); // libera la memoria
bool colaVacia (TCola cola); // comprueba si la Cola est vaca
void meterCola (TCola& cola, int valor);
// introduce valor al final de la Cola
void sacarCola (TCola& cola, int & valor);
// saca el valor del frente de la Cola
}
#endif
MCola.h
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 19
Mdulos
Pg 21
Hay un nodo especial llamado raz del rbol, que proporciona un punto de entrada a
la estructura.
Los nodos restantes se subdividen en m>=0 conjuntos disjuntos, cada uno de los
cuales es a su vez un rbol. Estos rboles se llaman subrboles del raz.
Ntese que esta definicin es recursiva, se define un rbol en funcin de otros rboles.
La representacin y terminologa de los rboles se realiza con las tpicas notaciones de
las relaciones familiares en los rboles genealgicos: padre, hijo, hermano, ascendiente,
descendiente. Junto a estos conceptos se definen otros tales como raz, nodo, hoja, camino,
nivel, profundidad, etc., con los cuales se supone familiarizado al alumno.
1
2
4
3
6
9
Un rbol Binario se define como un conjunto de 0 ms nodos tales que:
Existe un nodo llamado raz del rbol.
Cada nodo puede tener 0,1, 2 subrboles conocidos como subrbol izquierdo y
subrbol derecho.
Un rbol binario puede ser representado fcilmente eligiendo las estructuras de datos
adecuadas. Un rbol general puede transformarse en un rbol binario aplicando determinados
algoritmos de conversin, el resto del epgrafe se centrar en el estudio de los rboles binarios.
La representacin dinmica de un rbol binario utiliza variables punteros y asignacin
dinmica de espacios de memoria. Cada nodo del rbol contiene al menos los siguientes
campos:
Campo de datos que almacena el tipo de datos.
Puntero al subrbol izquierdo.
Puntero al subrbol derecho.
Una implementacin en C++ es la que se muestra a continuacin:
struct NodoArbol {
int elemento;
NodoArbol * izq, * der;
};
typedef NodoArbol * TArbol;
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 22
Se llama recorrido de un rbol binario al proceso que permite acceder una sola vez a
cada uno de los nodos del rbol. Cuando un rbol se recorre, el conjunto completo de nodos
se examina. Los algoritmos de recorrido de un rbol realizan las siguientes tareas comunes:
Procesar el nodo raz.
Recorrer el subrbol izquierdo.
Recorrer el subrbol derecho.
El orden en que se realizan estas acciones da nombre a los tres algoritmos ms
usuales: pre-orden, in-orden y post-orden:
void inOrden(TArbol a)
{
if (! arbolVacio(a)) {
inOrden(Izda(a));
procesar(a);
inOrden(Decha(a));
}
}
void preOrden(TArbol a)
{
if (! arbolVacio(a)) {
procesar(a);
preOrden(Izda(a));
preOrden(Decha(a));
}
}
void postOrden(TArbol a)
{
if (! arbolVacio(a)) {
postOrden(Izda(a));
postOrden(Decha(a));
procesar(a);
}
}
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 23
#include <stdlib.h>
#include <iostream.h>
#include "Marbol.h"
// Implementa las operaciones para manejar el tipo TArbol
namespace MArbol{
TArbol crearVacio ()
{
return NULL;
}
void crearRaiz (TArbol &arbol, int valor)
{
TArbol nodo;
nodo = new NodoArbol;
nodo->elemento = valor;
nodo->izq=crearVacio();
nodo->der=crearVacio();
arbol = nodo;
}
void crearIzda (TArbol &arbol, int valor)
{
TArbol nodo;
crearRaiz (nodo,valor);
arbol->izq = nodo;
}
void crearDcha (TArbol &arbol, int valor)
{
TArbol nodo;
crearRaiz (nodo,valor);
arbol->der = nodo;
}
int sacarRaiz (TArbol a)
{
return a->elemento;
}
void destruirArbol (TArbol & arbol)
{
if (arbol != NULL)
{
destruirArbol(arbol->izq);
destruirArbol(arbol->der);
delete arbol;
}
}
___________________________________________________________________________
}
Laboratorio de Programacin
Mdulos
Pg 24
MListaEmpleado
MEmpleado
MCadena
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 25
<<
<<
<<
<<
cin>> opc;
cin.ignore(); // limpia el buffer de teclado.
return opc;
}
int main ()
{
TEmpleado emp;
TListaEmpleado lista;
char opcion, seguro;
bool salir= false;
lista =crearLista(); // inicializa la lista
while (! salir)
{
opcion = toupper (menu());
switch ( opcion )
{
case 'A':
cout <<"Introduce un empleado\n";
leeEmpleado (emp);
insertaEmpleado (lista, emp);
break;
case 'B':
muestraLista (lista);
break;
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 26
case 'S':
cout << "Esta seguro (S/N)" << endl;
cin >> seguro;
if (toupper (seguro) == 'S' )
{
salir = true;
}
break;
default:
cout << "Opcion incorrecta " <<endl;
break;
}
}
borraLista (lista); // libera la memoria
system ("pause");
return 0;
}
MListaEmpleado.h
#ifndef _MListaEmpleado_h_
#define _MLislaEmpleado_h_
#include "MEmpleado.h"
// Parte de definicion del modulo Lista de Empleado
namespace MListaEmpleado {
using MEmpleado::TEmpleado; //importa el tipo TEmpleado
struct TNodoEmpleado
{
TEmpleado emp;
TNodoEmpleado * sig;
};
typedef TNodoEmpleado * TListaEmpleado;
TListaEmpleado crearLista();
// crea la lista vaca
void insertaEmpleado(TListaEmpleado &lista, TEmpleado emp);
// inserta un empleado en la lista (por el principio)
void muestraLista(TListaEmpleado lista); // muestra la lista completa
void borraLista (TListaEmpleado &lista); // libera la memoria consumida
}
#endif
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 27
// libera la memoria
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 28
#include "MCadena.h"
namespace MEmpleado{
// parte de definicion del mdulo Empleado
using MCadena::TCadena ; // importa el tipo TCadena de MCadena
struct TEmpleado
{
TCadena nombre;
TCadena apellidos;
float sueldo;
};
void escribeEmpleado(TEmpleado emp); // escribe un empleado
void leeEmpleado(TEmpleado &emp);
// lee un empleado
void destruirEmpleado(TEmpleado &emp);
// libera la memoria de un
empleado
}
#endif
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 29
// lee un empleado
MCadena.h
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 30
MCadena.cpp
#include <iostream.h>
#include <ctype.h>
#include "MCadena.h"
// muestra la cadena
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 31
cin.get (letra);
if (letra == ENTER)
{
c = NULL;
// cadena vaca
}
else
{
c = new TNodo; // inserta la primera letra
c->car = letra;
c->sig = NULL;
ptr = c;
cin.get (letra);
while (letra != ENTER)
{
ptr->sig = new TNodo;
ptr = ptr->sig;
ptr->car = letra;
cin.get (letra);
}
ptr ->sig = NULL;
// inserta el resto
}
}
void borraCadena(TCadena &c)
{
TCadena ptr;
while (c != NULL)
{
ptr = c;
c = c->sig;
delete ptr;
}
}
}
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 32
EJERCICIOS
1. Escribe un mdulo de implementacin llamado
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 33
Mdulos
Pg 34
4. Escriba un mdulo llamado Mcadenas similar al del apartado 10.5 que exporte las
operaciones leeCadena, escribeCadena, comparaCadenas, concatenaCadenas,
longitudCadena, copiaCadena y posicionCadena (toma dos parmetros, c1 y
c2 y si c2 est contenida en c1, devuelve la posicin de c1, donde
comienza c2; en caso de que c2 no este contenida en c1 devuelve 1).
5. Implementar un mdulo de librera que trabaje con una pila de nmeros cardinales. Las
operaciones que tendr que incluir son las vistas en este tema, as como las operaciones de
comparar dos pilas para determinar si son iguales y copiar una pila en otra.
6. Supngase que se modifica la definicin de implementacin de la cola de forma que se
declare un slo puntero cola que apunte al frente de la cola. A su vez la lista enlazada que
simula la cola es circular tal y como se muestra en la figura inferior. Se pide redefinir el
mdulo de implementacin Mcola mostrado en el tema en base a esta nueva definicin.
Aadir una funcin que calcule la longitud de una cola.
Cola
Final
Frente
Disea un mdulo cliente para probar el mdulo cola. En dicho mdulo se habr de
crear una cola de elementos de tipo INTEGER. Los elementos que se insertarn en la
cola (esta se crear a base de llamadas sucesivas a InsertarCola), sern ledos de un
fichero de texto. Adems de esta operacin en el mdulo cliente se habrn de probar
todas las restantes operaciones de la cola (sacarCola, colaVacia, crearCola,
longitudCola, destruirCola).
Si el fichero de texto fuera el siguiente:
25 35 40 45 50
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 35
Cola
50
45
40
35
25
Final
Frente
8. Disea una aplicacin para la gestin del personal de una empresa. De cada uno de los
empleados de la empresa se ha de almacenar la siguiente informacin:
- Nombre
- DNI
-Ao de Contratacin
-Nmina
Para gestionarlos de una forma eficiente, y minimizar en lo posible el Tiempo de
bsqueda, se decide almacenarlos en una Tabla Hash, que utilice el mtodo de
encadenamiento para la resolucin de colisiones. La funcin hash, sera el primer carcter
del nombre de cada empleado (campo clave). De modo que nuestra tabla hash tendra 26
posiciones, correspondientes a las 26 letras del alfabeto ingls.
Disea un men que permita llevar a cabo las siguientes operaciones, con la estructura
anteriormente definida:
A.- Insertar un nuevo Empleado.
B.- Eliminar un Empleado.
C.- Buscar un Empleado.
D.- Visualizar los datos de todos los Empleados.
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 36
E.- Salir.
- Seleccione una opcion:
A.- Insertar un nuevo Empleado. Pedir los datos del empleado a insertar, y lo
insertar en la tabla.
Nombre:
DNI:
Anyo:
Nmina:
B.- Eliminar un Empleado. Pedir el campo clave (nombre) del empleado a eliminar, lo
buscar y posteriormente lo eliminar de la tabla.
C.- Buscar un Empleado. Pedir el campo clave (nombre) del empleado a buscar y lo
buscar en la tabla, devolviendo true o false segn el resultado de la bsqueda.
D.- Visualizar los datos de todos los Empleados. Recorrer toda la tabla, imprimiendo
por pantalla toda la informacin relativa a cada uno de los empleados, su nombre, DNI,
ao de contratacin y nmina.
Para implementar la aplicacin, disea primero el mdulo MTabla con sus partes de
definicin (define el tipo TEmpleados (la tabla hash), de acuerdo a la definicin
anterior) y cada una de las operaciones a llevar a cabo sobre dicho tipo
(Insertar_Tabla, Eliminar_Tabla, Visualizar_Tabla, Buscar_Tabla, Crear_Tabla). Por
Ultimo disea un mdulo de prueba (cliente), donde se encontrar implementado el
men y que importar el tipo de datos TEmpleados, junto con las operaciones que
necesite del mdulo MTabla.
NOTA: Recuerda que has de hacer un procedimiento para crear (inicializar) la
estructura; este habr de ejecutarse al comienzo, antes de ejecutar cualquiera de las
operaciones anteriores del mdulo de prueba.
___________________________________________________________________________
Laboratorio de Programacin
Mdulos
Pg 37