Vous êtes sur la page 1sur 10

UTN – FRM – Ing.

en Sistemas de Información N° GRUPO Nota


Algoritmos y Estructuras de Datos
Ciclo lectivo 2016- Trabajos Prácticos
Clase 12- UT8 Hoja 1 de 9

CLASE Nº 12 Resolución de problemas ingenieriles


PILAS, LISTAS Y COLAS (UT8)

OBJETIVO: Que el alumno conozca las estructuras de datos lineales, las operaciones que puede realizar más
comunes; y que aprenda a aplicar listas enlazadas.

Consigna 1: en el pizarrón con la participación de los alumnos, se resuelve el siguiente ejercicio: “Realizar un
algoritmo que permita lo siguiente: se tiene un listado de personas y sus edades y el departamento donde viven. Realice
las estructuras necesarias para almacenar la información; complete con un ejemplo de datos; e indique el enlace
utilizado para relacionar las estructuras: implícito o explícito. No realizar la carga.”
Ejemplos
• María Guaymallén 23

 Elaborado por Susana Oviedo, Adriana José y Eugenia Alfonso 


• Juan Las Heras 25
• Guillermo Godoy Cruz 32

Estructura de datos con enlace implicito

Personas[ 100]: CADENA Edades [ 100]: ENTERO Depa [100]: CADENA

Estructura de datos con enlace explicito

María 23 3 Capital

Juan 25 4 Godoy Cruz

Guillermo 32 2 Guaymallén

Las Heras

Enlace implícito Enlace explícito

Personas [100]: CADENA Edades_Depa [100,2]: ENTERO Depa [17]: CADENA

La primera columna en el arreglo Edades_Depa contiene la información sobre la edad de las personas, a
través de un enlace implícito con el vector de Personas.
La segunda columna en el arreglo Edades_Depa contiene el vínculo (posición) a la información del
departamento donde vive la persona, a través de un enlace explícito con el vector Depa.
UTN – FRM – Ing. en Sistemas de Información
Algoritmos y Estructuras de Datos
Ciclo lectivo 2016- Trabajos Prácticos
Clase 12- UT8 Hoja 2 de 9

Se ha decidido guardar la información referida al departamento donde vive la persona en el mismo vector de
Edades, ahora denominado Edades_Depa, ya que el vínculo es un índice: valor ENTERO (la posición
donde está guardado el dato en otro vector), en este caso, el de los departamentos: Depa. También podría
haberse guardado el dato en otro vector por separado Pos_Depa [100]: ENTERO.


Consigna 2: en el pizarrón con la participación de los alumnos, sobre el ejercicio resuelto en la consigna 1
resolver:” Dado un departamento (nombre), indicar cuántas personas mayores de edad viven allí”.

Con enlace implícito

PROCEDIMIENTO personamayor (Edades[100], longitud: ENTERO ; depa[100]: CADENA)


VAR departamento: CADENA ; cantmayor, i : ENTERO
INICIO
//ingresar el departamento
ESCRIBIR ( “Ingrese nombre del departamento”)
REPETIR
LEER (departamento)
HASTA QUE (existe (departamento, depa[ ]))
Cantmayor=0
//busco el departamento recorriendo secuencialmente la lista
VARIAR i desde 1 hasta longitud
SI (depa[i] == departamento) ENTONCES
Si (edades[i] >= 18) ENTONCES
cantmayor = cantmayor + 1
FINSI
FINSI
FINVARIAR
//muestro la cantidad de personas mayores
SI (cantmayor > 0 ) ENTONCES
ESCRIBIR( “En el departamento de ”, departamento, “hay”, cantmayor, “personas mayores de
edad”)
SINO
ESCRIBIR(“En el departamento de ”, departamento, “no hay personas mayores de edad”)
FINSI
FINPROCEDIMIENTO

FUNCIÓN existe (dep, depa [100]:CADENA) : LOGICO


VAR i: ENTERO
INICIO
i= 1
MIENTRAS (i<=100 [Y] depa [i] < > dep ) ENTONCES
i = i+1 // búsqueda secuencial
FIN MIENTRAS
SI (depa [i] == dep) ENTONCES
existe = [ V ]
SINO
existe = [ F ]
FINSI
RETORNO

Con enlace explicito

