Anda di halaman 1dari 5

ALGORITMO Y ESTRUCTURA DE DATOS - 2014

1. EJERCICOS DE REPASO
1.1.

1.2.

Escribir un programa que lea una fecha en formato DD-MM-AAAA y calcule el nmero de
das transcurridos desde el da 1 de Enero de ese ao.
Imprimir el mayor, el menor, la suma de diez nmeros aceptados por teclado.

1.3.

Calcular el tiempo equivalente en horas minutos y segundos a un nmero de segundos


ledo. El resultado debe imprimirse en un formato como el siguiente:
7322 segundos equivalen a: 2 horas, 2 minutos y 2 segundos.

1.4.

Dado un mes del ao, su nmero de das y el da de la semana en que comienza, realizar
un programa que muestre por pantalla la representacin del calendario correspondiente a
dicho mes.

1.5.

Realizar una aplicacin para gestionar cierta informacin de los empleados de una
empresa. El diseo (incompleto) de la aplicacin estar formado por dos clases: la clase
empleado y la clase empleadoPorHoras (que hereda de empleado), junto con un programa
principal que llama a las operaciones pblicas de ambas clases.
Clase empleado: contiene como datos privados el nombre del empleado y su nmero de
DNI. Adems, sus mtodos pblicos son: un constructor de la clase, dos operaciones
selectoras (GetNombre y GetDNI), y una operacin destructora de la clase.
Clase empleadoPorHoras: contiene como datos privados el coste horario de un empleado y
su nmero de horas trabajadas durante la semana. Adems, dispone de los siguientes
mtodos pblicos: un constructor de la clase (que requiere de su clase base el nombre y el
DNI del empleado) y una operacin llamada DevuelvePaga (que calcula la paga del
empleado multiplicando su coste horario por el nmero de horas trabajadas).

2. Recursividad
2.1.

Implemente una funcin para potencias enteras con recursividad.


Definicin recursiva para elevar un nmero a una potencia: Un nmero elevado a la
potencia cero produce la unidad; la potencia de un nmero se obtiene multiplicndolo por s
mismo elevando a la potencia menos uno.
Por ejemplo: 32 = 3*(31) = 3*(3*30) = 3*(3*1)= 3*(3) = 9

2.2.

Implemente una funcin recursiva que, teniendo un array ingresado por teclado, me
devuelva la suma de todos sus elementos.

2.3. Algoritmo de Euclides: mostrar que el mximo comn divisor (mcd)


de a y b, (a > b > 0), es igual a a si b es cero, en otro caso es igual
al mcd de b y el remanente de a dividido por b, si b > 0.
2.4.
Escribir segmentos de programa que lleven a cabo, cada uno de ellos, lo siguiente:
a) Calcule la parte entera del cociente, cuando el entero a se divide por el entero b.
b) Calcule el residuo entero, cuando el entero a es dividido por el entero b.
c) Utilice los mdulos a) y b) para escribir una funcin que introduzca un entero no negativo
por teclado y lo imprima como una serie de dgitos separados por espacios.
2.5.

Modificar la bsqueda Binaria vista en clase de manera tal que sea una funcin recursiva.

3. Listas
3.1.

Implementar la funcin fnInvierte(lista). Esta funcin invertir el orden original de los


elementos en la lista, de tal forma que el ltimo elemento ser ahora el primero, el
penltimo ser el segundo, y as hasta que el primero sea el ltimo. Considere que la lista
no est vaca y que no se construir una nueva, slo se invertir el orden de los elementos
de la lista original.

3.2.

Escribir un programa que permita agregar n enteros a una lista de nmeros aceptada
por teclado. El programa pregunta si debe agregar al principio, al final o en el medio y
agrega el elemento a la lista.

3.3.

Escribir un programa que permita eliminar elementos de una lista de nmeros aceptada
por teclado. El programa pregunta qu elemento borrar considerando que el primero por la
izquierda es el 1.

3.4.

Crear una funcin que dada dos listas enlazadas, pasadas como parmetro, devuelva
una lista enlazada que es la unin de las otras dos.

3.5.
3.6.

Escriba la clase CircList para implementar una lista circular.


Agregue el mtodo: insertAfter2(int oldValue, int n, int newValue) que inserte un nodo
con el valor newValue despus de la ensima ocurrencia de oldValue.

4. Pilas
4.1.

Realice un programa en C++ que llene una pila con las letras del alfabeto y las vaya
sacando.
Inicial: F->E->D->C->B->A
Final: E->D->C->B->A

4.2.

Escriba un programa que introduzca una palabra y utilice una pila para imprimir la
misma palabra invertida.

4.3.

Escribir una funcin Reemplazar que tenga como argumentos una pila con tipo de
elemento int y dos valores int: nuevo y viejo de forma que si el segundo valor aparece en
algn lugar de la pila, sea reemplazado por el segundo.

4.4.

Escriba una funcin que indique si dos pilas son iguales. Se entiende que dos pilas son
iguales cuando sus elementos son idnticos y aparecen en el mismo orden.

4.5.

Se tiene la siguiente expresin interfija:


(6+2)*5-8/4 Realizar un programa en C++ que me calcule la expresin postfija.

5. Colas
5.1. Escribir un programa en C++, que lea cierta cantidad de enteros y luego determine: Cul
es el valor mayor, el valor menor y el promedio de todos los datos.

5.2.

