Práctica 2 Procedimientos y parámetros

Texto completo

(1)

Pr´

actica 2

Procedimientos y par´

ametros

Introducci´on a la Programaci´on 2do Semestre de 2017

Nota: deben ejecutarse todoslos programas en PyGobstones, utilizando tableros de

dis-tintos tama˜nos. Al realizar una consulta (en forma personal o por e-mail), debe entregar su c´odigo fuente junto con los tableros de prueba, incluso cuando el ejercicio estuviera incom-pleto. Se espera que los tableros de prueba sean significativos para el ejercicio1.

Los ejercicios que corresponden a los contenidos m´ınimos recomendados se encuentran marcados con el simbolo ~.

1.

Procedimientos Simples

Ejercicio 1

~ Corresponder las siguientes oraciones que describen prop´ositos con sus respectivos proce-dimientos.

Pone una linea azul de longitud 3 hacia el este; el cabezal queda a tres celdas hacia el este de la celda actual.

Pone una bolita azul y mueve el cabezal a la celda lindante al este.

Reemplaza dos bolitas rojas por dos bolitas azules, dejando el cabezal en la misma posici´on.

procedure R e e m p l a z a r Roj o Por Azu l () { S a c a r ( Roj o ); P o n e r ( Azu l )

S a c a r ( Roj o ); P o n e r ( Azu l ) }

procedure P o n e r Azu l Y M o v e r Est e () { P o n e r ( Azu l ) M o v e r ( Est e ) } procedure P o n e r L i n e a Azu l 3() { P o n e r Azu l Y M o v e r Est e () P o n e r Azu l Y M o v e r Est e () P o n e r Azu l Y M o v e r Est e () }

procedure R e e m p l a z a r Roj o Por Azu l () { S a c a r ( Roj o ); S a c a r ( Roj o )

P o n e r ( Azu l ); P o n e r ( Azu l ) }

1

(2)

Discutir la importancia de elegir un nombre apropiado para un procedimiento.

Ejercicio 2

~Escriba un procedimiento PonerUnaDeCadaque ponga una bolita de cada color en la celda actual

Ejercicio 3

~T´omese a lo sumo 3 minutos (cronometrados) para entender qu´e hace el siguiente procedi-mientosin ejecutarlo. Cuando se acabe el tiempo, escriba lo que crea que hace el procedi-miento.