PROCEDIMIENTO personamayor (edades_Depa[100,2], longitud: ENTERO ; depa[17]: CADENA)


VAR departamento: CADENA ; cantmayor, i ,K: ENTERO
INICIO
//ingresar el departamento
ESCRIBIR (“Ingrese nombre del departamento”)
REPETIR
UTN – FRM – Ing. en Sistemas de Información
Algoritmos y Estructuras de Datos
Ciclo lectivo 2016- Trabajos Prácticos
Clase 12- UT8 Hoja 3 de 9

LEER (departamento)
HASTA QUE ( existe (departamento, depa[ ]))
cantmayor = 0
K = Donde (departamento, depa [ ]) //función en que busco posición del departamento
// Busca mayores de edad secuencialmente
VARIAR i desde 1 hasta longitud
SI (edades_Depa[i,2] == K [Y] edades_Depa [i,1]>= 18) ENTONCES
cantmayor = cantmayor + 1
FINSI
FINVARIAR
//muestro la cantidad de personas mayores
SI (cantmayor > 0) ENTONCES
ESCRIBIR( “En el departamento de ”, departamento, “hay”, cantmayor, “personas mayores de
edad”)
SINO
ESCRIBIR(“En el departamento de ”, departamento, “no hay personas mayores de edad”)
FINSI
FINPROCEDIMIENTO

FUNCIÓN existe (dep, depa[17]:CADENA) : LOGICO


VAR i: ENTERO
INICIO
i=1
MIENTRAS (i<=17 [Y] depa [i] < > dep) ENTONCES
i = i+1 // búsqueda secuencial
FIN MIENTRAS
SI (depa [i] ==dep) ENTONCES
existe = [ V ]
SINO
existe = [ F ] //lo recorrió completamente y no lo encontró
FINSI
RETORNO

FUNCIÓN Donde (dep, depa[17]:CADENA) : ENTERO


//Funcion que devuelve la posición donde se encuentra el valor dep en el vector depa
VAR i: ENTERO
INICIO
i = i +1
MIENTRAS (i<=17 [Y] depa [i] < > dep) ENTONCES
i = i+1 // búsqueda secuencial
FIN MIENTRAS
SI (depa [i] == dep) ENTONCES
Donde = i
SINO
Donde = 0 // debe devolver la no existencia
FINSI
RETORNO
UTN – FRM – Ing. en Sistemas de Información
Algoritmos y Estructuras de Datos
Ciclo lectivo 2016- Trabajos Prácticos
Clase 12- UT8 Hoja 4 de 9

Consigna 3: en el pizarrón con la participación de los alumnos, se resuelve el siguiente ejercicio


Dada la siguiente lista enlazada de nombres, ordenados alfabéticamente, indicar cómo quedaría si:

1)Ejemplo inicial 3)Agregar “Eugenia”


5)Eliminar “Analía”
Longitud=100 Longitud=100
Longitud=100
Ultimo=5 Ultimo=1
Ultimo=1
Vacío=1 Vacío=8
Vacío=2
Nombres Anterior
1 Nombres Anterior
Nombres Anterior
Valeria 1 5
Analía 2 -1 Valeria 1 5
Analía 2 -1
3 “ “ 2 0
Eugenia 3 2
Lorena 4 2 Eugenia 3 -1
Lorena 4 3
Susana 5 7 Lorena 4 3
Susana 5 7
María 6 4 Susana 5 6
María 6 4
Paula 7 6 María 6 4
Paula 7 6
… 7
8
… 8

100 …
100
100
2)Agregar “Valeria”
Longitud=100 4)Eliminar “Paula”
Ultimo=1 Longitud=100
Vacío=3 Ultimo=1
Vacío=7
Nombres Anterior
Valeria 1 5 Nombres Anterior
Valeria 1 5
Analía 2 -1
Analía 2 -1
3
Eugenia 3 2
Lorena 4 2
Susana 5 7 Lorena 4 3

María 6 4 Susana 5 6

Paula 7 6 María 6 4

… “ “ 7 0

8
… …
100
100
UTN – FRM – Ing. en Sistemas de Información
Algoritmos y Estructuras de Datos
Ciclo lectivo 2016- Trabajos Prácticos
Clase 12- UT8 Hoja 5 de 9

