Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Algoritmos y Programación 06 2012, Exámenes de Algoritmos y Programación

Final Junio 2012

Tipo: Exámenes

2011/2012

Subido el 31/05/2012

pargon-1
pargon-1 🇪🇸

4

(7)

3 documentos

Vista previa parcial del texto

¡Descarga Algoritmos y Programación 06 2012 y más Exámenes en PDF de Algoritmos y Programación solo en Docsity! PROGRAMACIÓN - Curso 2011-2012 5 de Junio de 2012 APELLIDOS: NOMBRE: CUESTIONES (50%) 1. Ordenar el siguiente vector por el método Quicksort, reflejando la situación del mismo al finalizar cada una de las particiones realizadas e indicando para cada una de ellas el valor del extremo izquierdo, el derecho y el pivote utilizado. Vector v = { 1, 5, 67, 2, 4 } Rellenar la siguiente tabla con la información de cada partición: Partición nº 1 Izquierda = 0 Derecha = 4 Pivote = 67 Situación al finalizar la partición: v = 1 5 4 2 67 Partición nº 2 Izquierda = 0 Derecha = 3 Pivote = 5 Situación al finalizar la partición: v = 1 2 4 5 67 Partición nº 3 Izquierda = 0 Derecha = 2 Pivote = 2 Situación al finalizar la partición: v = 1 2 4 5 67 Partición nº 4 Izquierda = Derecha = Pivote = Situación al finalizar la partición: v = 2. Sea una Cola sobre la que se implementa una nueva operación que copia todo su contenido en una Pila. Suponiendo que sea n el número de elementos de la Cola, indicar el coste de esta operación de copia (notación O) para dos posibles implementaciones de la cola (estática y dinámica): Estática Dinámica O (n) O (n) PROGRAMACIÓN - Curso 2011-2012 5 de Junio de 2012 3. Analizar el coste en pasos del siguiente algoritmo: Algoritmo Examen Datos: n: entero Salida: s: entero Método: s = 0 i = 1 mientras i <= n*n hacer para j = 1 hasta 100 hacer s = s + 1 fpara_j i  i + n fmientras_i fExamen Coste 101.n + 3 pasos 4. Escribir un nuevo método Mostrar () para la clase Lista doblemente enlazada circular con nodo cabeza, que muestre el contenido de la lista en orden inverso (desde el final al inicio) usando los atributos privados de la clase. void ListaDCC::Mostrar() { PunteroDCC p; p = this->cabeza->ant; //ir al ultimo while ( p != this->cabeza ) { cout << p->info; p = p->ant; //retroceder } } 5. Suponiendo la existencia de los métodos habituales en la clase Lista, se pide implementar una clase Pila mediante una Lista. Rellena la parte privada del interfaz e implementa los métodos Apilar y Desapilar. class Pila { public: Pila (); bool Apilar (Valor); bool Desapilar (); bool CimaPila (Valor &); bool PilaVacia (); private: //completar }; 100 pasos 1 paso i = 0.n+1, 1.n+1, 2.n+1, … fin del bucle para i = n.n+1 la condición se evalúa n veces como true y una como false. Total de pasos: 101.n + 1 2 pasos PROGRAMACIÓN - Curso 2011-2012 5 de Junio de 2012 PROBLEMAS (50%) 8. Implementa una función que indique si el contenido de una lista es capicúa (la misma secuencia de elementos de izquierda a derecha que de derecha a izquierda). Se supone que lista posee las operaciones típicas más todas las que permiten mover el punto de interés (IrInicio, IrFin, Avanzar, Retroceder, FinalLista). Prototipo: bool Capicua(Lista); Ejemplo1 L=(1, 2, 3, 2, 1) -> Capicua( L ) -> cierto Ejemplo2 L=(1,2,2,1) -> Capicua( L ) -> cierto Ejemplo3 L=(1,2,3) -> Capicua( L ) -> falso bool Capicua(Lista l) { bool ok; Lista::Valor x, y; if ( l.ListaVacia() ) ok = false; else { ok = true; while ( ! l.ListaVacia() && ok ) { l.IrInicio(); l.Consultar(x); l.IrFin(); l.Consultar(y); if ( x != y ) ok = false; else { l.IrInicio(), l.Eliminar(); l.IrFin(); l.Eliminar(); } } } return ok; } PROGRAMACIÓN - Curso 2011-2012 5 de Junio de 2012 9. Un hospital quiere desarrollar una aplicación para la gestión de listas de espera de quirófano. Las listas de espera no son más que colas de enfermos con prioridades, de manera que los enfermos se organizan por orden de ingreso pero teniendo en cuenta que los de mayor prioridad se adelantan a los de menor prioridad. Se pide, implementar el método EncolarConPrioridad en esta cola con prioridades. Para ello, se supone el tipo Valor de la cola definido de la siguiente manera: struct Valor { string nombre; int prioridad; }; El prototipo del método es: void Cola::EncolarConPrioridad (Valor); Se debe considera que la clase Cola está implementada dinámicamente y que NO es posible utilizar métodos públicos de la clase. Explicación: En la cola los enfermos con igual prioridad están agrupados y cuando llega un nuevo enfermo de debe encolar al final del bloque correspondiente a su prioridad. void Cola::EncolarConPrioridad (Valor x) { Puntero p, aux; p = this->inicio; //los datos de la cola están ordenador por prioridad //buscar el primer elemento con prioridad menor que la de x while ( (p != NULL) && (p->info.prioridad >= x.prioridad) ) p = p->sig; aux = new Nodo; //si p==NULL, x es el de menor prioridad: //el nuevo Nodo será el último de la cola if (pto == NULL) { aux->info = x; aux->sig = NULL; if (this->inicio == NULL) //si cola vacia this->inicio = aux; else //ubicar detras del fin this->fin->sig = aux; this->fin = aux; //el nuevo siempre es el fin } //en cualquier otro caso else { *aux = *p; p->info = x; p->sig = aux; if ( p == this->fin ) //caso particular, trasladar fin this->fin = aux; } } PROGRAMACIÓN - Curso 2011-2012 5 de Junio de 2012 10. Escribir un nuevo método de la clase Pila (implementada estáticamente) que permita “montar” una pila encima de otra, es decir, copiar todos los elementos de una pila argumento encima de los elementos de la otra pila. Prototipo: bool Pila::Montar (Pila); Ejemplo: p = ( 5, 4, 3 ) //3 es la cima q = ( 2, 1 ) //1 es la cima p.Montar(q)  p = ( 5, 4, 3, 2, 1 ), q = ( 2, 1 ) bool Pila::Montar (Pila p) { bool ok; int num; num = (this->cima + 1) + (p.cima + 1); if ( num > Pila::MAX ) //demasiados elementos, no es posible "montar" ok = false; else { ok = true; for (int i = 0; i <= p.cima; i++) { this->cima++; this->datos[this->cima] = p.datos[i]; } } return ok; }
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved