UNIVERSIDAD CAECE
1er. Parcial de Algoritmos y Estructuras 1
Tema 2 JAIME GAONA QUIROGA
1) A partir del archivo Empl1 ordenado ascendentemente por sección, se
pide generar el archivo Empleados2, de igual estructura, ordenado
descendentemente por apellido de empleado. Utilizar una lista como
estructura auxiliar (definir claramente la estructura de Tdato). La sección
es un campo que se repite varias veces.
ARCHIVO EMPLEADO
. Sección
. Apellido
. Teléfono
. Dirección
Escribir claramente tipos y variables, y manejar errores o incongruencia de
datos
2) Desarrollar el operador fmayor para una de las tres implementaciones de
tfecha estudiadas en la práctica 7.
3) Desarrollar el operador linsertarPpio para las siguientes
implementaciones
a. Listas doblemente enlazadas lineales
b. Listas estáticas sin corrimiento de elementos
1)
regEmpleados: registro
sección: cadena [8]
apellido: cadena [30]
teléfono: cadena [10]
dirección: cadena [30]
fin registro
tDato: registro
clave: tClave
ape: cadena [30]
tel: cadena [10]
dir: cadena [30]
fin registro
tClave: cadena [8]
Algoritmo principal
Variables: arch, archSal: archivo de regEmpleados; l: tLista; error: Logico
cargarArchivo(l, error)
si no error entonces
generarArchivoSalida(l)
sino
mostrar (“La memoria es insuficiente”)
fsi
fin algoritmo
Procedimiento cargarArchivo(ref l: tLista, ref error: Logico)
Variables:
reg: regEmpleados
dato: tDato
Error falso
Abrir(arch)
Leer(arch, reg)
Lcrear(l)
Mientras no fin (arch) y no lLlena(l) hacer
dato.ape reg.apellido
dato.tel reg.telefono
dato.dir reg.direccion
dato.clave reg.seccion
lInsertarEnOrden(l, dato, ‘D’)
leer (arch, reg)
fin mientras
error no fin (arch)
cerrar(arch)
fin procedimiento
Procedimiento generarArchivoSalida(ref l: tLista):
Variables: dato: tDato; reg: regEmpleado
Crear(archSal)
Si no lVacia(l) entonces:
Lppio(l)
Linfo(l, dato)
Reg dato
Grabar (archSal, reg)
Lsig(l)
Mientras no lFin(l) hacer:
Linfo(l, dato)
Reg dato
Grabar(archSal, reg)
Lsig(l)
Fin mientras
Fin si
Cerrar(archSal)
Fin procedimiento
2) Registro
Función fMayor (ref f1: tFecha, ref f2: tFecha): lógico
Si f1.anio > f2.anio entonces
fMayor ← verdadero
sino
Si f1.anio < f2.anio entonces
fMayor ← falso
sino
Si f1.mes > f2.mes entonces
fMayor ← verdadero
sino
Si f1.mes < f2.mes entonces
fMayor ← falso
sino
Si f1.dia > f2.dia entonces
fMayor ← verdadero
sino
fMayor ← falso
FinSi
FinSi
FinSi
FinSi
FinSi
FinFunción
3a) Listas doblemente enlazadas liniales
Procedimiento Linsertarppio (ref l: tlista, val x: tDato)
VL:nuevo: Puntero
CrearNodoDoble(nuevo, x)
si l.cab = nil entonces
l.cab <-- nuevo
sino
nuevo↑.sig <-- l.cab
l.cab↑.ant <-- nuevo
l.cab <-- nuevo
finSi
finprocedimiento
3b) Listas estáticas sin corrimiento de elementos
Procedimiento Linsertarppio (ref t: tlista, valor x: tDato)
Variable local: aux: tdato
aux <-- l.plibre
l.plibre <-- l.elem[p.libre].sig
l.elem[aux].info <-- x
l.elem[aux].sig <-- l.pocup
l.pocup <-- aux
finprocedimiento