Consigna 4: Dada una lista enlazada de palabras, realizar subprogramas para recorrerla y:
• contar la cantidad de palabras que tengan cantidad de letras par.
• contar la cantidad de palabras que terminan en “ción”.
• No realizar la carga.

Inic = 4
Pal[100] Sig[100]
1
Ración 2 5
3
Nación 4 2
Rosa 5 -1
6


100

Prueba de escritorio
inic I Sig[ ] Pal[ ] lo te contPar contCion Pantalla
4 0 0
4 2 nación 6 ción 1 1
2 5 ración 6 ción 2 2
5 -1 rosa 4 rosa 3
-1
Hay 3 palabras pares

Hay 2 palabras con ción

PROCEDIMIENTO listaEnl ( Pal[100]: CADENA; inic: Sig [100]: ENTERO)


VAR i, lo, contPar, contCion: ENTERO; te: CADENA
INICIO
contPar = 0 //Inicializo la cantidad de palabras de longitud par
contCion = 0 //Inicializo la cantidad de palabras terminadas en ción
i = inic
MIENTRAS (i < > -1) HACER
lo = longitud (Pal[ i ])
SI (lo MOD 2 == 0) ENTONCES
contPar = contPar + 1
FINSI
te = Subcadena (Pal [ i ], lo – 3, 4)
SI (te == “ción”) ENTONCES
contCion = contCion + 1
FINSI
i = Sig [ i ] // Recorrido enlazado, paso al siguiente enlace
FINMIENTRAS
ESCRIBIR (“Hay”, contPar, “palabras pares”)
ESCRIBIR (“Hay”, contCion, “palabras con ción”)
FINPROCEDIMIENTO

De esta forma, las listas enlazadas se recorren por su enlace pasando al siguiente elemento de la lista:
i = Sig [ i ]. Si fuera una lista secuencial el recorrido entre los elementos seria usando i = i + 1.
UTN – FRM – Ing. en Sistemas de Información
Algoritmos y Estructuras de Datos
Ciclo lectivo 2016- Trabajos Prácticos
Clase 12- UT8 Hoja 6 de 9

Consigna 5:
Realizar un algoritmo que permita lo siguiente: llevar una pila de rótulos de cajas que se han colocado en un
depósito. Las cajas contienen las Facturas emitidas por la empresa, que van desde un número inicial a un
número final. Esta información también debe guardarse. Ejemplo: Marzo, del N° 1200 a 1480; luego se
guardó la caja de Abril, del N° 1481 al 1890; luego de la Mayo, del 1891 al 2120; luego la de Junio con la del
2121 al 2350, etc.
• Realice las estructuras necesarias para almacenar la información; complete con un ejemplo de
datos; e indique cómo se realiza la inserción y eliminación de los elementos (rótulos e información
asociada) .
• Realice un programa con un menú que permita: agregar rótulos (con la numeración que incluye),
eliminarlos, buscar un rótulo y mostrar su contenido.

PROGRAMA Pila
//Subprogramas
PROCEDIMIENTO LeerDatos (PorRef. UnRotulo:CADENA, PorRef. UnRangoIni, PorRef. UnRangoFin:
ENTERO)
INICIO
REPETIR
ESCRIBIR(“Ingrese el texto del rótulo de esta caja: “)
LEER(UnRotulo)
HASTA QUE (UnRotulo<>” “)
REPETIR
ESCRIBIR(“Ingrese el número inicial de las Facturas de esta caja: “)
LEER(UnRangoIni)
HASTA QUE (UnRangoIni>0)
REPETIR
ESCRIBIR(“Ingrese el número final de las Facturas de esta caja: “)
LEER(UnRangoFin)
HASTA QUE (UnRangoFin>0[Y]UnRangoFin>UnRangoIni)
FINPROCEDIMIENTO

PROCEDIMIENTO AgregaEle (longitud, Por Ref. cima: ENTERO; Por Ref. Rotulo[12]:CADENA,
PRefRango[12,2]: ENTERO; UnRotulo:CADENA, UnRangoIni, UnRangoFin: ENTERO)
INICIO
SI (cima < longitud) entonces
cima = cima + 1
Rotulo [cima] = UnRotulo
Rango [cima,1]= UnRangoIni
Rango [cima,2] =UnRangoFin
SINO
ESCRIBIR(“pila llena”)
FINSI
FINPROCEDIMIENTO

PROCEDIMIENTO EliminarEle ( Por Ref. cima: ENTERO; Por Ref. Rotulo[12]: CADENA; Por Ref.
Rango[12,2]: ENTERO)
INICIO
SI (cima == 0) entonces
ESCRIBIR(“Pila vacía”)
SINO
//Vacío los datos
Rotulo [cima]= “ “
Rango [12,1] = 0
Rango [12,2] = 0
cima = cima - 1
FINSI
FINPROCEDIMIENTO
UTN – FRM – Ing. en Sistemas de Información
Algoritmos y Estructuras de Datos
Ciclo lectivo 2016- Trabajos Prácticos
Clase 12- UT8 Hoja 7 de 9

PROCEDIMIENTO BuscarEle (cima, longitud: ENTERO; Rotulo[12]: CADENA; Rango[12,2]: ENTERO)


VAR i : ENTERO; buscado: CADENA
//para buscar la pila se recorre de la misma forma que al eliminar, hasta encontrar el elemento deseado,
//si no lo encuentra, muestra un mensaje
INICIO
REPETIR
ESCRIBIR(“Ingrese el texto de la caja a buscar: “)
LEER (buscado)
HASTA QUE (longitud(buscado)>0)
i=1
MIENTRAS (i < longitud [y] buscado < > Rotulo [i]) HACER
i=i+1 // Búsqueda secuencial
FINMIENTRAS
SI (buscado == Rotulo [i]) ENTONCES
ESCRIBIR (buscado, “está en posición “, i, “facturas desde”, Rango[i,1], “hasta”, Rango [i,2])
SINO
ESCRIBIR (buscado, “ no está”)
FINSI
FINPROCEDIMIENTO

//Programa principal
VAR longitud, cima, op, Rango [12,2]:ENTERO; Rotulo[12]: CADENA, UnRotulo:CADENA, UnRangoIni,
UnRangofin:ENTERO
INICIO
Inicializar(longitud,cima)
Limpiar(longitud,Rotulo[],Rango[,])
ITERAR
//menu
ESCRIBIR(“MENU: 1-agregar, 2- eliminar, 3-buscar, 4-salir”)
REPETIR
LEER(op)
HASTA QUE (op>=1 [Y] op <= 4)
SALIR SI ( op==4)
SEGÚN CASO op HACER
1: LeerDatos(UnRotulo, UnRangoIni, UnRangoFin)
AgregaEle(longitud, cima, Rotulo[ ],Rango[,], UnRotulo, UnRangoIni,UnRangoFin)
2: EliminarEle(cima, Rotulo[ ],Rango[,])
3: BuscarEle(cima, longitud, Rotulo[], Rango[,])
4: ESCRIBIR(“Hasta pronto”)
FINSEGUN
FINITERAR
FINPROGRAMA

Consigna 6: Realizar un algoritmo que permita lo siguiente: llevar una cola de personas esperando ser
atendidas en la Recepción de un Banco. A las personas se les pregunta también acerca del tema del que
desean consultar para poder derivarlas al empleado con conocimiento de ese tema, que las atenderá. Esta
información también debe guardarse. Ejemplo: José llegó primero y desea consultar sobre la apertura de
una cuenta; luego llegó María que desea averiguar sobre préstamos hipotecarios, más tarde llegó Adriana
que desea consultar sobre sus movimientos bancarios, y por último, hasta el momento llegó Pablo que
desea cerrar su cuenta en el banco.
Realice las estructuras necesarias para almacenar la información; complete con un ejemplo de datos; e
indique cómo se realiza la inserción y eliminación de los elementos.
Realice un programa con un menú que permita: agregar personas, eliminarlos, buscar una persona y
mostrar el tema que desea consultar.
UTN – FRM – Ing. en Sistemas de Información
Algoritmos y Estructuras de Datos
Ciclo lectivo 2016- Trabajos Prácticos
Clase 12- UT8 Hoja 8 de 9

PROGRAMA Cola
//Subprogramas
PROCEDIMIENTO LeerDatos (PorRef. nombre, PorRef. motivo: CADENA)
INICIO
REPETIR
ESCRIBIR(“Ingrese el Nombre de la persona: “)
LEER(nombre)
HASTA QUE (nombre<>longitud(nombre)>0)

