Cátedra de

Programación (0790).
Secciones 2, 3, 4 y 5

Taller de Laboratorio
6
Objetivos de este taller:
 Utilizar la metodología de programación modular para construir aplicaciones de mayor complejidad.
 Conocer otras bondades ofrecidas por la unidad CRT.
Preparando el Terreno.
En líneas generales, va usted a escribir en este taller una aplicación que muestra un menú en el que
posteriormente se insertarán dos simulaciones del movimiento de un cuerpo, ambas en la pantalla de texto,
utilizando una metodología de programación modular –mediante procedimientos y funciones – y las
ventajas de la unidad CRT. Para comenzar, debe usted ajustar algunas características de la pantalla de
texto ofrecida por Windows: la llamada Pantalla de DOS:
1) Abra la Pantalla de DOS. Si no hay en el escritorio un icono para ello, busque el comando en el Menú
Inicio  Todos los programas  Accesorios  Símbolo del sistema.
Al realizar esta acción, puede ocurrir que la ventana se abra como ventana propiamente dicha o en
pantalla completa. En ambos casos, debe abrir el menú de propiedades de la ventana; para ello, prosiga
como se indica:
 Si se abre una ventana, simplemente haga un clic del Mouse sobre el símbolo ubicado a la
izquierda de la Barra de Título; ello provocará la aparición del Menú.
 Si se abre como pantalla completa, presione Alt-ENTER o Ctrl-Esc para regresar a la interfaz
gráfica de Windows. El Menú lo hallará haciendo clic-derecho sobre el botón de la aplicación
ubicado en la Barra de Aplicaciones.
2) Una vez mostrado el Menú, seleccione la opción Predeterminados. Ello provocará la aparición de un
formulario de 4 fichas: Opciones, Fuente, Diseño y Colores. Ajuste los valores que se indican a
continuación en cada ficha:
 En la ficha Opciones, en Opciones de Pantalla, seleccione Ventana.
 En la ficha Fuente, en Fuente, seleccione Fuente de mapa de bits y en Tamaño seleccione 10×18.
 En la ficha Diseño, tanto en Tamaño del buffer de pantalla como en Tamaño de la ventana,
seleccione 80 de Ancho y 25 de Alto.
 En la ficha Colores, asegúrese que el fondo de la ventana sea negro y que el color de texto sea gris
claro. Estos colores son por lo general los colores por defecto.
3) Por último, seleccione el botón de Aceptar y cierre luego la ventana. Se supone que a partir de este
momento, cada vez que se abra una ventana de DOS, lo hará con las características seleccionadas por
usted en los pasos anteriores. Pruebe abriendo y cerrando de nuevo la ventana.
Semestre 3-2013. Programación: Taller nº 6 Pag. 2 de 6

Prof. José Ricardo Vargas Marzo 2014

4) Habiendo cumplido este requisito, ejecute Delphi y prepárelo para construir una aplicación tipo
cónsola. Recuerde: una vez que aparezca el editor de código, maximícelo, cierre el panel
izquierdo y verifique que el tamaño de letra es cómodo (14 o más).
Subprogramas de impresión.
Comience escribiendo el siguiente subprograma; este sirve para escribir un texto en una posición
determinada de la pantalla y con un color de texto determinado:

Procedure Pr i nt ( Col umna, Li nea, Col or : I nt eger ; S: String) ;
Begin
Text Col or ( Col or ) ;
Got oXy( Col umna, Li nea) ;
Wr i t e( S) ;
End;
Pruebe el subprograma escribiendo unas instrucciones en el programa principal que impriman en pantalla
algún mensaje que usted desee. Recuerde que el número máximo de columna es 80 y de línea es 25. Una
instrucción podría ser algo así:
Pr i nt ( 20, 10, 5, ’ Hol a, que t al ’ ) ;
O también:
Pr i nt ( 1, 5, Li ght Red, I nt oToSt r ( 123456) ) ;
Escriba ahora el siguiente subprograma. Este muestra en pantalla un marco alrededor de la misma. Escriba
también la declaración de las constantes globales que se indican en las primeras líneas:

