

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Metodología de Programación, Profesor: , Carrera: I.T.I. Sistemas, Universidad: UMA
Tipo: Apuntes
1 / 3
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!


Metodología de la Programación.
Segunda Relación de Problemas
1
UNIVERSIDAD DE MALAGA DPTO. DE LENGUAJES Y C. DE LA COMPUTACION
E.T.S. DE INGENIERIA INFORMATICA
INGENIERIA INFORMATICA
(CURSO 2004-2005)
SEGUNDA RELACIÓN DE PROBLEMAS
(31-3-2005)
Determina qué calcula la siguiente función recursiva. Escribe una función iterativa que realice lamisma tarea.
Func
↓n:
Inicio
n = 0
n
F(n-1)
Fin
2.^
Diseña la versión iterativa del siguiente algoritmo recursivo:
Proc
Rec(
↓n:
Inicio
f(n)
{cualquier
grupo
de sentencias que
no modifiquen el
valor
de n}
Rec(g(n)) FINSI Fin donde las cabeceras de f y g se definen como
:^
Func
f(
↓n:
Func
g(
↓n:
Considera la siguiente función recursiva:
Func
p(
↓x:
Inicio
x < 3
x
p(x-1)
p(x-3)
Fin Sea A(n) el número de productos realizados al ejecutar la función p cuando se llama con elargumento n. Diseña la función recursiva de A(n).
4.^
Implementa el algoritmo de búsqueda secuencial en un array de forma recursiva.
5.^
Implementa el algoritmo de búsqueda binaria en un array de forma recursiva.
Metodología de la Programación.
Segunda Relación de Problemas
2
Los siguientes algoritmos
recursivos
pretenden calcular el índice del mayor elemento del array
TipoArray
). Determine si son correctos o no. Si alguno
es incorrecto, diga por qué y modifíquelo adecuadamente. Finalmente, indique cómo deberíanefectuarse las llamadas iniciales en cada uno de ellos.
Proc
Max1(
↓A: TipoArray; ↓i: N;
↨j: N)
Inicio
i
SI A[i] > A[j] ENTONCE
j^
i Max1(A,i+1,j) FINSI FINSI Fin
Algoritmo
Max2(
↓A: TipoArray; ↓i: N;
j: N)
Inicio
SI i < MAX ENTONCES
Max2(A,i+1,j)SI A[i] > A[j] ENTONCES
j^
i
j^
Fin
El máximo común divisor de dos números p y q es el mayor entero d que divide a ambos. Unalgoritmo muy conocido para calcularlo es el de Euclides. Éste utiliza dos variables, quecontienen inicialmente a cada uno de los números, y trata de hacer que su contenido sea elmismo. Para ello, irá restando la menor a la mayor hasta que ambas contengan el mismo valor.En dicho momento, el valor obtenido en cualquiera de ellas es el máximo común divisor de losdos números iniciales. Por ejemplo, si P =
18 y Q = 12, el algoritmo hará que P y Q vayan
tomando los siguientes valores:
Inicialmente
P = 18 y
Después
y
Después
y
(P = Q => El mcd es 6)
Diseña el algoritmo anterior siguiendo un enfoque recursivo:
Func
Mcd (
Escribe un algoritmo recursivo que ordene un array de la siguiente forma:a) Sea k el índice del elemento mitad del array.b) Ordena los elementos hasta a[k], incluyéndolo.c) Ordena los elementos siguientes.d) Mezcla los dos subarrays en un único array ordenado.Este método de clasificación interna se denomina "Mergesort".
9.^
Diseña un algoritmo recursivo que lea una secuencia de caracteres de longitud arbitrariaterminada en un punto, y la imprima en orden inverso.
Diseña tres algoritmos recursivos para determinar si una cadena de caracteres (que se les pasacomo parámetro) es:
a) un identificador válido.b) un palíndromo.c) una palabra perteneciente al lenguaje L= {w / w = a
n b
n, n >= 0}
Metodología de la Programación.
Segunda Relación de Problemas
3
Diseñe algoritmos recursivos para la resolución de los siguientes problemas de la primerarelación: 1a, 1b, 1g, 2.
Diseñe un algoritmo recursivo para realizar el producto escalar de dos vectores implementadosen la forma vista en el ejercicio 4 de la primera relación de problemas.
Diseñe los siguientes algoritmos sin utilizar estructuras iterativas.
a)^
Func
SumaResta(
↓A:Lista1):
Z
Donde el tipo Lista1 se define como:
Lista
=
ARRAY
[1..50]
DE
Z
SumaResta devuelve la suma de los contenidos de las posiciones pares de A
menos
la
suma de los contenidos de las posiciones impares de A.b)^
Proc
Invertir(
↨L:Lista2)
Donde el tipo Lista2 se define como:
Nodo
=
REGISTRO
Dato
:^
C
Sig
: Lista
FINREGISTRO
Lista
=
PUNTERO
A
Nodo
Invertir invierte la lista enlazada L sin cambiar de lugar los datos (es decir, cambiandoúnicamente los enlaces)
Obtenga un algoritmo sin utilizar estructuras itertivas para insertar un elemento en un arrayordenado.
Proc
Insertar(
↓elemento:
Z ;
arrary:Vector)
donde:
Elementos
=
ARRAY
[1..20]
DE
Z
Vector =
REGISTRO
n_elem:Nelem:Elementos FINREGISTRO
n_elem
es el número de elementos válidos del array.
Si inicialmente
n_elem
es 20, al insertar se perderá un elemento (el mayor).
Diseñe un algoritmo recursivo para construir un palíndromo a partir de una lista enlazada decaracteres. El algoritmo tomará como parámetro una lista de caracteres y la usará para generarotra diferente que sea palíndromo.Por ejemplo, dada la lista:Debe generar
El algoritmo tendrá la siguiente cabecera
Func
Palindromo
TipoLista):
TipoLista
Donde TipoLista se define como de igual forma que Lista2 en el ejercicio 13b.
A^
B B^
A
A^
B
Metodología de la Programación.
Segunda Relación de Problemas
4
Diseñe un algoritmo recursivo para resolver cada uno de los siguientes apartados
a) Función booleana que realiza una búsqueda binaria de un elemento en una lista
enlazada con punteros. Devuelve TRUE si el elemento está y FALSE en otro caso. Lacabecera de la función es:
Func
BBinariaRec(
↓lista:Lista;
x:
n:
donde x es el elemento a buscar y n es el número de elementos de listaNota: se recomienda usar dicha cabecera, aunque el alumno puede usar otra si lodesea. En este último caso, lo que se debe mantener es que la función sea booleana yreciba al menos la lista y el elemento a buscar. b)
Procedimiento
que
realiza
la
ordenación
por
el
“método
de
selección”
de
los
elementos almacenados entre las casillas datos[i] y datos[f] del array datos que recibecomo primer parámetro. Los valores i y f son el segundo y tercer parámetros. Lacabecera del procedimiento es:
Func
SeleccionRec(
↨datos:Array;
i,f:
El método de ordenación por selección consiste en seleccionar el elemento máspequeño de la colección e intercambiarlo por el que ocupa la primera posición de lamisma, después se busca el más pequeño de los elementos que quedan por ordenar dela^
colección
y
se
intercambia
por
el
que
ocupa
la
posición
segunda,
y
así
sucesivamente con todas las posiciones de la colección.
Diseñe un algoritmo recursivo para ordenar una lista de números enteros (enlazada conpunteros) por el método "mergesort". Para resolver el problema no se podrá solicitar memoriadinámica.
Proc
mergesort(
↨l: Lista);
El algoritmo "mergesort" actúa de la siguiente forma:Divide la lista recibida por la mitad, produciendo dos listas. A continuación ordena ambaslistas siguiendo el mismo método, y posteriormente mezcla ambas listas (ya ordenadas) en unanueva lista de tal forma que también esté ordenada, siendo esta nueva lista el resultado de laordenación.
Diseñe un algoritmo recursivo para ordenar una lista de números enteros (enlazada conpunteros) por el método "quicksort". Para resolver el problema no se podrá solicitar memoriadinámica.
Proc
quicksort(
↨l: Lista)
El algoritmo "quicksort" actúa de la siguiente forma:Particiona la lista recibida en dos listas, una con los elementos menores o iguales a unelemento cualquiera seleccionado, y otra con los elementos mayores a dicho elemento. Acontinuación ordena ambas listas siguiendo el mismo método y concatena el resultado de dichaordenación, siendo esta nueva lista el resultado de la ordenación.
Diseñe un algoritmo ``laberinto'' que reciba un laberinto con una única entrada y una únicasalida, y a partir de la entrada, y siguiendo los caminos del laberinto, encuentre la salida yescriba las coordenadas donde se encuentran ambas. El laberinto se encuentra representadocomo un array de 20x20 caracteres, donde el carácter '#' representa una pared, y el carácter ' '(espacio) representa un camino. Sólo se permiten movimientos horizontales y verticales.