M - 324 Versión 1 Primera Integral Lapso 2008/1 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: 29/03/08; CÓDIGO: MOD. I, UND. 1, OBJ.1 324 VERSIÓN:1 CRITERIO DE DOMINIO 1/1 1- Tipo Abstracto de Datos. El siguiente es un modelo del TAD : a) Se propone el uso de una estructura de vector unidimensional de registros (tipo record) y operaciones de: Cálculo de distancia Manhattan entre un par de puntos, distancia Euclídea, entre un par de puntos, Hallar la distancia Manhattan entre un punto y los N -1 restantes, Hallar la distancia Euclídea entre un punto y los N -1 restantes, Ordenar ascendentemente por distancia entre un punto y los N -1 restantes, entre otras, como se muestran a continuación: TAD VECTOR de registros 1- Hallar distancia Manhattan entre un par de puntos 2- Hallar distancia Euclídea entre un par de puntos 6- Hallar la distancia Euclídea mínima entre un punto y los N-1 restantes 3- Hallar la distancia Manhattan entre un punto y los N -1 restantes 4- Hallar la distancia Euclídea entre un punto y los N -1 restantes Figura 1 b) Tipo de Dato (PASCAL): type pares = record x : real; y : real end; {pares} conjunto = array[1..N] of pares; Ingeniería de Sistemas 5- Hallar la distancia Manhattan mínima entre un punto y los N-1 restantes M - 324 Versión 1 Primera Integral Lapso 2008/1 2/5 Gráfico de la estructura : Posición: x1 x2 y1 y2 (1) (2) … xN-1 xN yN-1 yM (N-1) (N) La operación a implementar es CalcularDistanciasPares, la cual calcula la distancia euclídea entre todos los pares de puntos. procedure CalcularDistanciasPares(A: conjunto); var i, j : integer; d1 : real; Calcula la distancia begin Euclídea entre cada for i := 1 to N do par de los N puntos for j := i+1 to N do begin d1 := DistanciaEuclidea(A[i].x,A[i].y); writeln(' par ', A[i].x,A[i].y); writeln('Distancia Euclidea ', d1); end; end; function DistanciaEuclidea (x,y: real): real; begin DistanciaEuclidea:= sqrt (x*x + y*y); end; Calcula la distancia Euclídea entre un par de puntos 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 las operaciones mencionadas en la descripción de la situación. Para cumplir con lo exigido en la sección b), debe implementarse una operación en Pascal. En este modelo se presentó la operación Calcular Distancias entre Pares de puntos. Ingeniería de Sistemas M - 324 Versión 1 Primera Integral Lapso 2008/1 MOD. I, UND. 2, OBJ. 2 2- a- Estructura de datos: 3/5 CRITERIO DE DOMINIO 1/1 tipo lista Algunas operaciones asociadas a este tipo de lista son: ListaVacia ( detecta si la lista está vacía o no), Insertar( agrega nodos a la lista), Eliminar( elimina nodos bajo cierto criterio). Recorrer( avanza el puntero en la lista), Buscar( busca y localiza algún dato en la lista). b) Type tipo_numero_telefono = string[11]; apunt_nodo_lista = ^nodo_lista; nodo_lista = record numero : tipo_numero_telefono; prox_elemento : apunt_nodo_lista; end; tipo_cadena = string[4]; Procedimiento de eliminación de números(nodos) dado un prefijo procedure EliminarNumeros(var L : apunt_nodo_lista; pre : tipo_cadena ); var aux, aux1, ant : apunt_nodo_lista; begin aux := L; ant := L; if ListaVacia(aux) then writeln(' Lista Vacia ') else A partir de la posición 1 while (aux <> nil) do verifica si esta el prefijo: begin pre if pos(pre, aux ^.numero) = 1 then begin ImprimirData(aux); aux1 := aux ^.prox_elemento; ant^.prox_elemento:= aux1; If aux = L then {primer elemento} begin L := aux1; ant := aux1; end; dispose(aux); Ingeniería de Sistemas M - 324 Versión 1 Primera Integral Lapso 2008/1 4/5 aux := aux1 end else begin ant := aux; aux := aux ^.prox_elemento end; end; end; {EliminarNumeros} procedure ImprimirData(A: apunt_nodo_lista); begin write ('ELIMINADO DE LA LISTA '); write (aux ^.numero,' ' ); writeln; end; Criterio de corrección: Se logra el objetivo si se realiza lo solicitado en las dos secciones del planteamiento de la situación. Se debe emplear manejo dinámico de la memoria. Es obligatorio presentar una descripción de la estructura de datos a emplear en PASCAL, similar a la mostrada en este modelo. Se admite que se haga referencia a funciones o procedimientos tales como ListaVacia , ImprimirData u otro auxiliar que requiera la realización particular del estudiante. La función pos es una función estándar del Lenguaje Pascal, en su lugar puede usarse una función propia. MOD. II, UND. 3, OBJ. 3 CRITERIO DE DOMINIO 1/1 3- Procedimiento procedure HallarMenoryMayor(r: apunt_arbol); var aux : apunt_arbol; menor, mayor : integer; begin if ArbolVacio( r) then writeln(' Arbol Vacio ') else begin aux := r; menor := MAX; mayor := MIN; HallarMenor(r,menor); HallarMayor(r,mayor); Ingeniería de Sistemas M - 324 Versión 1 Primera Integral Lapso 2008/1 5/5 writeln(' el menor elemento es ', menor); writeln(' el mayor elemento es ', mayor); end; end; Los procedimientos recursivos HallarMenor y HallarMayor son similares, con la diferencia de que el primero compara contra el menor y el segundo contra el mayor. A continuación se presenta el procedimiento HallarMenor: procedure HallarMenor( var AP: apunt_arbol; var m : integer); var aux : apunt_arbol; begin aux := AP; if aux <> nil then begin if AP ^.elemento <= m then m:= AP ^.elemento; HallarMenor(AP^.izq,m); HallarMenor(AP^.der,m); end; end; Criterio de corrección: Se logra el objetivo si se resuelve el problema planteado empleando una estructura de árbol binario, con un procedimiento recursivo de búsqueda y de determinación del mínimo y del máximo valor. FIN DEL MODELO DE RESPUESTA Ingeniería de Sistemas