Const MaxCol =79;
MaxLi n=24;

Procedure Mar co( Col or : I nt eger ) ;
Var i : I nt eger ;
S, S1: String;
Begin
S: =' ' ; / / Sin espacio entre las comillas
For i : =1 to MaxCol - 2 do S: =S+' ' ; / / Un espacio entre las comillas
S1: = ' | ' +S+' | ' ;
For i : =2 to MaxLi n- 1 do
Pr i nt ( 1, i , Col or , S1) ; / / Líneas laterales del marco

S: =' ' ;
For i : =1 to MaxCol - 2 do S: =S+' =' ;

S1: = ' | ' +S+' | ' ;
Pr i nt ( 1, 1, Col or , S1) ; / / Línea superior del marco
Pr i nt ( 1, MaxLi n, Col or , S1) ; / / Línea inferior del marco
Got oxy( 1, 1) ;
End;

Observe que el subprograma Mar co hace uso del subprograma Pr i nt , por lo que debe usted colocarlos
adecuadamente, es decir, siguiendo el orden debido. Si no lo sabe, pregunte. Luego, pruebe el
subprograma de la misma forma que hizo con el primer procedimiento.
Semestre 3-2013. Programación: Taller nº 6 Pag. 3 de 6

Prof. José Ricardo Vargas Marzo 2014

El siguiente es un subprograma similar al subprograma Pr i nt , imprime un mensaje en pantalla pero lo
hace en el centro de la línea. Fíjese que no tiene como parámetro de entrada la columna. Observe
cuidadosamente la quinta línea –la que comienza con Col : =–, en ella se calcula primero la columna
donde debe comenzar a escribirse el texto de tal manera que aparezca centrado –esta fórmula aparece
escrita como ### para que usted la deduzca –, luego se verifica si esta columna es mayor o igual que 2
y, si lo es, se asigna el valor calculado a la variable Col:

Procedure Cent r a( Li nea, Col or : I nt eger ; S: String) ;
Var Col , L: I nt eger ;
Begin
L: =Lengt h( S) ;
Col : =Max( 2, ###) ; / / Recuerde deducir la formula que va en lugar de ###
Pr i nt ( Col , Li nea, Col or , S) ;
End;
Debe tener un cuidado especial con la función Max para que funcione: recuerde cuál. Como siempre,
compruebe que el subprograma está colocado adecuadamente y pruébelo hasta que funcione.
Diseñando un Menú.
Muchos programas comienzan ofreciendo al usuario una cantidad de opciones según las tareas que el
mismo puede llevar a cabo. El usuario entonces selecciona la que desea mediante un Menú que muestra
una lista de estas opciones de tal modo que la selección se realiza escogiendo la opción que aparece
resaltada. Para resaltar una opción simplemente se muestra ésta con un color diferente a las otras y para
desplazarse a través del Menú se utilizan algunas teclas seleccionadas por el programador, generalmente
las teclas de flechas. Desafortunadamente, estas teclas, así como las teclas de función –F1, F2, etc.– y
otras, no pueden ser leídas por la instrucción Readl n. Para que un programa detecte cuál tecla fue
presionada por el usuario sin el uso de Readl n, se pueden usar las funciones Keypr essed y Readkey
de la unidad CRT, tal como se muestra en el siguiente subprograma:

Procedure Tecl a;
Const ENTER=#13;
Var ch: Char ;

Begin
Repeat
Repeat Until Keypr essed;
Ch: =Readkey;
Wr i t el n( ch) ;
Until ch=ENTER;
End;

Escríbalo y pruébelo presionando primero algunas teclas de letras o números y luego presione las teclas de
flechas o las de función. Observe lo que sucede cuando presiona estas últimas. Para entender mejor lo que
sucede, cambie una línea del subprograma anterior de modo que no imprima el valor del caracter ch sino
su número de orden mediante la función or d:


Wr i t el n( or d( ch) ) ;

Semestre 3-2013. Programación: Taller nº 6 Pag. 4 de 6

Prof. José Ricardo Vargas Marzo 2014

Pruébelo de nuevo y observe que las teclas de flechas y de función tienen dos números de orden, siendo el
primero siempre cero. Este cero indica entonces que se trata de una tecla especial. Para manipular las
teclas especiales se utiliza un método que consiste en usar dos veces la función Readkey cuando el
primer número de orden es cero. Modifique el subprograma de modo que luzca como se muestra a
continuación:

Procedure Tecl a;
Const ENTER=#13;
Var ch: Char ;

Begin
Repeat
Repeat Until Keypr essed;
Ch: =Readkey;
If or d( ch) =0 then ch: =Readkey;
Wr i t el n( or d( ch) ) ;
Until ch=ENTER;
End;

Prueba el subprograma y anote los valores de orden de las cuatro teclas de flecha. Este subprograma es
temporal.
Ya sabe entonces cómo leer teclas especiales. Esta técnica será usada para mover la opción resaltada de un
menú. El subprograma para el manejo del Menú se escribirá como una función. Esta será invocada en el
programa principal y devolverá al mismo el número de la opción escogida por el usuario:

Function Menu: I nt eger ;

Const Baj a=80; Sube=72;
I zq=75; Der =77;
Ot r oFondo=Red;
ENTER=#13;
Opci ones=3;

Var Ch: Char ;
Opci on, Opci onAnt : I nt eger ;
Begin
Cent r a( 2, Li ght Gr een, ' MENU PRI NCI PAL' ) ;
Cent r a( 3, Li ght Gr een, ' ==============' ) ;
Cent r a( 6, 15, ' Pr i mer a Opci on' ) ;
Cent r a( 8, 15, ' Segunda Opci on' ) ;
Cent r a( 10, 15, ' Sal i r ' ) ;

Opci on: =1;
Repeat
Text BackGr ound( Ot r oFondo) ;
case Opci on of
1: Cent r a( 6, 15, ' Pr i mer a Opci on' ) ;
2: Cent r a( 8, 15, ' Segunda Opci on' ) ;
3: Cent r a( 10, 15, ' Sal i r ' ) ;
end;



Text BackGr ound( Col or DeFondo) ;
Opci onAnt : =Opci on;
Semestre 3-2013. Programación: Taller nº 6 Pag. 5 de 6

Prof. José Ricardo Vargas Marzo 2014

Ch: =ReadKey;
If or d( Ch) =0 then
Begin
Ch:=ReadKey;
Case or d( Ch) Of
Baj a, Der : Begin
I nc( Opci on) ;
If Opci on>Opci ones then Opci on: =1;
End;
Sube, I zq: Begin
Dec( Opci on) ;
If Opci on<1 then Opci on: =Opci ones;
End;
End;
End;

If ch=ENTER then Begin Resul t : =Opci on; Br eak; End;

case Opci onAnt of
1: Cent r a( 6, 15, ' Pr i mer a Opci on' ) ;
2: Cent r a( 8, 15, ' Segunda Opci on' ) ;
3: Cent r a( 10, 15, ' Sal i r ' ) ;
end;
Until Ch=ENTER;
End;

Haga el esfuerzo para entender cómo funciona el subprograma. Para ello, el programa principal debe
invocarlo y usar el resultado. Escriba entonces de una vez el siguiente programa principal:

/ / COMI ENZO DEL PROGRAMA PRI NCI PAL
/ / ********************************
begin
Repeat
Text BackGr ound( Col or DeFondo) ;
Cl r Scr ;
Mar co( Li ght Bl ue) ;
i : =Menu; / / Aquí se i nvoca el Menú

Case i of
1: Pr i nt ( 2, MaxLi n- 1, 15, ' Ust ed escogi o l a opci on ' +I nt ToSt r ( i ) ) ;
2: Pr i nt ( 2, MaxLi n- 1, 15, ' Ust ed escogi o l a opci on ' +I nt ToSt r ( i ) ) ;
3: Pr i nt ( 2, MaxLi n- 1, 15, ' Ust ed escogi o l a opci on ' +I nt ToSt r ( i ) ) ;
End;

Sl eep( 2000) ;
Until i =3;
end.

Se le recuerda que, a estas alturas, usted debe tener debidamente guardado el programa en una carpeta
dedicada al mismo y ubicada donde siempre. Si no, pues éste es el momento de hacerlo.

En este punto, tenemos un programa que permite al usuario escoger entre tres opciones presentadas en
pantalla: Movimiento Rectilíneo, Caída Libre y Salir. Ninguna de estas opciones se ejecuta pues no han
sido escritas. Comencemos con la última, la opción de salir. Para ello escriba el procedimiento Adi os
que se muestra a continuación:
Semestre 3-2013. Programación: Taller nº 6 Pag. 6 de 6

Prof. José Ricardo Vargas Marzo 2014

Procedure Adi os;
Begin
Cl r Scr ;
Cent r a( MaxLi n di v 2, 15, ' *** HASTA LUEGO ***' ) ;
Sl eep( 2000) ;
End;
Insértelo adecuadamente en el programa para ver de qué manera termina.
Tiene usted ahora una de las tres opciones ofrecidas en el Menú. El instructor le indicará los otros
subprogramas a insertar para completar el programa. No olvide guardarlo en disco.
Con esto queda concluido el Taller.



Recomendaciones.
1) Se recomienda encarecidamente repetir, rigurosa y minuciosamente este taller en casa con el
objetivo de asentar los conocimientos adquiridos. Más aún, ya está en capacidad de resolver los
ejercicios propuestos de la guía en el capítulo 9.
2) No se quede con ninguna duda. Aproveche la gran ventaja de contar con un equipo de preparadores
y auxiliares cuya presencia en el laboratorio es permanente y cuya obligación es atenderlos, ayudarlos
a aclarar sus dudas y orientarlos en el proceso de resolución de problemas.
3) Investigue a menudo los archivos de ayuda de Delphi. Ellos conforman quizá una de las más
completas fuentes de información sobre algunos de los temas vistos en el curso. Revise también el
material que viene en el CD. Este es igualmente una fuente rica en datos valiosos.
4) Practique mucho. La destreza en el manejo de las herramientas de programación vistas en este curso
es imprescindible para aprobar la materia. No es suficiente el conocimiento teórico, es necesaria la
fluidez.
5) No pierda sus programas. Mantenga un respaldo de todos ellos y, si es posible, agrégueles
comentarios que indiquen cosas como: su identificación, lo que hace el programa, cuándo fue escrito,
etc. Recuerde que lo que escriba ahora puede serle de utilidad más adelante. Además pueden serle de
mucha ayuda a la hora de prepararse para un examen.

Asignación.
Elabore los subprogramas que faltaron: el del movimiento rectilíneo de una pelota que rebota con los
bordes de la pantalla que se hizo en clase y uno similar que debe mostrar el movimiento de la pelota pero
con gravedad y con un rebote perfectamente elástico (movimiento parabólico), e insértelos en el programa
que acaba de construir. En ambos casos se pide que el mismo muestre una pelota (que puede simularse
con el caracter ‘O’) moviéndose por la pantalla según el tipo de movimiento. Cualquier otro detalle que le
quieran añadir contribuirá a subir la nota. La tarea es estrictamente individual. Los trabajos copiados serán
sancionados. Fecha tope para entregar: miércoles 13 de junio.