Disee un programa que sea capaz de leer dos colas y mediante un mensaje indicar si
son iguales. Nota: los elementos constitutivos de las colas son caracteres.

5.3.

En un supermercado, se tiene slo una caja habilitada para que los clientes puedan
cancelar sus compras. La caja tiene prioridad para mujeres embarazadas. Dada esta
situacin, se pide que se genere un sistema que calcule la cantidad de productos comprados
por cada cliente y el monto total gastado, tambin la cantidad de embarazadas que
accedieron a la cola.

6. rboles
6.1.

Disear una aplicacin que permita:


a) Cargar en un array 30 nmeros generados aleatoriamente entre 100 y 500.
b) Imprimir los nmeros.
c) Crear un rbol binario de bsqueda con los datos del array.

6.2.

Reconstruir un rbol binario a partir de los recorridos siguientes:


a) Preorden: 2, 5, 3, 9, 7, 1, 6, 4, 8.
Inorden: 9, 3, 7, 5, 1, 2, 6, 8, 4.
b) Inorden: 5, 6, 12, 10, 1, 9, 13, 4, 8, 2, 7, 3, 11.
Postorden: 6, 5, 10, 9, 1, 13, 12, 2, 8, 3, 11, 7, 4.

6.3.

Especificar la operacin contarPorNivel que devuelve el nmero de ndos del nivel isimo
de un rbol binario.

6.4.

Especificar la operacin espejo que devuelve la imagen especular de un rbol binario.

7. Ordenamiento
7.1.

Una ordenacin de seleccin recorre un arreglo buscando el elemento ms pequeo del


mismo. Cuando encuentra el elemento ms pequeo ste es intercambiado por el primer
elemento del arreglo.
El proceso se repite para el subarreglo que comienza con el segundo elemento del arreglo.
Cada pasada del arreglo resulta en un elemento colocado en su posicin correcta.
Para un arreglo de n elementos, debern hacerse n-1 pasadas, y para cada subarreglo
debern hacerse n-1 comparaciones. Cuando el subarreglo bajo proceso contenga un solo
elemento, el arreglo habr quedado terminado y ordenado. Escriba la funcin recursiva de
selectSort().

7.2.

Ordenamiento por intercalacin


Pasos:

Dividir el archivo original en dos subarchivos del mismo tamao.

Trabajar sobre el subarchivo izquierdo:

Dividir el archivo en n subarchivos adyacentes de tamao 1.

Intercalar pares adyacentes (separados ) de archivos.

Trabajar sobre el subarchivo derecho:

Dividir el archivo en n subarchivos adyacentes de tamao 1.

Intercalar pares adyacentes (separados ) de archivos.

Repetir el proceso hasta que solo quede un archivo de tamao n.

7.3.

La ordenacin de tipo burbuja es ineficiente en caso de arreglos grandes. Haga las


siguientes modificaciones simples para mejorar el rendimiento de este tipo de ordenacin:

a.

b.

Despus de la primer pasada el nmero ms alto est garantizado que deber


aparecer en el elemento numerado ms alto del arreglo; despus de la segunda
pasada, los dos nmeros ms altos estarn en su lugar, y as en lo sucesivo. En
vez de hacer 9 comparaciones en cada pasada, modifique la ordenacin tipo
burbuja para llevar a cavo 8 comparaciones en la segunda pasada, 7 en la 3era y
as sucesivamente.
Los datos en el arreglo pudieran ya estar en orden casi apropiado. Modifique la
ordenacin para verificar si se han hecho intercambios. Si no se han hecho
intercambios, entonces los datos ya deberan estar en el orden apropiado y, por
lo tanto, el programa debe darse por terminado. Si ha habido intercambio,
entonces por lo menos se requiere una pasada adicional.
El array a usar es: [2, 6, 4, 8,10,12, 89, 58, 45,37]

8. Bsqueda
8.1.

Describir qu hace la siguiente funcin; si es recursiva o iterativa. Si es una funcin


recursiva, realizar su versin iterativa. Si es una funcin iterativa, realizar su versin
recursiva.
void fn(int x, int v[], int ini, int fin, int pos, bool retorno)
{
pos = ini;
retorno =false;
while ( (pos <=fin) && (!retorno) ){
if (v[pos]==x){
retorno =true;
}
else
++pos;
}
}

8.2.

Algoritmo de bsqueda secuencial e insercin para lista enlazada: Modificar los mtodos
o funciones miembro buscar y buscarRecursiva de la clase lista de tal manera que si no
encuentra el elemento buscado lo inserte.

8.3.

Escribir un algoritmo que dado una secuencia de nmeros ingresados por teclado vaya
generando un rbol balanceado. Modificar la Clase rbol vista en clase. Los datos
ingresados al rbol son de tipo char.

9. Hash table
9.1.
Probar el algoritmo visto en clase agregndole una funcin main.
9.2.

La manera ms simple de resolver una colisin es construir, para cada localizacin de la


tabla, una lista enlazada de registros cuyas claves caigan en esa direccin. Este mtodo se
conoce normalmente con el nombre de encadenamiento separado y obviamente la cantidad
de tiempo requerido para una bsqueda depender de la longitud de las listas y de las
posiciones relativas de las claves en ellas.
Modificar el algoritmo visto en clase para que acepte listas enlazadas.

9.3.

Modificar el algoritmo visto en clase para que puedan eliminarse los registros. Una vez
eliminados, pueda hacerse un rehashing de la tabla.

Anda mungkin juga menyukai