Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Relación 2, Apuntes de Informática

Asignatura: Metodología de Programación, Profesor: , Carrera: I.T.I. Sistemas, Universidad: UMA

Tipo: Apuntes

Antes del 2010

Subido el 25/10/2007

josemanuelk6
josemanuelk6 🇪🇸

4.2

(56)

58 documentos

1 / 3

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Metodología de la Programación. Segunda Relación de Problemas 1
UNIVERSIDAD DE MALAGA
DPTO. DE LENGUAJES Y C. DE LA COMPUT ACION
E.T.S. DE INGENIERIA INFORMAT ICA
INGENIERIA INFORMATICA
METODOLOGÍA DE LA PROGRAMACIÓN
(CURSO 2004-2005)
SEGUNDA RELACIÓN DE PROBLEMAS
(31-3-2005)
1. Determina qué calcula la siguiente función recursiva. Escribe una función iterativa que realice la
misma tarea.
Func F(n:N):N
Inicio
SI n = 0 ENTONCES
RES 0
SINO
RES n + F(n-1)
FINSI
Fin
2. Diseña la versión iterativa del siguiente algoritmo recursivo:
Proc Rec(n:N)
Inicio
SI ¬f(n) ENTONCES
{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:N):B
Func g(n:N):N
3. Considera la siguiente función recursiva:
Func p(x:Z):Z
Inicio
SI x < 3 ENTONCES
RES x
SINO
RES p(x-1) * p(x-3)
FINSI
Fin
Sea A(n) el número de productos realizados al ejecutar la función p cuando se llama con el
argumento 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
6. Los siguientes algoritmos recursivos pretenden calcular el índice del mayor elemento del array
A (TipoArray = ARRAY [1..MAX] DE N). Determine si son correctos o no. Si alguno
es incorrecto, diga por qué y modifíquelo adecuadamente. Finalmente, indique cómo deberían
efectuarse las llamadas iniciales en cada uno de ellos.
Proc Max1(A: TipoArray;
i: N; j: N)
Inicio
SI i MAX ENTONCES
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
FINSI
SINO
j MAX
FINSI
Fin
7. El máximo común divisor de dos números p y q es el mayor entero d que divide a ambos. Un
algoritmo muy conocido para calcularlo es el de Euclides. Éste utiliza dos variables, que
contienen inicialmente a cada uno de los números, y trata de hacer que su contenido sea el
mismo. 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 los
dos 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 Q = 12 (P > Q => P := P - Q)
Después P = 6 y Q = 12 (Q > P => Q := Q -P)
Después P = 6 y Q = 6 (P = Q => El mcd es 6)
Diseña el algoritmo anterior siguiendo un enfoque recursivo:
Func Mcd (P,Q : N): N
8. 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 arbitraria
terminada en un punto, y la imprima en orden inverso.
10. Diseña tres algoritmos recursivos para determinar si una cadena de caracteres (que se les pasa
como parámetro) es:
a) un identificador válido.
b) un palíndromo.
c) una palabra perteneciente al lenguaje L= {w / w = an bn, n >= 0}
pf3

Vista previa parcial del texto

¡Descarga Relación 2 y más Apuntes en PDF de Informática solo en Docsity!

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

METODOLOGÍA DE LA PROGRAMACIÓN

(CURSO 2004-2005)

SEGUNDA RELACIÓN DE PROBLEMAS

(31-3-2005)

1.^

Determina qué calcula la siguiente función recursiva. Escribe una función iterativa que realice lamisma tarea.

Func

F(

↓n:

N ):

N

Inicio

SI

n = 0

ENTONCES

RES

SINO

RES

n

F(n-1)

FINSI

Fin

2.^

Diseña la versión iterativa del siguiente algoritmo recursivo:

Proc

Rec(

↓n:

N )

Inicio

SI

f(n)

ENTONCES

{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:

N ):

B

Func

g(

↓n:

N ):

N

3.^

Considera la siguiente función recursiva:

Func

p(

↓x:

Z ):

Z

Inicio

SI

x < 3

ENTONCES

RES

x

SINO

RES

p(x-1)

p(x-3)

FINSI

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

6.^

Los siguientes algoritmos

recursivos

pretenden calcular el índice del mayor elemento del array

A (

TipoArray

ARRAY

[1..MAX]

DE

N

). 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

SI

i

MAX ENTONCES

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

FINSI

SINO

j^

MAX

FINSI

Fin

7.^

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

Q = 12

(P > Q => P := P - Q)

Después

P = 6

y

Q = 12

(Q > P => Q := Q -P)

Después

P = 6

y

Q = 6

(P = Q => El mcd es 6)

Diseña el algoritmo anterior siguiendo un enfoque recursivo:

Func

Mcd (

↓P,Q :

N

N

8.^

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

↓L

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:

Z ;

n:

N ):

B

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:

N )

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.