Prácticos - MermanPascal - Introducción a la Informática

Anuncio
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-
Descargar