Sexta Práctica - Universidad de Málaga

Anuncio
E.T.S.I. Telecomunicación. Int. Comp.
Sexta Práctica
Sexta Práctica
Curso 2004-2005
Introducción a los Computadores
1o A de Ingenierı́a Técnica de Telecomunicación
(Sistemas Electrónicos)
UNIVERSIDAD DE MÁLAGA
E.T.S.I. TELECOMUNICACIÓN
Un conjunto de números enteros puede implementarse mediante arrays de registros. Cada componente del
array contendrá un número entero y un campo booleano que indique si esa posición del array (y el número que
en ella se guarda) es o no válida. En base a esta estructura de datos, se debe implementar en C++ y probar cada
una de las siguientes operaciones sobre conjuntos de números enteros.
/*
Implementación del tipo CONJUNTO con arrays
*/
CONST
N MaxElementos = 100
TIPOS
REGISTRO TElemento
Z dato
B libre
FINREGISTRO
TElemento ConjuntoZ[1..MaxElementos]
ALGORITMO Crear(S ConjuntoZ a) // Inicializa a
VAR
N i
INICIO
PARA i=1 HASTA MaxElementos HACER
a[i].libre = VERDADERO
FIN
FIN Crear
ALGORITMO N Cardinalidad(E ConjuntoZ a)
// Devuelve número de elementos de a
VAR
N i, cuenta
INICIO
cuenta = 0
PARA i=1 HASTA MaxElementos HACER
SI NO(a[i].libre) ENTONCES
cuenta = cuenta+1
FINSI
FIN
DEVOLVER cuenta
FIN Cardinalidad
1
E.T.S.I. Telecomunicación. Int. Comp.
Sexta Práctica
ALGORITMO B Pertenece(E ConjuntoZ a; E Z elem)
// Devuelve VERDADERO si "elem" está en a
VAR
N i; B esta
INICIO
esta = FALSO; i=1
MIENTRAS (NO esta) Y (i<=MaxElementos) HACER
SI (NO a[i].libre) Y (a[i].dato==elem) ENTONCES
esta = VERDADERO
FINSI
i = i+1
FINMIENTRAS
DEVOLVER esta
FIN Pertenece
ALGORITMO B Incluido(E ConjuntoZ a, b)
// Devuelve VERDADERO si cada elemento de b está en a
VAR
N i; B vale
INICIO
vale = VERDADERO
i = 1
MIENTRAS vale Y (i<=MaxElementos) HACER
SI NO(b[i].libre) Y
NO Pertenece(a, b[i].dato) ENTONCES
vale = FALSO
FINSI
i = i+1
FINMIENTRAS
DEVOLVER vale
FIN Incluido
ALGORITMO B Incluir(ES ConjuntoZ a; E Z elem)
// Incluye "elem" en a si no está ya. Devuelve
// FALSO si no hay sitio para el nuevo elemento
VAR
N i; B vale
INICIO
vale = VERDADERO
SI NO Pertenece(a, elem) ENTONCES
// evita elementos repetidos
i = 1
MIENTRAS NO a[i].libre Y (i<=MaxElementos) HACER
i = i+1
FINMIENTRAS
SI i<=MaxElementos ENTONCES // hay sitio
a[i].dato = elem
a[i].libre = FALSO
SINO
vale = FALSO
FINSI
FINSI
DEVOLVER vale
FIN Incluir
2
E.T.S.I. Telecomunicación. Int. Comp.
Sexta Práctica
ALGORITMO Excluir(ES ConjuntoZ a; E Z elem)
// Excluye "elem" si está en a
VAR
N i; B encontrado
INICIO
encontrado = FALSO; i = 1
MIENTRAS NO encontrado Y (i<=MaxElementos) HACER
SI NO(a[i].libre) Y (a[i].dato==elem) ENTONCES
encontrado = VERDADERO
a[i].libre = VERDADERO
FINSI
i = i+1
FINMIENTRAS
FIN Excluir
/* Inicializa "a" con los elementos de "b". */
ALGORITMO Duplicar(S ConjuntoZ a; E ConjuntoZ b)
INICIO
a = b // se copia toda la estructura de datos
FIN Duplicar
/*
* Une dos conjuntos.
*/
ALGORITMO Union(E ConjuntoZ a, b; S ConjuntoZ u)
VAR
N j=1; B hay_sitio
INICIO
Duplicar(u, a) // inicializa "u" con "a"
MIENTRAS j<=MaxElementos HACER
SI NO b[j].libre Y NO Pertenece(u, b[j].dato) ENTONCES
hay_sitio = Incluir(u, b[j].dato)
SI NO hay_sitio ENTONCES
Escribir("Espacio insuficiente al unir")
FINSI
FINSI
j = j+1
FINMIENTRAS
FIN Union
/*
* Intersecta dos conjuntos.
*/
ALGORITMO Interseccion(E ConjuntoZ a,b;S ConjuntoZ i)
VAR
N j=1
INICIO
Duplicar(i, a) // inicializa "i" con "a"
MIENTRAS j<=MaxElementos HACER
SI NO a[j].libre Y NO Pertenece(b, a[j].dato) ENTONCES
Excluir(u, a[j].dato)
FINSI
j = j+1
FINMIENTRAS
FIN Interseccion
3
Descargar