EJERCICIO 1

Anuncio
EJERCICIO 1
INTERFAZ CLASE CColaBarcos
TIPOS
REGISTRO TipoElemento
N numReg
C pais[1..50]
CPilaCarga pilaCarga
CListaTripulacion listaTripulacion
FINREGISTRO
MÉTODOS
// Constructor sin parámetros
Crear()
// Constructor de copia
Crear(E CColaBarcos colaBarcos)
// Destructor
Destruir()
// Inspección de barcos
CListaTripulacion::TCadena Inspeccion()
...
FIN CLASE CColaBarcos
IMPLEMENTACIÓN CLASE CColaBarcos
TIPOS
REGISTRO NodoColaBarcos
TipoElemento barco
NodoColaBarcos *sig
FINREGISTRO
NodoColaBarcos *TipoPtrBarco
ATRIBUTOS
TipoPtrBarco ptrBarcoIni, ptrBarcoFin
MÉTODOS
// Constructor sin parámetros
Crear()
INICIO
ptrBarcoIni = NULO
ptrBarcoFin = NULO
FIN Crear
// Destructor
Destruir()
VAR
TipoPtrBarco ptr
INICIO
MIENTRAS ptrBarcoIni != NULO HACER
ptr = ptrBarcoIni
ptrBarcoIni = ptrBarcoIni->sig
LIBERAR(ptr)
/* Llama automáticamente al
destructor de la pila y
la lista */
FINMIENTRAS
FIN Destruir
// Constructor de copia
Crear(E CColaBarcos colaBarcos)
VAR
TipoPtrBarco ptr1
INICIO
ptr1 = colaBarcos.ptrBarcoIni
SI ptr1 != NULO ENTONCES // Primer barco
ASIGNAR(ptrBarcoIni)
ptrBarcoIni->sig = NULO
ptrBarcoFin = ptrBarcoIni
/* Al hacer la copia del barco, se llama
automáticamente a los constructores de copia
de las clases CPilaCarga y CListaTripulacion
*/
ptrBarcoFin->barco = ptr1->barco
ptr1 = ptr1->sig
MIENTRAS ptr1 != NULO HACER
ASIGNAR(ptrBarcoFin->sig)
ptrBarcoFin = ptrBarcoFin->sig
ptrBarcoFin->sig = NULO
/* Al hacer la copia del barco, se llama
automáticamente a los constructores de
copia de las clases CPilaCarga y
CListaTripulacion
*/
ptrBarcoFin->barco = ptr1->barco
ptr1 =ptr1->sig
FINMIENTRAS
FINSI
FIN Crear
// Método auxiliar: calcula la carga de un barco
N CalcularCarga(E CPilaCarga pilaCarga)
VAR
N carga=0
CPilaCarga pilaCargaAux = pilaCarga
CPilaCarga::TipoElemento paquete
INICIO
MIENTRAS NO pilaCargaAux.EstaVacia() HACER
paquete = pilaCargaAux.Cima()
carga = carga + paquete.peso
pilaCargaAux.Desapilar()
FINMIENTRAS
DEVOLVER carga
FIN CalcularCarga
// Inspeccionar la carga de los barcos
CListaTripulacion::TCadena Inspeccion()
VAR
TipoPtrBarco ptr1, ptr2
N cargaMaxima = 0, carga
CListaTripulacion::TCadena nombre2Oficial=""
CListaTripulacion::TipoElemento tripulante
INICIO
SI ptrBarcoIni != NULO ENTONCES
/* Si no hay barcos, no hacemos nada, se devuelve
una cadena vacía
*/
// Buscamos el barco de mayor carga
ptr1 = ptrBarcoIni
MIENTRAS ptr1 != NULO HACER
carga = CalcularCarga
(ptr1->barco.pilaCarga)
SI carga >= cargaMaxima ENTONCES
ptr2 = ptr1 /* ptr2 apunta al más
cargado */
cargaMaxima = carga
FINSI
ptr1 = ptr1->sig
FINMIENTRAS
/* Vemos el nombre del segundo oficial.
Si no hay segundo oficial a bordo, se
devuelve la cadena vacía
*/
SI ptr2->barco.listaTripulacion.Longitud()>=2
ENTONCES // Hay segundo oficial
tripulante =
ptr2->barco.listaTripulacion.Consultar(2)
nombre2Oficial = tripulante.nombre
FINSI
FINSI
DEVOLVER nombre2Oficial
FIN Inspeccion
...
FIN CLASE CColaBarcos
EJERCICIO 2
IMPLEMENTACIÓN CLASE CArbolBin
TIPOS
REGISTRO NodoABin
TipoElemento dato
NodoABin *izq, *der
FINREGISTRO
NodoABin *TArbol
ATRIBUTOS
TArbol ptrRaiz
MÉTODOS
...
Espejo(ES TArbol arbol)
VAR
TArbol aux
INICIO
SI arbol != NULO ENTONCES /* Si es nulo, no tengo
que hacer nada
*/
aux = arbol->izq
arbol->izq = arbol->der
arbol->der = aux
Espejo(arbol->izq)
Espejo(arbol->der)
FINSI
FIN Espejo
...
FIN CArbolBin
EJERCICIO 3
TIPOS
TNodo *TListaDoble
REGISTRO TNodo
Z dato
TNodo *sig, *ant
FINREGISTRO
ALGORITMO Insertar (ES TListaDoble lista; E Z valor)
VAR
TListaDoble ptr, nuevo
INICIO
ASIGNAR(nuevo)
nuevo->dato = valor
SI lista == NULO ENTONCES //Primer elemento a insertar
lista = nuevo
lista->ant = NULO
lista->sig = NULO
SINO
// Busca la posición de inserción
ptr = lista
MIENTRAS ((ptr->sig != NULO) Y(ptr->dato < valor))
HACER
ptr = ptr->sig
FINMIENTRAS
SI ptr->dato < valor ENTONCES //Inserta al final
ptr->sig = nuevo
nuevo->ant = ptr
nuevo->sig = NULO
SINO
//Insertamos antes
SI lista ==ptr ENTONCES //Inserta al principio
nuevo->sig = lista
nuevo->ant = NULO
lista->ant = nuevo
lista = nuevo
SINO // Inserta en la posición que corresponda
ptr->ant->sig = nuevo
nuevo->ant = ptr->ant
ptr->ant = nuevo
nuevo->sig = ptr
FINSI
FINSI
FINSI
FIN Insertar
Descargar