Está en la página 1de 3
Universidad Nacional Mayor de San Marcos Facultad de Ciencias Matem´aticas E.A.P. de Computaci´on Cient´ıfica

Universidad Nacional Mayor de San Marcos Facultad de Ciencias Matem´aticas E.A.P. de Computaci´on Cient´ıfica Pr´actica de Ciencias de la Computaci´on I, Semestre 2015 - II

Funciones y Procedimientos

Pr´actica 10

1. Responder con verdadero o falso

(

) Las variables globales se definen en el procedimiento principal.

(

) Los par´ametros pasados por referencia deben escribirse siempre antes de los par´ametros que se pasan por valor

(

) El trabajo realizado por una funci´on, siempre puede realizarse por un procedimiento

(

) El trabajo realizado por un procedimiento, siempre puede realizarse por una funci´on

(

) Los par´ametros referencia de un procedimiento pueden recibir valores del programa principal y luego ser modificados por dicho procedimiento, re- torn´andolos modificados al programa principal

(

) Los par´ametros por valor de un procedimiento reciben valores del pro- grama principal, pero no pueden ser modificados por el procedimiento

2. Completar:

(a)

Los procedimientos y funciones son una herramienta conceptual para un problema en

(b)

Cuando usamos procedimientos y funciones de esta forma se puede escribir

m´as f´acilmente programas

y

 

(c)

Los procedimientos y las funciones nos permiten evitar la de c´odigo, consiguiendo escribir programas m´as

 

(d)

Las funciones solo pueden retornar un

´unico

y aqu´ı se recomienda

que se utilicen solamente con par´ametros de entrada por

 

(e)

Los procedimientos pueden contener par´ametros de por

 

por valor y

(f)

Los procedimientos pueden contener par´ametros de salida por

(g)

En el uso de los par´ametros por referencia se dice que un procedimiento

puede retornar

de un valor, tantos como par´ametros

se

coloquen.

(h)

Las variables globales son las que se definen al

 

del

programa y

pueden ser usadas por cualquier

o

3. Escriba la funci´on distancia que calcule la distancia entre dos puntos (x 1 , y 1 ) y (x 2 , y 2 ). Todos los valores de los n´umeros y valores de regreso deber´an de ser del tipo real.

Universidad Nacional Mayor de San Marcos Facultad de Ciencias Matem´aticas E.A.P. de Computaci´on Cient´ıfica

Universidad Nacional Mayor de San Marcos Facultad de Ciencias Matem´aticas E.A.P. de Computaci´on Cient´ıfica Pr´actica de Ciencias de la Computaci´on I, Semestre 2015 - II

Funciones y Procedimientos

4. El m´aximo com´un divisor de los enteros x e y es el entero m´as grande que divide en forma completa tanto a x como a y. Escriba una funci´on recursiva gcd que regrese el m´aximo com´un divisor de x y de y. El mcd de x y de y se define en forma recursiva como sigue: Si y es igual a 0, entonces mcd (de x,y) es x; de lo contrario mcd (de x, y) es igual a mcd(y, x%y) donde % es el operador de m´odulo.

5. (Torres de Hanoi) Todos los cient´ıficos de c´omputo incipientes deben de en- frentarse con ciertos problemas cl´asicos, y las Torres de Hanoi es uno de los m´as famosos. Dice la leyenda que en un templo del Lejano Este, los monjes est´an intentando mover una pila de discos de una estaca hacia otra. La pila inicial tema 64 discos ensartados en una estaca y acomodados de la parte infe- rior a la superior en tama˜no decreciente. Los monjes est´an intentando mover la pila de esta estaca a la segunda con las limitaciones que exactamente un disco debe de ser movido a la vez, y en ning´un momento se puede colocar un disco mayor por encima de un disco menor. Existe una tercera estaca disponible para almacenamiento temporal de discos. Se supone que cuando los monjes terminen su tarea llegar´a el fin del mundo, por lo cual para nosotros existe poca motivaci´on en ayudarles en sus esfuerzos. Supongamos que los monjes est´an intentando mover los discos de la estaca 1 a la estaca 3. Deseamos de- sarrollar un algoritmo que imprima la secuencia precisa de las transferencias disco a disco entre estacas.

