324 MR Versión 1 Semana 5 2da. Prueba Parcial Lapso 2015-2 1/3 UNIVERSIDAD NACIONAL ABIERTA VICERRECTORADO ACADÉMICO ÁREA INGENIERÍA MODELO DE RESPUESTA ASIGNATURA: Computación II MOMENTO: Segunda Prueba Parcial FECHA DE APLICACIÓN: 30 /01 /2016 MOD. I, UND. 3, OBJ. 3 CÓDIGO: VERSIÓN 324 1 CRITERIO DE DOMINIO 1/1 1- Problema de pilas a- La estructura de datos más apropiada es la pila. Esto se justifica por la naturaleza del problema en donde se almacenan lotes de discos de acuerdo a la disciplina LIFO. b- Estructura de datos en C++: typedef struct nodopila { string ci; char seccion ; struct nodopila* prox; } nodopila; //tipo Nodo // apuntador al nodo siguiente typedef nodopila *apunt; //tipo apuntador c- Función para la distribuir los discos en dos pilas void DistribuirEnDosPilas(apunt &tope, apunt &topea, apunt &topeb) { apunt pt; string c; char d; while (!PilaVacia(tope)) { SacarDeLaPila(tope, c, d); if (d == 'A') MeterEnLaPila(topea,c,d); else MeterEnLaPila( topeb,c,d); } } Especialista: María E. Mazzei Ingeniería de Sistemas Evaluador: Sandra Sánchez 324 MR Versión 1 Semana 5 2da. Prueba Parcial Lapso 2015-2 2/3 Al distribuir las dos pilas en las pilas A y B hay que invertir cada una de ellas a efecto de dejar los discos en el orden original. Las funciones SacarDeLaPila y MeterEnLaPila son las normales del TAD Pila que se emplearán para invertir las pilas dentro de una función que invoque a ambas y restaure el orden original. A continuación se presentan ambas funciones: void MeterEnLaPila( apunt &tope, string ced, char secc ) { apunt pt; pt = new nodopila; pt->ci = ced; pt-> seccion = secc; pt->prox = tope; tope = pt; } void SacarDeLaPila(apunt &tope, string &a, char &b ) { apunt pt; if (PilaVacia(tope)) cout << " Pila vacia "; else { a = tope->ci; b = tope-> seccion; pt = tope->prox; delete tope; tope = pt; } } La función PilaVacia es booleana y verifica si la Pila está o no vacía: bool PilaVacia(apunt tope) { if ( tope == NULL) return true; else return false; } Especialista: María E. Mazzei Ingeniería de Sistemas Evaluador: Sandra Sánchez 324 MR Versión 1 Semana 5 2da. Prueba Parcial Lapso 2015-2 3/3 Nota: El programa fue realizado en DevC++. Se trata de un ambiente libre integrado de desarrollo para operar con C y con C++, que funciona con el compilador Mingw Criterio de corrección: Se logra el objetivo si se elabora correctamente la estructura de datos tipo pila con manejo dinámico de memoria y se elabora correctamente una función en C++ que distribuya los discos en dos pilas: A y B. MOD. II, UND. 4, OBJ. 4 CRITERIO DE DOMINIO 1/1 2- Problema de árboles binarios Estructura de datos: typedef struct nodoarbol { //tipo Nodo int num ; struct nodoarbol* izq; // apuntador al nodo izquierdo struct nodoarbol* der; }nodoarbol; typedef nodoarbol *apunt; //tipo apuntador Función recursiva void HalleElemento(apunt apt, int numero, bool &ind) { if (apt != NULL) { if (numero == apt-> num) { ind = true; apt = NULL; } else { HalleElemento(apt-> izq,numero,ind); HalleElemento(apt-> der,numero,ind); } } } Especialista: María E. Mazzei Ingeniería de Sistemas Evaluador: Sandra Sánchez 324 MR Versión 1 Semana 5 2da. Prueba Parcial Lapso 2015-2 4/3 La variable ind se emplea para detectar si el número está en un árbol. Es posible transformar esta función de búsqueda en una de tipo booleano que devuelva el valor verdadero o falso según el caso y sin necesidad de emplear la variable ind. Esta función sería más eficiente. Esta función se invocará desde la función principal. La sección de la función main que lee el número a buscar e invoca la función HalleElemento se presenta a continuación: cout << "Introduzca numero a buscar en ambos arboles "; cin >> numero; EstaEnA = false; Busca el número dado en EstaEnB = false; árbol A HalleElemento(apa,numero,EstaEnA); HalleElemento(apb,numero,EstaEnB); Busca el número dado en if (EstaEnA && EstaEnB) árbol B cout << " Esta en A y en B" ; else if(EstaEnA) cout << " Esta en A " ; else if (EstaEnB) cout << " Esta en B " ; else cout << "No esta en ninguno de los dos"; Criterio de corrección: Se logra el objetivo si se elabora correctamente la estructura de datos tipo árbil con manejo dinámico de memoria y se elabora correctamente una función en C++ que halle un elemento dado en un árbol de búsqueda. FIN DEL MODELO DE RESPUESTA Especialista: María E. Mazzei Ingeniería de Sistemas Evaluador: Sandra Sánchez