UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 1 DISEÑO DE ALGORITMOS Para cada uno de los siguientes problemas: a) Identificar variables de entrada y variables de salida. b) Diseñar el diagrama de bloques correspondiente. c) Escribir el algoritmo correspondiente. d) Confeccionar una prueba de escritorio Ejercicio Nº 1 Calcular y mostrar la suma de los primeros naturales impares, mientras el resultado no termine en cero. Ejercicio Nº 2 Dada un número entero N mostrar sus múltiplos, mientras no supere un número dado X, ingresado por el usuario. Ejercicio Nº 3 Dada una lista de N números determinar para cada uno de ellos la cantidad de dígitos pares que poseen. Considere los siguientes casos: a) los números son enteros b) los números son reales Ejercicio Nº 4 Dado un número entero determinar la cantidad de dígitos primos que posee. Ejemplo: 97423 posee 3 dígitos primos. Ejercicio Nº 5 Dado un número natural N>10, contar cuantos números naturales consecutivos < N son necesarios sumar para superar el valor de N. Comenzar la sumatoria con el primer natural. Ejemplos: Si N=17 S=1+2+3+4+5+6>N Cant.Números= 6 Si N=26 S=1+2+3+4+5+6+7 >N Cant.Números= 7 Ejercicio Nº 6 Escriba un algoritmo que dé como salida las decenas de mil, unidades de mil, centenas, decenas y unidades de un número entero de cinco dígitos. Ejemplo: para el número 63244 deberá mostrar: 6 decenas de mil 3 unidades de mil 2 centenas 4 decenas -1- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 4 unidades Ejercicio Nº 7 Dado una lista N de números naturales, determinar para cada número si los dígitos invertidos forman capicúa. Ejemplo: si el número es 57475 deberá devolver el número 57475. Ejercicio Nº 8 Escribir el algoritmo correspondiente a la multiplicación rusa: Se parte de dos enteros x e y. Sucesivamente uno se va multiplicando por 2 y el otro se va dividiendo por 2. Cuando la división (entera) de como resto 1, el entero que va a multiplicarse se añade a un acumulador. El proceso se repite hasta que el entero que se divide vale cero. Por ejemplo, si multiplicamos 26 por 14: x 26 13 6 3 1 y 14 28 56 112 224 acumulador 0 28 28 140 364 Ejercicio Nº 9 Calcular C= 2p p A B , donde A (k * i ) y B (2 * i 1) , siendo p un número natura menor que 10 p i 0 i p y k el factorial de p. Ejercicio Nº 10 Dado un número M en base convertirlo a base 10 aplicando el método de la suma ponderada, con 1< <10. -2- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 2 ESTRUCTURAS FUNDAMENTALES DE DATOS Ejercicio Nº 1 Enunciar todos los tipos de datos fundamentales disponibles en TURBO PASCAL, clasificándolos en estándares y definidos por el usuario, ordinales y no ordinales, simples y estructurados. Ejemplificar cada uno de ellos. Ejercicio Nº 2 Definir tipos para representar: a) Un triángulo (tres lados y sus tres ángulos) b) La baraja española (número, palo) c) Planetas del Sistema Solar d) Meses del año e) Datos personales (nombre, apellido, fecha de nacimiento, sexo, estado civil, D.N.I) f) Una base de datos de los alumnos que cursan la carrera Ingeniería en Informática g) Productos que comercializa una empresa (código, nombre, precio, stock, etc.) h) Vuelos en un aeropuerto (número de vuelo, línea aérea, procedencia, hora de llegada) Escribir programas en Pascal que resuelvan los siguientes problemas Ejercicio Nº 3 Determinar si un triángulo es equilátero, isósceles o escaleno, usando la estructura definida en el ejercicio Nº 2.a Ejercicio Nº 4 Cargar los datos de una familia, mostrar y contar el número de mujeres menores de 25 años, usando la estructura de datos personales definida en el ejercicio Nº 2.e Ejercicio Nº 5 Dada la estructura definida en el ejercicio Nº 2.h, listar los vuelos que proceden de la ciudad de Bariloche por la tarde. Ejercicio Nº 6 Dadas dos matrices de números reales obtener a) la suma de ambas. b) la matriz producto c) determinar si son simétricas UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 Ejercicio Nº 7 Un elemento matricial, X[i,j], se llama punto silla si es tanto el valor mayor en el renglón i como el valor menor en la columna j. Realizar un programa que dada una matriz X, junto con dos subíndices k, h nos diga si el valor x[k, h] es un punto silla. Ejercicio Nº 8 Dados dos conjuntos A y B de tamaños M y N respectivamente, cuyos elementos son letras, resolver cada una de las siguientes operaciones: a) A B, b) A – B, c) A B Realizar dos versiones: a) con vectores b) con conjuntos Ambas deben contener un menú que permita seleccionar cuál de las operaciones desea realizarse. Ejercicio Nº 9 Dado un archivo de texto mostrar la cantidad de palabras y cantidad de líneas del texto. Ejercicio Nº 10 Diseñar un programa que permita guardar en un archivo los registros de los vuelos definidos en el Ejercicio Nº 2.h Ejercicio Nº 11 Crear una copia de un archivo de texto de entrada donde cada signo de puntuación sea reemplazado por su nombre, es decir, se deberá reemplazar “.” por “PUNTO”; “,” por “COMA”, etc. UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 3 TIPOS ABSTRACTOS DE DATOS: LISTAS Ejercicio Nº 1 Diseñar el TAD Lista de números enteros Los siguientes problemas deberán ser resueltos utilizando el TAD definido en Ejercicio Nº 1. Si es necesario modifique el TAD para que las listas contengan otro tipo de elementos. Ejercicio Nº 2 Escribir la función Inversa que toma como entrada una lista de enteros y devuelve otra con los elementos invertidos. Ejercicio Nº 3 Escribir un programa que acepte dos listas, L1 y L2, y determine si L1 es prefijo de L2. Ejemplo: Si L1= 23, 5, 6, 48, 10 y L2= 23, 5, 6, 48, 10, 15, 81, 33, 7 L1 es prefijo de L2 Ejercicio Nº 4 Dada una cierta cantidad de pares ordenados cuyas componentes son distintas de cero, indicar cuantos pertenecen a cada cuadrante y formar una lista con aquellos pares ordenados que pertenecen al segundo cuadrante. Ejercicio Nº 5 Escribir una función que calcule el promedio de los elementos de una lista. Ejercicio Nº 6 Dada una lista de números naturales, depurarla eliminando de ella aquellos números que sean capicúas. Mostrar la lista modificada. Ejercicio Nº 7 Escribir una función que cuente cuantas letras comunes tienen dos listas pasadas como parámetros. Ej: L1= ‘A’, ‘T ’,’A’,’R’,’A’,’X’,’I’,’A’ y L2= ’T’,’A’,’X’,’O’,’N’,’O’,’M’,’I’,’A’ Cantidad de letras comunes=4 Ejercicio Nº 8 Escribir un procedimiento que dada una lista de palabras en minúsculas devuelva otra con las mismas palabras pero en mayúsculas. Ejercicio Nº 9 Implementar el TAD Conjunto mediante listas con las operaciones: Conjunto Vacio UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 Añadir un elemento al conjunto Unión de conjuntos Intersección de conjuntos Diferencia de conjuntos Pertenencia de un elemento a conjunto Ejercicio Nº 10 Dados dos conjuntos A y B de tamaños M y N respectivamente, cuyos elementos son letras, mostrar el resultado de las operaciones: a) A B b) A – B c) A B Ejercicio Nº 11 Escribir un programa en el que dados dos archivos de textos, F1 y F2, se formen dos conjuntos con las palabras respectivas de F1 y F2. Posteriormente encontrar las palabras comunes a ambos y mostrarlas por pantalla. UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 4 TIPOS ABSTRACTOS DE DATOS: PILA Ejercicio Nº 1 Diseñar TAD PILA de números enteros Resolver los problemas siguientes usando el TAD definido. Si es necesario, utilizar también el TAD Lista Ejercicio Nº 2 Ingresar una serie de números en forma decreciente y luego mostrarlos en forma creciente. Ejercicio Nº 3 Determinar si una palabra o frase es palíndromo. Ejemplo: Neuquén. Ejercicio Nº 4 Dada una pila ordenada, eliminar aquellos nodos que sean números pares de tal manera que la misma quede ordenada Ejercicio Nº 5 Diseñe un programa que decida si una sucesión de caracteres leídos del periférico de entrada, que contiene, entre otros símbolos, paréntesis, llaves y corchetes, abiertos y cerrados, está equilibrada con respecto a ellos, es decir, cada uno tiene tantos abiertos como cerrados y cada vez que aparece uno cerrado, el último de estas clases que apareció fue su correspondiente abierto. Modifique el TAD definido para resolver este problema. Ejercicio Nº 6 Un establecimiento de autos tiene un solo carril donde estacionan n autos (uno atrás de otro), y en el extremo de la cochera está la única E/S. Si un usuario quiere dejar su auto pero no hay lugar, se retira sin estacionar, si viene a retirar su vehículo y este no está en la salida, todos los autos que lo bloquean deberán ser retirados y luego de quitar el auto correspondiente los demás se reingresarán en el mismo orden en que estaban. Escribir un procedimiento que ingrese un par de valores (x, n). Donde: x { a indica arribo y p indica partida } n { es el número de patente del auto } Se debe imprimir un mensaje para cada arribo y cada partida junto al número de patente. UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 5 TIPOS ABSTRACTOS DE DATOS: COLA Ejercicio Nº 1 Implementar el TAD COLA de números enteros Resolver los problemas siguientes usando el TAD definido en el ejercicio 1. Si es necesario, utilizar también los TAD Lista y Pila implementados en prácticos anteriores Ejercicio Nº 2 Diseñe procedimientos o funciones para: a) Obtener el último elemento de una cola. b) Producir la inversa de una cola. c) Concatenar dos colas, es decir, que coloque los elementos de una al final de la otra Ejercicio Nº 3 Confeccione una función que lea una secuencia de números naturales terminados en cero y los muestre en el orden en que fueron leídos. Ejercicio Nº 4 Leer una serie de números pares e impares. Los números pares vienen ordenados en forma creciente y los impares en forma decreciente. Los pares e impares vienen mezclados, pero respetando la secuencia dentro de cada grupo. El fin de la secuencia de números esta dado por un número negativo. Se los debe ingresar a todos y mostrarlos en forma ascendente. Ejercicio Nº 5 El agente 007 ha inventado un nuevo método de codificación de mensajes. El mensaje X se codifica en dos pasos: 1) X se transforma en X’ reemplazando cada sucesión de caracteres consecutivos que no sean vocales por su imagen especular. 2) X’ se transforma en X’’ tomando sucesivamente el primer carácter de X’ y luego el último, el segundo y luego el penúltimo, etc. Ejemplo: X = “Bond, James Bond” X’ = “BoJ ,dnameB sodn” X’’ = “BnodJo s, dBneam” Ejercicio Nº 6 Con un archivo de texto se desea realizar las siguientes acciones: listar todas las palabras del archivo que comienzan por una misma vocal. Luego visualizar las palabras del archivo empezando por las que comienzan por la vocal A (en el orden que aparecían en el archivo), a continuación las palabras que comienzan por la vocal E y así sucesivamente. UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 6 MÉTODOS DE CLASIFICACIÓN, BÚSQUEDA Y MEZCLA Ejercicio Nº 1 Dada la lista: 25 57 48 37 12 92 86 33 Clasificar por los métodos: 1. Selección 2. Inserción 3. Burbuja 4. Merge Sort a) cada vez que reorganice el vector debe mostrar el nuevo vector reformado b) indicar cuántas comparaciones y cuántos intercambios se realizan Ejercicio Nº 2 Dada una lista de N números, ordenarla de menor a mayor por el método Quick Sort y usando Búsqueda Binaria insertar M elementos de tal manera que se preserve el orden. Ejercicio Nº 3 Dada una lista de N números naturales desordenados, que puede contener elementos repetidos, se desea ordenarla a través del método de clasificación por urnas (Binsort). Informar cuál o cuáles de ellos se repiten, junto con su correspondiente frecuencia de aparición y mostrar su posición Ejercicio Nº 4 Dadas dos listas de caracteres, A y B, ordenadas, se desea obtener una tercera lista C por intercalación o mezcla de ambas listas, sin perder el orden. Visualizar la lista C ordenada. Ejercicio Nº 5 Escriba un programa Pascal que a partir de dos vectores A y B, dados como datos, construya un tercer vector C cuyos elementos pertenezcan al vector A pero no pertenezcan al vector B. Ejercicio Nº 6 Dada la lista de enteros: 22 36 6 79 26 45 75 13 31 62 27 76 33 16 62 47 Clasifique usando: a) Clasificación rápida b) Clasificación por urnas (0 – 9) - 1- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 7 RECURSIVIDAD Ejercicio Nº 1 Calcular de manera recursiva el MCD de dos números enteros positivos mediante el Algoritmo de Euclides Ejercicio Nº 2 Escriba una función o procedimiento recursivo Pascal que permita calcular la potencia N-ésima de un número X Ejercicio Nº 3 Escribir funciones o procedimientos recursivos: a) COCIENTE (A, B). Devuelve el cociente entero entre A y B enteros b) RESTO (A, B). Devuelve el resto de la división entera entre A y B c) BINARIO (N). Devuelve la representación binaria de N, siendo N entero expresado en base 10 d) CAMBIO DE BASE (N, ). Devuelve la representación de base de N, dado en base 10. Ejercicio Nº 4 Implemente una función recursiva que imprima por pantalla los valores desde 1 hasta el número introducido desde teclado por el usuario. Ejercicio Nº 5 Implementar una función que sume los elementos de una lista de números, recursivamente. Ejercicio Nº 6 a) Indique qué hace el siguiente programa cuando se ingresan números enteros entre 0 y 9 en forma sucesiva, presionando <enter> o <retorno> cada vez que se ingresa un número: Program TestRecursivo (Input, Ouput); Procedure Recursivo1; Var Num: Integer; Begin If (Not Eoln) Then Begin Readln (Num); Recursivo1; Writeln (Num) End End; (* Fin de Recursivo1 *) BEGIN Recursivo1 END. b) Explique detalladamente cómo funciona el programa "TestRecursivo". En función de su explicación, dé nombres más apropiados a este programa y al procedimiento "Recursivo1". c) Compárelo con un programa iterativo que haga lo mismo sin usar "Recursivo1". -1- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 Ejercicio Nº 7 a) Indique qué hace el siguiente subprograma recursivo si sus parámetros son positivos: Function Recursiva1 (Num1, Num2: Integer): Integer; Begin If Num2 > 0 then Recursiva1 := Num1 + Recursiva1( Num1, Num2 - 1 ) Else Recursiva1 := Num1 End; b) Explique detalladamente cómo funciona y de acuerdo con su explicación dé un nombre más apropiado a este subprograma recursivo. c) Escriba el programa completo, en lenguaje Pascal, que haga uso de este subprograma recursivo y luego compílelo y ejecútelo para verificar su funcionamiento. d) Compárelo con un programa iterativo que haga lo mismo sin usar el subprograma "Recursiva1". e) ¿Qué ocurre si en las instrucciones de asignación se cambia "Num1" por "Num2"? Ejercicio Nº 8 Diseñe una función recursiva tal que dados dos vectores A= (a1, a2, …, an) y B= (b1, b2, …, bn) devuelva su producto escalar, es decir, a1* b1+ a2* b2+ ….+an* bn Ejercicio Nº 9 El sistema monetario consta de monedas de valor p1, p2, ..., pn (orden creciente) pesos. Escribir un programa que tenga como entrada el valor de las n monedas en pesos, en orden creciente, y una cantidad X pesos de cambio. Calcule: a) el número mínimo de monedas que se necesitan para dar el cambio X b) Calcule el número de formas diferentes de dar el cambio de X pesos en con la pi monedas Aplicar técnicas recursivas para resolver el problema. -2- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 8 PUNTEROS Ejercicio Nº 1 Indicar cual es la salida de los siguientes programas: a) program prueba1; type puntero = ^char; var a, b: puntero; N: integer; begin New(a); N:=10; a^:= ‘a’; New(b); b^:=’b’; writeln(a^); a:= b; b^:= ‘z’; writeln(b^, N+ord(a^), a^) end. b) program prueba2; type alumno = record nbre: string; edad: integer end; punt_al: ^alumno; var A1, A2, A3: punt_alt; begin New(A1); A1^.nbre:=´JOSE´; A1^.edad:= 21; New(A2); A2^.nbre:=´JUAN´; A2^.edad:= 20; New(A3); A3^.nbre:=’RAUL’; A3^.edad:= 22; A3^.edad:= A1^.edad+2; A2^.nbre:=’JUANA’; A1:= A3; writeln(A1^.nbre, A1^.edad, A2^.nbre, A2^.edad, A3^.nbre, A3^.edad) end. Ejercicio Nº 2 a) Escribir las declaraciones necesarias para definir un tipo de datos punteros a un registro de estudiante con los campos Apellido, Nombre, Fecha-nacimiento y Notas. Los dos primeros campos definirlos de tipo puntero a cadena de 25 caracteres. El campo Fecha puntero a un registro con los campos día, mes y año. Y el campo Notas puntero a un array de 10 elementos. b) Escribir un procedimiento que devuelva los datos correspondientes a un registro de estudiante. Ejercicio Nº 3 Dada las declaraciones siguientes: type cadena= string[15]; ptrcad = ^cadena; var c: cadena; pc, pch: ptrcad; -3- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 Señalar los errores y correcciones necesarias: c:= ´cadena de caracteres´; new(pc); pc:= c; new(pch); pch^:=pc; pc^:= c+’nuevo’; write(c); write(pch); pch:=nil Ejercicio Nº 4 Indicar si las asignaciones siguientes son Correctas o Incorrectas. type punt_ent = ^integer var a, b: punt_ent; num: integer; (1) b:= ^20; (2) num:= 25; (3) a:= nil; (4) a^:= num; (5) num:= b + a; (6) b:= a^; (7) new(b) a^:=b^ (8) b^:= a^; (9) num:= b^* a^; (10) a:=b dispose(b) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) a^:= nil; num:= a^; b:= 20; b^:= 15; num:= nil; new(q) q^:= p^ b:=a; b:= num; a^:= b^+ 13; dispose(b) a:=b Ejercicio Nº 5 Indicar si las asignaciones siguientes son Correctas o Incorrectas. type cadena = string[15]; persona= record nbre1, nbre2: cadena end; punt_pers= ^persona; var A, B: punt_pers; C: cadena; (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) A:= B; B.nbre2:= a.nbre1; B:= nil; A^.nbre1:=C; B^.nbre2:= ‘MARIA’; B.nbre2:= C; nbre2:= ‘JOSE’; A^.nbre2:=nil; C:= B.nbre2; A:= C; B^.nbre1:= A^.nbre2; A:= C^.nbre1; A^.NBRE1:= ‘JOSE’; (14) (15) (16) (17) (18) (19) (20) (21) -4- B:=’MARIA’; C:= NIL; A^.nbre1:= A^.nbre2+B^.nbre1; A^.nbre1:= C; B^.nbre1:= C+’LUIS’; Nbre2^:=’LUIS’ With A^ do begin Nbre1:=’MARIA’; Nbre2:= ‘JOSE’ End; With A^ do begin Nbre1:= B^.Nbre2; Nbre2:= ‘MARIA’ UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 Ejercicio Nº 6 ¿Qué se muestra en pantalla cuando se ejecutan los siguientes programas? a) program prueba1; type punt_c = ^char; var P1,P2: punt_c; begin new(P1); new(P2); P1^:= ‘A’; P2^:= ‘B’; P1:= P2; Writeln(P1^); Writeln(P2^); End. b) program prueba2; type punt_c = ^char; var P1,P2: punt_c; begin new(P1); new(P2); P1^:= ‘B’; P2^:= ‘A’; P1^:= P2^; Writeln(P1^); Writeln(P2^); End. Ejercicio Nº 7 ¿Qué errores se producirán en la ejecución del siguiente programa? program nada; var p, q: real; begin new(q); q^:= 3.33; p^:= 88.8; write(p^+ q^); dispose(p); q:= nil; new(p); if q=nil then p^:= q^ else p^:= 5001.2 dispose(p); dispose(q) end. -5- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 9 LISTAS CON VARIABLES DINAMICAS Listas Simples Enlazadas Ejercicio Nº 1 Definir el TDA Lista con punteros Resolver los problemas siguientes usando las operaciones definidas en Ejercicio 1 Ejercicio Nº 2 Escribir una función que para una lista enlazada devuelva otra lista con los elementos invertidos. Ejercicio Nº 3 Generar una lista simple enlazada de números enteros ordenándola a medida que se la arme. Ejercicio Nº 4 Dadas dos listas ordenadas que contienen datos de personas (apellido, nombre, edad), generar una sola lista ordenada por apellido. Ejercicio Nº 5 Una forma de almacenar un número natural de valor mayor que el permitido en una computadora es introducir cada dígito en un nodo de una lista enlazada. Por ejemplo, la siguiente lista representa al número 92578: Escriba un procedimiento o función que tome como parámetro un puntero a una lista enlazada y devuelva el número correspondiente en una variable de tipo real. Antes diseñar un procedimiento que lea por teclado una sucesión de dígitos (caracteres) y los introduzca como dígitos (naturales) en una lista enlazada. Ejercicio Nº6 Se quiere representar el tipo abstracto de datos conjunto de tal forma que los elementos estén almacenados en una lista enlazada. Escribir un programa para implementar el TDA Conjunto mediante lista. En la unidad deberá contener los tipos de datos necesarios y las operaciones: Conjunto vacío Añadir un elemento al conjunto Unión de Conjuntos. Intersección de conjuntos. Diferencia de conjuntos. -1- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 Listas Doblemente enlazadas Ejercicio Nº 9 Implemente el TAD Lista Doble Ejercicio Nº 10 Escribir un procedimiento para eliminar un nodo X de una lista doblemente enlazada y engancharlo al final. Ejercicio Nº 11 Escribir un procedimiento que tenga como parámetro de entrada LC, Suponer que LC apunta al primer nodo de una lista circular doblemente enlazada de caracteres. El procedimiento debe de escribir los caracteres de la lista LC en orden inverso, es decir, del último al primero. LC H J T R La salida debe ser: R T J H Ejercicio Nº 12 Dada una lista doblemente enlazada de números enteros, escribir las rutinas necesarias para que dicha lista esté ordenada en orden creciente. La ordenación se debe hacer intercambiando los punteros a los nodos. Ejercicio Nº 13 Dada una lista doblemente enlazada ordenada con claves repetidas, realizar un procedimiento de inserción de una clave en la lista, de tal forma que si la clave ya se encuentra en la lista la inserte al final de todas las que contienen la misma clave. -2- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 10 PILAS Y COLAS CON VARIABLES DINAMICAS Ejercicio Nº 1 Definir el TAD PILA usando punteros Usando las operaciones definidas en el Ejercicio 1 resolver los siguientes problemas. Si es necesario considere utilizar el TAD Lista Ejercicio Nº 2 Diseñar un procedimiento que realice la copia de una pila en otra. Ejercicio Nº 3 Escribir un procedimiento o función que reconozca cadenas con el formato an b am b an+m donde n y m son mayores o iguales que 1. Ejercicio Nº 4 Una expresión aritmética construida con los operadores aritméticos binarios ‘+’, ‘-‘, ‘*’, ‘/’ y operandos de un único dígito entre 0 y 9, se dice que está en forma posfija si es o bien un sólo operando o dos expresiones en forma posfija una detrás de otra seguidas inmediatamente de un operador. Ejemplo: Forma infija: (3 + 5/9) * (6 − 9) Forma posfija: 3 5 9 / + 6 9 − * a) Diseñe un algoritmo iterativo que calcule el valor de una expresión dada en forma posfija. b) Diseñe un algoritmo que dada una expresión en forma infija genere su versión posfija. Ejercicio Nº 5 Suponga una pila que contiene 5 elementos. Hay un único elemento que coincide con su posición dentro de la pila. Se deberá generar una o dos pilas según corresponda eliminando el número que coincida con su posición. Se pueden presentar dos casos: a) Que el primer o el último elemento sea el buscado, en ese caso se genera una sola pila, por ejemplo: 1 9 5 7 6 9 5 7 6 b) Que el elemento buscado sea intermedio, en ese caso se generan dos pilas, ejemplo: 9 9 2 8 5 7 8 -1- 5 7 UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 Ejercicio Nº 5 Definir el TAD COLA usando punteros Usando las operaciones definidas en el Ejercicio 5 resolver los siguientes problemas. Si es necesario, puede utilizar los TAD Lista y Pila. Ejercicio Nº 6 Escribir procedimientos o funciones para resolver: a) Producir la inversa de una cola. b) Concatenar dos colas, es decir, que coloque los elementos de una al final de la otra c) Intercalar los elementos de dos colas en otra Ejercicio Nº 7 Con archivo de texto se quieren realizar estas acciones: formar una lista enlazada, de tal forma que en cada nodo esté la dirección de una cola que contiene todas las palabras del archivo que empiezan por una misma vocal. Una vez formada esta estructura, se desea visualizar las palabras del archivo, empezando por la cola que contiene aquellas palabras que empiezan por la letra a, luego por la letra e, y así sucesivamente. Ejercicio Nº 8 En un archivo de texto se encuentran los resultados de un torneo, de tal forma que en cada línea se encuentra Apellido, Nombre, puntos obtenidos en el torneo. Se desea escribir un programa que lea el archivo y determine los tres competidores con mayor puntaje. Luego mostrar todos concursantes en el orden en que aparecen en el archivo. -2- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 11 ÁRBOLES Ejercicio Nº 1 Considere el árbol siguiente: a) b) c) d) e) f) ¿Cuál es su altura? ¿Está el árbol equilibrado? ¿Por Qué? Listar todos los nodos hoja. ¿Cuál es el predecesor inmediato (padre) del nodo 6? Listar los hijos del nodo 10 Listar los sucesores del nodo 10 Ejercicio Nº 2 Para cada una de las siguientes listas de letra: 1. M, Y, T, E, R 2. R, E, M, Y, T 3. T, Y, M, E, R 4. C, O, R, N, F, L, A, K, E, S a) Dibujar el árbol binario de búsqueda que se construye cuando las letras se insertan en el orden dado. b) Realizar recorridos Enorden, Preorden y Postorden del árbol y mostrar la secuencia de letras que resultan en cada caso. Ejercicio Nº 3 El recorrido en preorden de un determinado árbol binario es: GEAIBMCLDFKJH y en inorden: IABEGLDCFMKHJ a) Dibujar el árbol binario. b) Dar el recorrido en postorden. c) Diseñar una función para dar el recorrido en postorden dado el recorrido en preorden e inorden y escribir un programa para comprobar el resultado del apartado anterior -1- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 Ejercicio Nº 4 Escribir una función que acepte un puntero a un árbol binario y un puntero a un nodo del árbol, y retorna el nivel del nodo en el árbol. Ejercicio Nº 5 Se dispone de un árbol binario de elementos de tipo entero. Escribir funciones que calculen: a) El promedio de sus elementos. b) La suma de sus elementos que son múltiplos de 5. Ejercicio Nº 6 Dado un árbol binario construir su árbol espejo. Ejemplo: A A Árbol Espejo B D C E C F F B E D Ejercicio Nº 7 Implementar el TAD Árbol Binario de Búsqueda con operaciones que permitan: generar un ABB. borrar un nodo de un ABB. enganchar un nodo determinar si el árbol es vacío. contar la cantidad de nodos terminales de un árbol binario Ejercicio Nº 8 Construir un ABB con las claves a) 50,25,75,10,40,60,90,35,45,70,42. b) 10,75,34,22,64,53,41,5,25,74,20,15,90. Ejercicio Nº 9 Dado un árbol binario de búsqueda diseñe un procedimiento que liste los nodos ordenados descendentemente. Ejercicio Nº 10 Una lista de N elementos almacena cadenas de caracteres. Utilizando un árbol binario de búsqueda como estructura auxiliar ordene ascendentemente la cadena de caracteres. -2- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 TRABAJO PRÁCTICO Nº 12 GRAFOS Ejercicio Nº 1 Represente los siguientes grafos por medio de: a) una representación lineal b) una representación no lineal Ejercicio Nº 2 Implemente el TAD GRAFO Ejercicio Nº 3 Defina procedimientos para los recorridos en profundidad y amplitud de un grafo Ejercicio Nº 4 Un grafo consta de los siguientes nodos V= {A, B, C, D, E} y la matriz de adyacencia M. M= a) b) c) d) 1 0 1 1 1 0 1 1 0 0 1 0 1 0 0 0 1 1 1 0 1 1 0 1 1 Dibujar el grafo correspondiente Representar el grafo mediante listas de adyacencia Realizar el recorrido en profundidad partiendo del nodo C Realizar el recorrido en anchura partiendo del nodo C Ejercicio Nº 5 a) Utilizar el algoritmo de Dijkstra para encontrar los caminos más cortos que van desde el nodo a hasta los restantes nodos, en el siguiente grafo dirigido. Mostrar los valores S, D y P para todos los pasos de ejecución del algoritmo. A partir del resultado, encontrar cuál es el camino más corto desde a hasta d. b) Implemente el algoritmo de Dijkstra -1- UNIVERSIDAD CATOLICA DE SALTA FACULTAD DE INGENIERIA E INFORMATICA ESTRUCTURAS DE DATOS Y ALGORITMOS Año 2008 Ejercicio Nº 6 a) Mostrar el resultado de la aplicación del algoritmo de Floyd sobre el siguiente grafo dirigido. b) Implemente el algoritmo de Floyd Ejercicio Nº 7 Para el siguiente grafo calcular: a) El árbol de expansión de coste mínimo utilizando el algoritmo de Prim. b) El árbol de expansión de coste mínimo utilizando el algoritmo de Kruskal. ¿Son iguales las soluciones obtenidas en ambos algoritmos? En caso contrario, ¿son válidas las distintas soluciones? ¿Por qué? c) Implemente los algoritmos de Prim y Kruskal. -2-