324 MR Versión 1 Primera Integral Lapso 2009/2 1/5 UNIVERSIDAD NACIONAL ABIERTA VICERRECTORADO ACADÉMICO ÁREA INGENIERÍA MODELO DE RESPUESTA ASIGNATURA: Computación II MOMENTO: Primera Integral FECHA DE APLICACIÓN: 24/10/09; CÓDIGO: MOD. I, UND. 1, OBJ.1 324 CRITERIO DE DOMINIO 1/1 1- Tipo Abstracto de Datos. El siguiente es un modelo del TAD : a) Se propone el uso de cadenas de caracteres(Strings ) y las operaciones que se muestran en la Figura 1 TAD Cadena: (Binaria) 1- Código Gray 8- Longitud de la cadena 7- Conversión de cadenas a otro tipo 2- Negación 3- Suma binaria 4Concatenación de cadenas 5- Inspeccionar bit 6-Partición de cadenas Figura 1 b) Tipo de Dato (PASCAL): type cadena = string[255]; La operación a implementar es hallar la cadena en código Gray equivalente Ingeniería de Sistemas 324 MR Versión 1 Primera Integral Lapso 2009/2 2/5 function Gray( S : cadena ): cadena; var i,L : integer; b1,b2,b3 : char; T, AUX : cadena; begin T := S[1]; L := length(S); AUX := ''; for i := 2 to L do begin b1 := S[i-1] ; b2 := S[i] ; b3 := OpXOR(b1,b2); AUX := b3; T := Concat(T, AUX); end; Gray := T; end; Extrae el par de caracteres Llama a la función XOR Concatena con la cadena resultante La siguiente función simula la operación ó exclusivo ya que se está operando con caracteres. function OpXOR( b1,b2: char) : char; { Operacion XOR} begin if b1 ='1' then if b2 = '0' then OpXOR := '1' else OpXOR := '0' else if b1 = '0' then if b2 = '1' then OpXOR := '1' else OpXOR := '0' else writeln( ' Error en caracter'); end; Ingeniería de Sistemas 324 MR Versión 1 Primera Integral Lapso 2009/2 3/5 Es posible utilizar variables booleanas, existe la operación en Pascal XOR ( o exclusivo) para este tipo de variables. En cuyo caso hay que contemplar la conversión a cadenas de caracteres, una vez realizada las operaciones XOR. Es importante destacar que el tipo de dato string (cadena) tiene una longitud máxima de 255 caracteres. Si se quiere obtener cadenas más largas, debe analizarse el uso de una estructura de datos que permita almacenarlas. 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 3 operaciones mencionadas en la descripción de la situación. Para cumplir con lo exigido en la sección b), debe implementarse la operación Gray en Pascal. Se acepta que al menos se deje indicada la operación XOR, pero debe estructurarse correctamente la operación Gray, cualquiera sea el tipo de dato empleado. MOD. I, UND. 2, OBJ. 2 CRITERIO DE DOMINIO 1/1 2- Lista circular enlazada a) Estructura de datos: La estructura de datos enlazada, con manejo dinámico de memoria. a emplear es la lista circular Type tipo_zona = integer; tipo_cod = string[3]; apunt_nodo = ^nodo_lista; nodo_lista = record zona : tipo_zona; codigo : tipo_cod; ant : apunt_nodo; prox_nodo: apunt_nodo end; b) Procedimiento procedure Imprimir(AP: apunt_nodo); var AUX : apunt_nodo; begin Ingeniería de Sistemas 324 MR Versión 1 Primera Integral Lapso 2009/2 4/5 if not Esvacia(AP) then begin AUX := AP; repeat AUX := AUX^.prox_nodo; writeln( ' zona: = ', AUX^.zona,' codigo = ', AUX^.codigo); writeln; until AUX = AP; end end; {imprimir} function Esvacia( A: apunt_nodo): boolean; begin if A = nil then Esvacia := true else Esvacia := false; end; Criterio de corrección: Se logra el objetivo si se realiza lo solicitado en las dos secciones de la pregunta. En esta situación se emplea el TAD lista circular enlazada, con manejo dinámico de la memoria. Es obligatorio presentar una descripción de la estructura de datos a emplear en PASCAL, equivalente a la mostrada en este modelo, así como las funciones que se requieran utilizar. MOD. II, UND. 3, OBJ. 3 CRITERIO DE DOMINIO 1/1 3- Arbol binario asociado a cadenas de unos y ceros. Especificación del nodo en PASCAL: Type tipo_cadena = string[255]; tipo_elem = integer; apunt_arbol = ^nodo_arbol; nodo_arbol = record elemento: tipo_elem; Ingeniería de Sistemas 324 MR Versión 1 Primera Integral Lapso 2009/2 5/5 izq,der: apunt_arbol end; Procedimiento: Crear Arbol procedure Crear_Arbol( var r :apunt_arbol; x: tipo_cadena); var aux, nuevo : apunt_arbol; n, l, i : integer; begin aux := r; n := 2; l := length(x); for i:= 1 to l do begin if x[i] = '0' then { hijo izquierdo} begin nuevo := CrearNodo(n); Incrementa el n := n + 1; número que pondrá aux^.izq:= nuevo; en el próximo nodo aux := nuevo; end else begin { hijo derecho} nuevo := CrearNodo(n); n := n + 1; aux^.der:= nuevo; aux := nuevo; end end; end; {Crear_Arbol} Criterio de corrección: Se logra el objetivo si se resuelve el problema planteado, al elaborar un procedimiento, que permita crear el árbol binario a partir de una cadena de ceros y unos. En este caso hemos presentado un procedimiento iterativo. FIN DEL MODELO DE RESPUESTA Ingeniería de Sistemas