procedure E n t e n d e r E n T r e s M i n u t o s () {

P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( O e s t e ); M o v e r ( O e s t e ); M o v e r ( N o r t e );

P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( O e s t e ); M o v e r ( O e s t e );

M o v e r ( N o r t e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( O e s t e ); M o v e r ( O e s t e ); M o v e r ( N o r t e );

M o v e r ( N o r t e );

P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( O e s t e );

M o v e r ( O e s t e ); M o v e r ( N o r t e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( O e s t e ); M o v e r ( O e s t e );

M o v e r ( N o r t e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( O e s t e ); M o v e r ( O e s t e ); M o v e r ( N o r t e ); M o v e r ( N o r t e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( Est e );

P o n e r ( Azu l ); M o v e r ( O e s t e ); M o v e r ( O e s t e ); M o v e r ( N o r t e );

P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( O e s t e ); M o v e r ( O e s t e ); M o v e r ( N o r t e );

P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( O e s t e ); M o v e r ( O e s t e ); M o v e r ( N o r t e );

}

Ejercicio 4

~T´omese a lo sumo 3 minutos (cronometrados) para entender qu´e hace el siguiente procedi-mientosin ejecutarlo. Cuando se acabe el tiempo, escriba lo que crea que hace el procedi-miento. procedure E n t e n d e r E n T r e s M i n u t o s B i s () { P o n e r C u a d r a d o Azu l 3( ) ; M o v e r ( N o r t e ); P o n e r C u a d r a d o Azu l 3( ) ; M o v e r ( N o r t e ); P o n e r C u a d r a d o Azu l 3( ) ; } procedure P o n e r C u a d r a d o Azu l 3() { /* P o n e un c u a d r a d o a z u l de 3 por 3 h a c i a el noreste , d e j a n d o el c a b e z a l en la c o l u m n a a c t u a l y la c e l d a al n o r t e del r e c t ´a n g u l o . */ P o n e r L i n e a Azu l 3 ( ) ; M o v e r ( N o r t e ) P o n e r L i n e a Azu l 3 ( ) ; M o v e r ( N o r t e ) P o n e r L i n e a Azu l 3 ( ) ; M o v e r ( N o r t e ) }

(3)

procedure P o n e r L i n e a Azu l 3() { /* P o n e una l i n e a a z u l de l o n g i t u d 3 h a c i a el este , d e j a n d o el c a b e z a l en la c e l d a a c t u a l */ P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( O e s t e ); M o v e r ( O e s t e ); } Ejercicio 5

Ejecute los procedimientosEntenderEnTresMinutosyEntenderEnTresMinutosBis(el table-ro deber´ıa estar vac´ıo y tener al menos 12 filas y 3 columnas, y el cabezal deber´ıa comenzar en el origen) y compare lo que hacen con lo que respondi´o en los ejercicios anteriores. ¿Cu´al le re-sulta m´as entendible? ¿Qu´e habr´ıa que modificar en ambos programas para que los cuadrados sean rojos? Discuta con un compa˜nero las ventajas de documentar y de dividir en subtareas. Tome como ejes la legibilidad, la abstracci´on, la reutilizaci´on, y el costo de mantenimiento del c´odigo.

Ejercicio 6

~ Escriba un procedimientoMoverOeste3que mueva el cabezal tres celdas hacia el Oeste.

Ejercicio 7

~ Escriba un procedimientoPonerLineaMulticolor4 que ponga una linea de cuatro celdas hacia el este en la que cada celda tenga una bolita de cada color. El cabezal debe quedar en la celda inicial. Para ello, debereutilizar los procedimientosPonerUnaDeCada (Ejercicio 2) y

MoverOeste3(Ejercicio 6).

Ejercicio 8

~ Escriba un procedimiento PonerCuadradoMulticolor4 que ponga un cuadrado de 4×4 celdas en la que cada celda tenga una bolita de cada color. El cabezal debe quedar en la celda inicial. Para ello, debereutilizar el procedimiento PonerLineaMulticolor4(Ejercicio 7).

Ejercicio 9

~ El siguiente procedimiento pone una escalera sin hacer uso de la t´ecnica de divisi´on en subtareas. Identifique partes de c´odigo que se repitan, y extr´aigalas en procedimientos auxi-liares. Cada procedimiento auxiliar debe tener un nombre adecuado, y debe documentarse su prop´osito con un comentario. Compare su soluci´on con la de sus compa˜neros; ¿cu´al versi´on le gusta m´as?

procedure P o n e r E s c a l e r a Azu l 4() {

P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( N o r t e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( N o r t e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l ); M o v e r ( N o r t e ); P o n e r ( Azu l ); M o v e r ( Est e ); P o n e r ( Azu l );

}

Ejercicio 10

Si no lo hizo a´un, escriba los prop´ositos y las precondiciones de todos los procedimientos de esta secci´on. Compare con sus compa˜neros.

(4)

2.

Procedimientos con par´

ametros

Ejercicio 11

~ Corresponder las siguientes oraciones que describen prop´ositos y precondiciones con sus respectivos procedimientos.Nota: puede ser necesario corresponder m´as de una oraci´on con cada procedimiento, en ese caso, ambas oraciones deben ser ciertas.

Hay al menos dos bolitas de color cen la celda al este. Pone dos bolitas de colorcen la celda actual.

Reemplaza dos bolitas de colorrcon dos bolitas de colorcen la celda lindante al este. Saca dos bolitas de color cde la celda actual.

Hay al menos dos bolitas de color ren la celda actual.

Reemplaza dos bolitas de color ccon dos bolitas de colorren la celda actual. El cabezal no se encuentra en el extremo este del tablero.

procedure A ( c ) { S a c a r ( c ) S a c a r ( c ) } procedure B ( c ) { P o n e r ( c ) P o n e r ( c ) } procedure C ( c , r ) { A ( c ) B ( r ) } procedure D ( c , r ) { C ( c , r ) M o v e r ( Est e ) C ( r , c ) }

¿Qu´e relaci´on hay entre los par´ametros de distintos procedimientos que tienen el mismo identificador (nombre)?

Ejercicio 12

~ Corrija el siguiente c´odigo que tiene errores en cuanto al alcance de los par´ametros.

procedure P o n e r C u a d r a d i t o 2 ( c ) { /* P o n e un c u a d r a d o de 2 por 2 de c o l o r c . El c a b e z a l q u e d a en la p o s i c i ´o n a c t u a l */ P o n e r L i n e a 2 () M o v e r ( N o r t e ) P o n e r L i n e a 2 () M o v e r ( Su r ) } procedure P o n e r L i n e a 2 () { /* P o n e r una l i n e a de t a m a ~n o 2 de c o l o r c . El c a b e z a l q u e d a en la p o s i c i ´o n a c t u a l */ P o n e r ( c ) M o v e r ( Est e ) P o n e r ( c ) M o v e r ( O e s t e ) } Ejercicio 13

(5)

(a) (b)

Figura 1: Efectos de ArcoIris(Ejercicio 17): (a) tablero inicial (b) tablero final.

Mover3(d) que, dada una direcci´on d, mueva el cabezal 3 posiciones en direcci´on d. Escriba la precondici´on del procedimiento y disc´utala con compa˜neros.

Ejercicio 14

~ Indique cu´al es el prop´osito y la precondici´on del procedimiento PonerADistancia3(c, dir)que se describe a continuaci´on (recuerde indicar en qu´e posici´on queda el cabezal). ¿Hay alguna relaci´on entre el par´ametro dir de PonerADistancia3 y el par´ametro dde Mover3? Cambiar el nombre del par´ametro dir a d; ¿cambia algo?. Discuta sus conclusiones con sus compa˜neros.

procedure P o n e r A D i s t a n c i a 3 ( c , dir ) { M o v e r 3 ( dir )

P o n e r ( c )

Ejercicio 15

~¿Cu´al es el prop´osito y la precondici´on del procedimientoPonerPuntosAzul3que se describe a continuaci´on? ¿Hay alguna relaci´on entre los par´ametros de PonerADistancia3y Mover3?

procedure P o n e r P u n t o s Azu l 3() { P o n e r ( Azu l ) P o n e r A D i s t a n c i a 3 ( Azu l , Est e ) P o n e r A D i s t a n c i a 3 ( Azu l , Est e ) M o v e r 3 ( O e s t e ); M o v e r 3 ( O e s t e ) } Ejercicio 16

~Modifique el procedimientoPonerPuntosAzul3para que, dado un colorc, dibuje los puntos de color c. El nuevo procedimiento debe llamarse PonerPuntos3.

Ejercicio 17

~ Utilizando el procedimiento PonerPuntos3, realice el procedimientoArcoIris que ponga el dibujo de la Figura 1 (b) cuando el tablero inicial es el dado por la Figura 1 (a). ¿Cu´al es la precondici´on del procedimiento?

3.

Ejercicios adicionales

Ejercicio 18

Escriba un programa que construya una pared de ladrillos de tres ladrillos de alto por cinco ladrillos de ancho. Una pared de ladrillos est´a compuesta por hileras de ladrillos pegadas

(6)

entre s´ı con cemento. Para la realizaci´on de este ejercicio se cuenta con los procedimien-tos PonerLadrillo y PonerCemento, los cuales cuentan con las siguientes precondiciones y prop´ositos: /* P r o p ´o s i t o : P o n e un l a d r i l l o en la h i l e r a de l a d r i l l o s . P r e c o n d i c i ´o n : D e b e h a b e r c e m e n t o en la c e l d a . */ procedure P o n e r L a d r i l l o { . . . } /* P r o p ´o s i t o : P o n e c e m e n t o en una c e l d a . P r e c o n d i c i ´o n : La c e l d a en la que se p o n e c e m e n t o d e b e e s t a r v a c ´ı a . */ procedure P o n e r C e m e n t o { . . . } Ejercicio 19

Escriba un programa para dibujar: a) Una pir´amide

b) Una pir´amide invertida

c) Una pir´amide alta (duplicando cada uno de los segmentos) Para ello, utilice las siguientes primitivas:

/* P r o p ´o s i t o : D i b u j a la b a s e de la p i r ´a m i d e P r e c o n d i c i ´o n : D e b e h a b e r c i n c o c e l d a s v a c i a s al e s t e del c a b e z a l . */ procedure D i b u j a r B a s e { ... } /* P r o p ´o s i t o : D i b u j a el m e d i o de la p i r ´a m i d e P r e c o n d i c i ´o n : D e b e h a b e r c u a t r o c e l d a s v a c i a s al e s t e del c a b e z a l . */ procedure D i b u j a r M e d i o { ... } /* P r o p ´o s i t o : D i b u j a la p u n t a de la p i r ´a m i d e . P r e c o n d i c i ´o n : D e b e h a b e r t r e s c e l d a s v a c i a s al e s t e del c a b e z a l . */ procedure D i b u j a r P u n t a { ... } Ejercicio 20

Escriba un programa que escriba su nombre en el tablero utilizando la primitiva de dibujo

DibujarLineaNHacia. /* P r o p ´o s i t o : D i b u j a una l i n e a de l o n g i t u d " n " en d i r e c c i ´o n " dir " , d e j a n d o el c a b e z a l en la p o s i c i ´o n i n i c i a l . P r e c o n d i c i ´o n : La c e l d a a c t u a l e s t ´a v a c ´ı a y d e b e h a b e r al m e n o s " n " c e l d a s en d i r e c c i ´o n " dir ". */ procedure D i b u j a r L i n e a N H a c i a ( n , dir ) { ... } Ejercicio 21

Un macetero de rosas rojas est´a representado por un cuadrado de 2×2 bolitas rojas. Utilizando el ejercicio 22, escriba un programa que muestre un jard´ın con 4 maceteros de distintos colores. Utilice la vestimentaflores.xml provista con la pr´actica.

Figure

Actualización...

Referencias

Actualización...

Related subjects :