REPETIR
ESCRIBIR(“Ingrese el tema que desea consultar: “)
LEER(motivo)
HASTA QUE (motivo<>longitud(motivo)>0)
FINPROCEDIMIENTO

Procedimiento AgregaEle (longitud, Por Ref. final, PRef frente: ENTERO; Datos[100,2 ], nombre,
motivo: CADENA)
INICIO
SI ( final == 0) ENTONCES//Es el primer elemento
final = 1
frente = 1
//Guardo los datos
Datos [final,1] = nombre
Datos [final,2] = motivo
SINO
SI (final < longitud) ENTONCES
final = final + 1
//Guardo los datos
Datos [final,1] = nombre
Datos [final,2] = motivo
SINO
//Muestro mensaje
Escribir (“Cola llena”)
FINSI
FINSI
FINPROCEDIMIENTO

PROCEDIMIENTO EliminarEle (longitud, Por Ref. final, Por Ref. frente: ENTERO; Datos[100,2]:
CADENA)
VAR i:ENTERO
INICIO
SI (final == 0) ENTONCES
//Muestro mensaje
ESCRIBIR(“Cola vacía”)
SINO
VARIAR i DESDE frente HASTA final //Muevo los elementos
Datos [i,1] = Datos [i + 1, 1]
Datos [i,2] = Datos [i + 1, 2]
FINVARIAR
//Vacio los datos
final = final - 1
FINSI
FINPROCEDIMIENTO

PROCEDIMIENTO BuscarEle( longitud, final, frente: ENTERO; Datos[100,2]: CADENA)


VAR i: ENTERO; buscado : CADENA
//para buscar la cola se recorre de la misma forma /que al eliminar, hasta encontrar el elemento deseado
INICIO
REPETIR
ESCRIBIR(“Ingrese el nombre de la persona a buscar: “)
UTN – FRM – Ing. en Sistemas de Información
Algoritmos y Estructuras de Datos
Ciclo lectivo 2016- Trabajos Prácticos
Clase 12- UT8 Hoja 9 de 9

LEER (buscado)
HASTA QUE (longitud(buscado)>0)
i=1
MIENTRAS (i < longitud [y] buscado < > Datos [i,1]) HACER
i=i+1 // Búsqueda secuencial
FINMIENTRAS
SI (buscado = Datos [i,1] ) ENTONCES
ESCRIBIR(buscado, “está en posición “, i, “y desea”, Datos [i,2])
SINO
ESCRIBIR (buscado, “ no está”)
FINSI
FINPROCEDIMIENTO

//Programa principal
VAR longitud, frente, final, op: ENTERO; Datos [100,2]: CADENA)
INICIO
Inicializar(longitud,frente, final)
Limpiar(longitud,Datos[,])
ITERAR
//menu
ESCRIBIR(“MENU: 1-agregar, 2- eliminar, 3-buscar, 4-salir”)
REPETIR
LEER(op)
HASTA QUE (op>=1 [Y] op <= 4)
SALIR SI (op==4)
SEGÚN CASO op HACER
1: LeerDatos(nombre, motivo)
AgregaEle(longitud, final, frente ,Datos[,], nombre, motivo)
2: EliminarEle(longitud, final, frente, Datos[,])
3: BuscarEle(longitud, final, frente, Datos[,])
4: ESCRIBIR(“Hasta pronto”)
FINSEGUN
FINITERAR
FINPROGRAMA

Consigna 7: formar grupos de 6 personas. Coloque el número de GRUPO en la parte superior (que
le asigne el docente). Resuelva la consigna con letra clara y legible. Rodee con un círculo el/los número/s
asignado/s por el docente a resolver por su grupo en clase.

1-Realizar un algoritmo que permita lo siguiente: se tiene un listado de alumnos, sus DNI y el colegio
secundario del cual egresaron. Dado un colegio (nombre), indicar cuántos alumnos egresaron del mismo.
Realice las estructuras necesarias para almacenar la información; complete con un ejemplo de datos; utilice
enlace implicito para relacionar las estructuras.

2- Dada una lista de personas enlazadas de menor a mayor por nombre, realizar subprogramas para
recorrerla y contar la cantidad de nombres que tengan cantidad de letras impar.
Realice las estructuras necesarias para almacenar la información; complete con un ejemplo de datos.