Si fu´eramos a enfocar este problema con m´etodos convencionales, nos encon- trar´ıamos r´apidamente enmara˜nados y sin esperanza de poder manejar los dis- cos. En vez de ello, si atacamos el problema teniendo en mente la recursi´on, de inmediato se vuelve manejable.

El mover n discos puede ser visualizado en t´erminos de s´olo mover n 1 discos (y de all´ı la recursi´on), como sigue:

1. Mover n 1 discos de la estaca 1 a la estaca 2, utilizando a la estaca 3

como un area´

de almacenamiento temporal.

2. Mover el ultimo´

3. Mover los n 1 discos de la estaca 2 a la estaca 3, utilizando la estaca 1 como ´area de almacenamiento temporal.

disco (el m´as grande) de la estaca 1 a la estaca 3.

tarea consiste en mover el disco n = 1, es

decir, el caso base. Esto se lleva a cabo en forma trivial moviendo el disco, sin necesidad de utilizar el ´area temporal de almacenamiento.

Escriba un programa para resolver el problema de las Torres de Hanoi. Utilice una funci´on recursiva con cuatro par´ametros:

El proceso termina cuando la ultima´

1. El n´umero de discos a moverse

Universidad Nacional Mayor de San Marcos Facultad de Ciencias Matem´aticas E.A.P. de Computaci´on Cient´ıfica

Universidad Nacional Mayor de San Marcos Facultad de Ciencias Matem´aticas E.A.P. de Computaci´on Cient´ıfica Pr´actica de Ciencias de la Computaci´on I, Semestre 2015 - II

Funciones y Procedimientos

2. La estaca en la cual se acumular´an estos discos al inicio

3. La estaca a la cual esta pila de discos se mover´a

4. La estaca a utilizarse como area´

de almacenamiento temporal

Su programa deber´a imprimir las instrucciones precisas que deber´an seguirse para mover los discos de la estaca de arranque a la estaca destino. Por ejemplo, para mover una pila de tres discos de la estaca 1 a la estaca 3, su programa deber´a imprimir la serie siguiente de movimientos:

1

- 3 (Esto significa mover un disco de la estaca 1 a la estaca 3)

1

- 2

3

- 2

1

-3

2

- 1

2

- 3

1

- 3

6. Cualquier programa que puede ser organizado en forma recursiva, puede ser

organizado tambi´en en forma iterativa, aunque algunas veces con mayor difi-

cultad y con menor claridad. Hanoi.

Escribir una versi´on iterativa de las Torres de

7. Elaborar una funci´on que reciba un n´umero entero y retorne 1 si el n´umero

es negativo. Si el n´umero es positivo debe devolver una clave calculada de la siguiente manera: Se suma cada d´ıgito que compone el n´umero y a esa suma se

le calcula el modulo 7. Por ejemplo: para la cifra 513, la clave ser´a 5+1+3=9; 9

mod 7 = 2. Utilice la funci´on para construir un programa que lea una secuencia

de valores y determine si el n´umero le´ıdo fue negativo o si fue positivo que clave

le corresponde.

8. Desarrolle la pregunta anterior pero en lugar de utilizar una funci´on utilice un procedimiento.

9. Elaborar un programa que lea n caracteres y los almacene en un arreglo. Se cumple siempre que el n´umero de caracteres es menor a 15. Cada car´acter debe almacenarse en un elemento del arreglo. El conjunto de caracteres forma una palabra. El programa debe escribir si la palabra es pal´ındromo o no. Utilizar

una funci´on que tome el arreglo y devuelva 0 si la palabra no es un pal´ındromo

o 1 si lo es.

10. Desarrolle la pregunta anterior pero en lugar de utilizar una funci´on utilice un procedimiento.