M - 324 Versión 1 Segunda Integral Lapso 2008/1 1/6 UNIVERSIDAD NACIONAL ABIERTA VICERRECTORADO ACADÉMICO ÁREA INGENIERÍA MODELO DE RESPUESTA CÓDIGO: 324 FECHA DE APLICACIÓN: 10/05/08 ASIGNATURA: Computación II MOMENTO: Segunda Integral MOD. I, UND. 1, OBJ.1 CRITERIO DE DOMINIO 1/1 1- Tipo Abstracto de Datos. El siguiente es un modelo del TAD : a) Se propone el uso de vectores de números enteros y operaciones de: Cardinal del conjunto( número de elementos), Hallar los subconjuntos de n elementos, Unir conjuntos, Intersecar conjuntos, Partir conjuntos, Hallar el complemento con respecto a un universo, entre otras. TAD Conjunto (vector) 7- Hallar el número de subconjuntos 1- Cardinal 2- Unión de dos conjuntos 3- Intersección de dos conjuntos 6-Obtener subconjuntos de n elementos 4- Partir un conjunto en dos 5- Hallar el complemento Figura 1 b) Operación en Pascal: La “operación” a implementar es: Hallar subconjuntos de uno, dos y tres elementos contenidos en un conjunto X. Type conjunto = array [1..M] of integer; Procedure Subconjuntos(X : conjunto; N : integer); Ingeniería de Sistemas M - 324 Versión 1 Segunda Integral Lapso 2008/1 2/6 var i,j, k : integer; vacio: char; begin vacio:= '0'; writeln(vacio,' '); for i := 1 to N do write('{ ',X[i],' } '); writeln; {Subconjuntos de un elemento} for i := 1 to N do {Subconjuntos de dos elementos} for j := i+1 to N do write('{ ',X[i],' , ', X[j],' } '); writeln; for i := 1 to N do {Subconjuntos de tres elementos} for j:= i+1 to N do for k := j + 1 to N do write('{ ',X[i],' , ', X[j],' , ',X[k],' } '); end; {Subconjuntos} Criterio de corrección: Se logra el objetivo si se realiza lo solicitado en las dos secciones. Con respecto a la sección a) deberá describir el TAD apropiado, contemplando al menos 5 operaciones. Para cumplir con lo exigido en la sección b), debe implementarse la operación Hallar Subconjuntos ( de 1, 2 y 3 elementos) en Pascal. No se exige la obtención de todos los subconjuntos. MOD. I, UND. 2, OBJ. 2 CRITERIO DE DOMINIO 1/1 2- a- Estructura de datos: La estructura de datos a emplear es la pila. b- TAD: El tipo abstracto de datos para este caso es una pila, el cual se implementará con variables dinámicas. Entre las operaciones asociadas a este objeto están: Insertar en la pila, Pila Vacía ( determina si la pila esta vacía o no), Cima ( dispone del elemento que esta en el nodo de la cima), Eliminar un nodo( elimina el nodo que está en la cima de la pila), vaciar una pila en otra (vierte una pila en otra, extrayendo el elemento de la cima a la otra pila, en un proceso continua), Imprimir los contenidos de todos los nodos que están en la pila. Ingeniería de Sistemas M - 324 Versión 1 Segunda Integral Lapso 2008/1 3/6 type apunt_nodopila = ^nodo_pila; nodo_pila = record elemento : integer; prox : apunt_nodopila end; {nodo de la pila} Procedimiento de eliminación de la pila: En este procedimiento se verifica iterativamente si el elemento a buscar está en la cima de la pila P. Si está, se elimina de la pila y si no está se pasa a una pila temporal Q. Al final se vacía la pila Q sobre la pila P. procedure Eliminar(var P: apunt_nodopila; var e: integer); begin if Pilavacia(P) then writeln('PILA VACIA, NO SE PUEDE ELIMINAR ') else begin encontrado := false; Iniciar(Q); repeat if esta_en_la_cima(P,e) then begin Eliminar_De_La_Pila(P); Elimina elemento en la writeln('Eliminado el elemento ',e); cima de la pila P encontrado := true; end else begin Insertar_En_Pila(Q,cima(P)); Eliminar_De_La_Pila(P) Inserta elemento de la pila end; P en la pila Q until (encontrado) or (PilaVacia(P) ); if not encontrado then writeln('El elemento ',e,' no se encuentra en la pila'); VaciarPila(Q,P); end Vacía la Pila Q en la pila P end; Ingeniería de Sistemas M - 324 Versión 1 Segunda Integral Lapso 2008/1 4/6 La función PilaVacía, determina si la pila está vacía function PilaVacia (P: apunt_nodopila) : boolean; begin If P = nil then PilaVacia := true else PilaVacia := false end; { Pila Vacia } El siguiente procedimiento elimina el elemento de la cima de la pila: procedure Eliminar_De_La_Pila(var P: apunt_nodopila); var AUX : apunt_nodopila; begin AUX := P^.prox; dispose(P); P := AUX; end; Inserción en una pila: procedure Insertar_En_Pila(var P: apunt_nodopila; e: integer); var nuevo : apunt_nodopila; begin new(nuevo); with nuevo^ do begin elemento := e; prox := P end; P := nuevo; end; { Insertar_En_Pila } Criterio de corrección: Se logra el objetivo si se realiza correctamente lo solicitado en todas las secciones de la pregunta. En este caso se debe emplear el TAD pila con variables dinámicas. Es posible que se usen funciones como pila vacía o cima, en este caso no se requiere que se desarrollen Ingeniería de Sistemas M - 324 Versión 1 Segunda Integral Lapso 2008/1 MOD. II, UND. 3, OBJ. 3 5/6 CRITERIO DE DOMINIO 1/1 3- Procedimiento Recorrer y Actualizar el vector de direcciones procedure Recorrer_Actualizar( AP : apunt_arbol; var dir: vector; var ind: integer); begin if AP <> nil then begin ActualizarVector(AP, dir, ind); Recorrer_Actualizar(AP^.izq, dir, ind); Recorrer_actualizar(AP^.der, dir, ind); end; end; El vector dir almacena las direcciones de los nodos y al igual que el índice ind, se pasa al procedimiento como parámetro variable. El procedimiento ActualizarVector inserta las direcciones de los nodos visitados en el vector. La variable ind, es el índice que señala la ubicación de la dirección a almacenar procedure ActualizarVector(AP : apunt_arbol; var d: vector; var ind : integer); begin d[ind] := AP; d[ind+1] := AP^.izq; d[ind+2] := AP^.der; ind := ind + 3; end; Ingeniería de Sistemas M - 324 Versión 1 Segunda Integral Lapso 2008/1 6/6 Estructura de datos: Type apunt_arbol = ^nodo_arbol; nodo_arbol = record elemento: integer; izq,der: apunt_arbol end; vector = array[1..N] of apunt_arbol; Criterio de corrección: Se logra el objetivo si se resuelve el problema planteado empleando una estructura de árbol binario, con un procedimiento recursivo que recorra el árbol binario bien sea en preorden, enorden o postorden. En dicho procedimiento debe incluirse un proceso de actualización del vector, el cual se llena inicialmente con direcciones nulas. FIN DEL MODELO DE RESPUESTA Ingeniería de Sistemas