3- Realizar un algoritmo que permita llevar una pila de libros que se han colocado en un depósito. Los libros
deben irse numerando desde un número inicial a un número final. Esta información también debe
guardarse. Ejemplo: El Exorcista N° 345.
• Realice las estructuras necesarias para almacenar la información; complete con un ejemplo de
datos; e indique cómo se realiza la inserción y eliminación de los elementos.
• Realice un programa con un menú que permita: agregar libros, eliminarlos, buscar su número y
mostrar su contenido.
UTN – FRM – Ing. en Sistemas de Información
Algoritmos y Estructuras de Datos
Ciclo lectivo 2016- Trabajos Prácticos
Clase 12- UT8 Hoja 10 de 9

4- Realizar un algoritmo que permita llevar una cola de personas esperando ser atendidas en una obra
social. A las personas se les pregunta también acerca del tema del que desean consultar y se les asigna un
número para ser atendidas. Esta información también debe guardarse. Ejemplo: José llegó primero y desea
ordenes de consulta, se le asigna el número 56; luego llegó María que desea autorizar un estudio, se le
asigna el número 35, más tarde llegó Adriana que desea consultar sobre sus anteojos se le da el número
36.
Realice las estructuras necesarias para almacenar la información; complete con un ejemplo de datos; e
indique cómo se realiza la inserción y eliminación de los elementos.
Realice un programa con un menú que permita: agregar personas, eliminar, buscar una persona y mostrar
el número asignado.

5- Teniendo un listado de enfermos, su obra social y la enfermedad crónica que padecen. Realizar un
algoritmo que permita Dada una obra social (nombre), indicar la cantidad de enfermos por enfermedad
crónica que tienen. Realice las estructuras necesarias para almacenar la información; complete con un
ejemplo de datos; utilice enlace explicito para relacionar las estructuras.

6- Dada una lista de alumnos enlazados por su edad de mayor a menor, realizar subprograma para correrla
y contar la cantidad de alumnos mayores de edad.
Realice las estructuras necesarias para almacenar la información; complete con un ejemplo de datos.

7- Realizar un algoritmo que permita llevar una pila de rótulos de carpetas que se han colocado en un
depósito. Las carpetas contienen los Títulos de propiedad emitidos por el gobierno, que van desde una
fecha inicial hasta una fecha final y el número de registro que la procesó. Ejemplo: Desde Marzo 2001 a
Abril 2003 Registro nro. 21 etc.
• Realice las estructuras necesarias para almacenar la información; complete con un ejemplo de
datos; e indique cómo se realiza la inserción y eliminación de los elementos (rótulos e información
asociada).
• Realice un programa con un menú que permita: agregar carpetas (con la numeración que incluye),
eliminarlos, buscar una carpeta y mostrar su contenido.

8- Realizar un algoritmo que permita llevar una cola de pacientes esperando ser atendidas en el consultorio
de un dentista. A las personas se les pregunta también que molestia tienen. Esta información también debe
guardarse. Ejemplo: José llegó primero y tiene una carie; luego llegó María que le realicen la extracción de
una muela, más tarde llegó Adriana que desea consultar sobre una molestia en sus encias, y por último,
llegó Pablo que desea realizarse un implante.
Realice las estructuras necesarias para almacenar la información; complete con un ejemplo de datos; e
indique cómo se realiza la inserción y eliminación de los elementos.
Realice un programa con un menú que permita: agregar pacientes, eliminarlos, buscar un paciente y
mostrar por qué ha venido al consultorio.

9- Realizar un algoritmo que permita lo siguiente: se tiene un listado de choferes de una empresa de
transporte, sus DNI y la patente del camión que manejan. Dado una letra de comienzo de patente, indicar
cuántos choferes manejan los camiones cuya patente comienzan con esa LETRA. Realice las estructuras
necesarias para almacenar la información; complete con un ejemplo de datos; e indique el enlace utilizado
para relacionar las estructuras.

 Consigna 8: Entregue esta Hoja con los ejercicios hechos en clase .


 Consigna 9: A modo de repaso y para afianzar los conocimientos adquiridos durante esta clase, Ud. debe
RENDIR los contenidos Prácticos de la CLASE 12 ( Tarea en casa Nro. 11) en el aula virtual de la cátedra en
forma individual.