ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º
ɻ˻ɻɻ˻ɻÉ˻ɻɻËɻɻÉ
ɻ˻ɻɻËÉ»
º
º
̼̹ººº»Ì¹Ì¹ºÊºÌ¹º ºººººº
ººÌ¹Ì¹È»ºº
º
º Ê
ÊÈȼȼÊÈÊÊÊ ÊÊÊȼÊȼ¼È¼
ȹʼÊÊȼÊȼ
º
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
º É˻ɻ˻»ÉË É»
É» º
º
º ºÊºººººººº ºº
¹ º
PROGRAMACION ESTRUCTURADA º
º Ê Êȼʼȼȼȼ
ȼ º
º
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
º
º
º
EN ESTA LECCION APRENDERAS...
º
º
º
º ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ º
º ³
³ º
º ³ þ C¢mo llenar la
RUTINA PRINCIPAL ...............
7 ³ º
º ³ þ C¢mo llenar la
subrutina PresentaPrg ..........
8 ³ º
º ³ þ Cu ndo usar un
bloque de secuencia ......... 8,
11 ³ º
º ³ þ La sintaxis de la
funci¢n INPUT$( )............
9 ³ º
º ³ þ C¢mo llenar la
subrutina DaInstrucciones ......
10 ³ º
º ³ þ C¢mo llenar la
subrutina PiensaNUmero .........
11 ³ º
º ³ þ C¢mo crear una nueva
subrutina dentro
³ º
º ³ de otra ....................................... 13 ³ º
º ³ þ Cu ndo usar un
bloque de un bucle con su
³ º
º ³ contador antes de la prueba
IF/THEN ......... 13-14 ³ º
º ³
³ º
º ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ º
º
º
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
º É»Ë»Ë É»É» ɻɻɻ
º
º
º ººÌ¹º Ì º
¹ºº º º
¨QUE BLOQUES USAR?
º
º ȹʼȼȼȼ ȼȼ Ê
º
º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º É»Ë»Ë É»É» ɻɻɻ
º
º
º ººÌ¹º Ì º
¹ºº º º
¨QUE BLOQUES USAR?
º
º ȹʼȼȼȼ ȼȼ Ê
º
º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
S‚ que est s ansioso por saber c¢mo el programa ADIVINA UN
N£MERO fue hecho.
Pues comenzando con esta lecci¢n usaremos el
mismo para aplicar lo que hemos aprendido sobre la
PROGRAMACI¢N
ESTRUCTURADA y el m‚todo de PROGRAMACI¢N DESCENDENTE que
acabamos
de estudiar. En
esta ocasi¢n pondremos especial atenci¢n en C¢MO
SABER QUE BLOQUE USAR PARA ESTRUCTURAR EL PROGRAMA.
Otra cosa que haremos ser
escribir el programa usando una
programaci¢n dual, esto es, usaremos
una combinaci¢n de las
subrutinas propias del QBasic y las subrutinas
convencionales
(las que usan un nombre de etiqueta). Adem s, iremos mejorando
el programa hasta tener un
programa bastante completo.
Aprovecharemos tambi‚n para aprender las sentencias
nuevas que
aparezcan.
Como pudiste ver, el programa de ADIVINA UN
N£MERO est
construido de una SECUENCIA RECTA DE BLOQUES. Para que esto
fuese posible fue necesario QUE CADA
BLOQUE TUVIERA UNA Y
SOLAMENTE UNA SALIDA, Y UNA Y SOLAMENTE UNA
ENTRADA. De esta
forma, la computadora VA EJECUTANDO UNA INSTRUCCI¢N DESPU‚S DE
LA
OTRA DENTRO DE UN BLOQUE EN PARTICULAR, y
luego, deja dicho
bloque usando su £nica salida para dirigirse
hacia el pr¢ximo.
Esto, como pudiste ver, evit¢ grandes saltos hacia otros
bloques.
Pues bien, comencemos escribiendo el programa ADIVINA
UN
N£MERO desde la concepci¢n del mismo hasta su terminaci¢n. Seg£n
aprendiste en la lecci¢n QB000.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ EL PRIMER PASO ³
³ PARA ESCRIBIR UN PROGRAMA ³
³ ES DEFINIRLO
BIEN ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
...as¡ que procedamos a definir el juego...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
3 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
El juego consiste en hacer que la computadora
PIENSE UN
N£MERO.
T£ tienes que ADIVINARLO. Tienes diez turnos para
hacerlo. Si
lo adivinas o no, haz que la computadora DIGA SI
ADIVINASTE. Si
quieres REPETIR EL JUEGO, haz que la computadora
te lo pida, sino TERMINA EL JUEGO.
Una vez que lo hayas definido, procedes con el...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
SEGUNDO PASO ³
³ HAZ UN BOSQUEJO
BREVE
³
³ PERO QUE
DESCRIBA ³
³ LAS PRINCIPALES TAREAS DEL PROGRAMA ³
³ (algoritmo
general) ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Observa, en la definici¢n del juego, que
he escrito en
may£sculas las instrucciones m s importantes que llevar a
cabo
la computadora.
Estas son:
1. Pensar un n£mero.
2. Adivinarlo.
3. Decir si
adivinaste o no.
4. Repetir el juego.
5. Terminarlo.
Una vez que hayas hecho el algoritmo general del
juego,
pedido en el segundo paso, procedes entonces con el...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
TERCER PASO
³
³ CONSIDERA EL
BOSQUEJO HECHO EN EL SEGUNDO PASO ³
³ COMO LA RUTINA
PRINCIPAL DEL PROGRAMA ³
³ CONVIRTIENDO LAS PALABRAS
DE TU LENGUAJE ³
³
(traduce el algoritmo a Basic) ³
³
EN SUBRUTINAS
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Para convertir los pasos arriba mencionados, en subrutinas,
de modo que
el QBasic pueda usarlas, debes escribir los mismos
muy reducidos y muy juntos. Esta es la forma en
que los
convert¡...
PiensaNumero
Adivinalo
DiSiAdivinaste
RepiteJuego
Despidete
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
4 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
En una lecci¢n anterior te dije que el Qbasic puede trabajar
sin n£meros de l¡nea, pero que para ir a
una subrutina, ‚l
necesita saber el nombre de la misma
(etiqueta=label).
Sin
embargo, hay una dificultad, y es que la
etiqueta s¢lo acepta
letras para su nombre.
Y, como consecuencia, los espacios entre
ellas no est n permitidos.
De modo que, el nombre
de las subrutinas debe ser escrito
sin espacio entre sus letras. Por esa raz¢n, el nombre de las
subrutinas de nuestro algoritmo, est n escritos de
esta forma.
Sin embargo, para mejorar la legibilidad de los mismos, y como
es
permitido usar letras may£sculas, us‚ estas entre
una palabra y
otra en aquellos nombres que tienen m s de una palabra.
No te
olvides que el nombre de una subrutina en QBasic
puede tener 40
caracteres o menos, no m s.
Una vez obtenido los nombres de las subrutinas extraidas de
la definici¢n del programa, procedemos a colocarlas en la
RUTINA
PRINCIPAL del juego...
'
REM Juego de Adivina un N£mero
REM --------------------------
CLS : SCREEN 0: WIDTH 80
'PresentaPrg
'DaInstrucciones
'PiensaNumero
'Adivinalo
'DiSiAdivinaste
'RepiteJuego
'Despidete
END
Nota c¢mo hemos a¤adido en la RUTINA PRINCIPAL, el nombre
de la misma y la l¡nea que
lo subraya en l¡neas REMS.
Despu‚s, aparecen las instrucciones que selecciona la
manera en
que la pantalla del monitor se va a presentar.
Otras l¡neas que a¤adimos en la RUTINA PRINCIPAL, son
las
que nos dan los nombres de las subrutinas que
presentan el
programa y dan sus instrucciones.
Recuerda que cuando escribes la RUTINA PRINCIPAL por primera
vez, debes escribir los nombres de sus
subrutinas dentro de
sentencias REMS en forma de comillas para que no se ejecuten
por
el momento.
Despu‚s que vayas llenando las subrutinas, una a
una, le vas quitando las comillas (') REMs, de
modo que puedas
ejecutarlas y as¡ ver c¢mo funcionan.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
5 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Despu‚s de haber escrito la misma procedes con el...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
CUARTO PASO
³
³
LLENA LAS SUBRUTINAS ³
³ LLAMADAS EN EL PASO TRES ³
³ CON UN ENUNCIADO
PRINT
³
³
EN CADA UNA
³
³ DESCRIBIENDO LO QUE SE SUPONE HAGAN ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Recuerda, que debes llenar primero estas con un mensaje que
diga lo que cada una hace usando sentencias PRINT.
Repasa la
lecci¢n QB000, para veas todo el procedimiento, en caso de que
lo
hayas olvidado. He aqu¡ como queda el programa despu‚s de
llenar
las mismas con las sentencias mencionadas...
DECLARE SUB DiSiAdivinaste ()
DECLARE SUB Despidete ()
DECLARE SUB RepiteJuego ()
DECLARE SUB Adivinalo ()
DECLARE SUB PiensaNumero ()
DECLARE SUB DaInstrucciones ()
DECLARE SUB PresentaPrg ()
'
REM Juego de Adivina un N£mero
REM --------------------------
CLS : SCREEN 0: WIDTH 80
PresentaPrg
DaInstrucciones
PiensaNumero
Adivinalo
DiSiAdivinaste
RepiteJuego
Despidete
END
SUB Adivinalo
'------------
PRINT "Adivinalo"
END SUB
SUB DaInstrucciones
'------------------
PRINT "DaInstrucciones"
END SUB
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
6 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
SUB Despidete
'------------
PRINT "Despidete"
END SUB
SUB DiSiAdivinaste
'-----------------
PRINT "DiSiAdivinaste"
END SUB
SUB PiensaNumero
'---------------
PRINT "PiensaNumero"
END SUB
SUB PresentaPrg
'--------------
PRINT "PresentaPrg"
END SUB
SUB RepiteJuego
'--------------
PRINT "RepiteJuego"
END SUB
Si ejecutas el programa, deber aparecer en pantalla
los
mensajes...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ PresentaPrg
³
³ DaInstrucciones
³
³ PiensaNumero
³
³ Adivinalo
³
³ DiSiGanaste
³
³ RepiteJuego
³
³ Despidete
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
...que probar que el programa est funcionando bien.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
7 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Una vez que te asegures de que el programa
trabaja bien,
procedes con el...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
QUINTO PASO
³
³ LLENA Y TRATA CADA
SUBRUTINA SEPARADAMENTE ³
³ COMO SI FUERA
UN PROGRAMA COMPLETO ³
³
APLICANDOLE LOS CUATRO ³
³
PASOS ANTERIORES
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Recuerda que al llenar cada subrutina, debes seguir
estos
cinco pasos que acabamos de seguir.
LLENADO LA RUTINA PRINCIPAL
---------------------------
Ya viste c¢mo fue deducida la
RUTINA PRINCIPAL del programa:
Hicimos un resumen del juego, lo reducimos a unos
meros pasos a
seguir, los convertimos en subrutinas d ndole un
nombre a cada
uno, y por £ltimo, le a¤adimos las subrutinas para
presentar el
programa y dar sus instruciones. Sin embargo,
la RUTINA
PRINCIPAL...
REM Juego de Adivina un N£mero
REM --------------------------
CLS : SCREEN 0: WIDTH 80
PresentaPrg
DaInstrucciones
PiensaNumero
Adivinalo
DiSiAdivinaste
RepiteJuego
Despidete
END
...tiene como primera l¡nea una serie de
sentencias que
preparan la pantalla del monitor
antes de usarse.
Tales
sentencias...
CLS : SCREEN 0: WIDTH 80
...las
aprendiste en la lecci¢n 301.
As¡ que sabes que esta l¡nea, limpia la pantalla (CLS) y la
establece s¢lo para texto (SCREEN 0) con 80 columnas
de ancho.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307 ¨QUE
BLOQUES USAR?
8 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
LLENADO LA SUBRUTINA
PresentaPrg
---------------------------------
Una vez hecha la RUTINA PRINCIPAL procedemos a llenar
la
subrutina...
SUB PresentaPrg
'--------------
PRINT
"PresentaPrg"
END SUB
Sabes que...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ UN BUEN PROGRAMA ESTRUCTURADO ³
³ ESTA HECHO DE
³
³
BLOQUES EN SECUENCIA, ³
³
DE REPETIC¢N o BUCLES ³
³ Y DE
RAMAS ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
As¡ que, antes de pensar en los detalles de esta subrutina,
lo primero que tienes que preguntarte es: ¨QU‚ CLASE DE BLOQUE
DEBO USAR PARA PRESENTAR EL PROGRAMA? Como para hacer esto, lo
£nico que debes usar son varias sentencias PRINT, unas detr s
del otra, te dar s cuenta de que necesitas un...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ BLOQUE DE
SECUENCIA ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³
-------------
³
³
-------------
³
³
-------------
³
³
.
³
³ PUEDE CONSISTIR DE UN ENUNCIADO VAC¡O ³
³
UN SOLO ENUNCIADO DE ACCI¢N ³
³ O VARIOS DE
ELLOS ³
³
---
³
³ PERO NO PUEDEN
SER ³
³
ENUNCIADOS DE CONTROL COMO: ³
³
GOTO, IF..THEN, ECT. ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Esta es la forma en que present‚ la subrutina
usando el
formato del bloque secuencial...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
9 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
SUB PresentaPrg
'--------------
CLS
PRINT :
PRINT : PRINT
PRINT
"
QSoft PRESENTA"
PRINT
"
EL JUEGO DE ADIVINA UN NUMERO"
PRINT
PRINT
"
Un programa escrito en QBasic"
PRINT
"
por Reinaldo Acevedo"
PRINT
" para las
computadoras IBM y compatibles."
PRINT :
PRINT
PRINT
"
DERECHOS RESERVADOS 1995"
PRINT :
PRINT : PRINT
PRINT
"
PRESIONA ENTER PARA CONTINUAR."
LET e$ =
INPUT$(1)
END SUB
Naturalmente, que t£ puedes hacerla como desees, siempre y
cuando tenga buena apariencia. Observa que est formada s¢lo de
enunciados PRINT, con la excepci¢n de la instrucci¢n...
LET e$ = INPUT$(1)
...que estoy seguro que a£n no sabes lo que significa. Pues
como puedes deducir de su nombre, esta funci¢n no es m s que
otra
forma de la sentencia INPUT que
aprendiste en una lecci¢n
anterior. Su sintaxis completa es:
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ INPUT$(n[,[#]filenumber%]) ³
ÀÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
el n£mero de caracteres
n£mero de caracteres de un archivo
abierto
a ser
leidos
³
del archivo a la Si es omitido, INPUT$ lee
derecha
del teclado
Esta funci¢n lo que hace es sacar una cadena de caracteres
leidas de un archivo especificado, y en
caso de que se omita
este, saca los caracteres desde el teclado. Es este £ltimo uso
el que se le est dando aqu¡, por lo que su sintaxis
m s simple
es:
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ INPUT$(lengh of
string) ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÙ
n£mero que indica la longitud de la cadena
o los caracteres entrados desde
el teclado
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
10 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
As¡ que...
LET e$ = INPUT$(1)
...significa, presiona una tecla y almacena el
car cter
representado por ella en la variable alfa e$. Como puedes ver,
el n£mero 1 significa que un s¢lo car cter puede ser aceptado
del
teclado. Esta
instrucci¢n es usada aqu¡ con el prop¢sito de que
la ejecuci¢n del programa haga una pausa y el usuario pueda leer
el mensaje dado por los enunciados PRINT
anteriores. Si
el
usuario desea continuar con la ejecuci¢n del
programa, basta
conque presione ENTER, como lo indica la instrucci¢n...
PRINT
"
PRESIONA ENTER PARA CONTINUAR."
La funci¢n INPUT$
es diferente del enunciado INPUT,
primero porque es una funci¢n definida previamente, es decir, es
un miniprograma que viene ya hecho para el prop¢sito
que se le
ha destinado; y segundo, porque evita que la tecla presionada se
despliegue en pantalla. Otra ventaja que tiene, es que evita
que el programa se interrumpa s£bitamente con el
mensaje REDO
FROM START, en el caso de que presiones una coma
(,). Si se
hubiese usado la instrucci¢n...
INPUT
"
PRESIONA ENTER PARA CONTINUAR.",e$
...y se hubiese presionado una coma (,), el
programa se
hubiese detenido con el mensaje ya dicho.
LLENANDO LA SUBRUTINA DaInstrucciones
-------------------------------------
Una vez que hayas llenado la subrutina PresentaPrg, ejecuta
el programa.
Si el mensaje indicado se despliega sin ninguna
dificultad, puedes estar seguro que la
misma funciona bien.
Despu‚s de haber probado la subrutina y despu‚s de haber
quedado
satisfecho con ella, pasas a llenar la pr¢xima subrutina...
SUB DaInstrucciones
'------------------
PRINT
"DaInstrucciones"
END SUB
Al igual que en la subrutina anterior, esta,
s¢lo va a
necesitar sentencias PRINT unas detr s de la otra para
desplegar
en pantalla las instrucciones del juego. As¡ que necesitas OTRO
BLOQUE SECUENCIAL.
He aqu¡ la subrutina ya llena:
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
11 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
SUB DaInstrucciones
'------------------
CLS
PRINT : PRINT :
PRINT
PRINT "
*** INSTRUCCIONES ***"
PRINT : PRINT
PRINT "
LA COMPUTADORA TE PEDIRA "
PRINT "
QUE ADVINES UN NUMERO DEL 1 AL 100."
PRINT
PRINT "
TIENES DIEZ OPORTUNIDADES"
PRINT "
PARA ADIVINARLO,"
PRINT "
AL CABO DE LAS CUALES"
PRINT "
TE DIRA SI LO ADIVINASTE O NO."
PRINT : PRINT
PRINT "
PRESIONA ENTER PARA CONTINUAR."
LET e$ = INPUT$(1)
END SUB
Despu‚s de haber escrito la misma, ejecuta el
programa
(RUN) para ver como trabaja. Si no hay ning£n
error, el
programa desplegar su presentaci¢n, pausar hasta que presiones
ENTER y, luego, desplegar las instrucciones pausando nuevamente
hasta que vuelvas a presionar ENTER para continuar.
LLENANDO LA SUBRUTINA PiensaNumero
----------------------------------
Ahora estar s preparado para llenar la pr¢xima subrutina...
SUB PiensaNumero
'---------------
PRINT
"PiensaNumero"
END SUB
Como recordar s, lo primero que debes hacer al llenar
una
subrutina es preguntarte qu‚ tipo de bloque
vas a usar para
colocar la misma.
Como esta subrutina le pide a la computadora
que piense un n£mero, lo puedes lograr haciendo que ella misma
lo
encuentre en su memoria.
Ahora bien, el hacer que tu computadora busque un n£mero en
su memoria es una tarea secuencial. De modo que, sabes que debes
usar un BLOQUE SECUENCIAL dentro
del cual escribir las
instrucciones de esta subrutina. Ahora, la pregunta es, ¨c¢mo
hacemos para que tu computadora piense un n£mero? Recuerda que
un m‚todo para generar un n£mero al azar
es por medio de la
funci¢n RND, que aprendiste a usar en la lecci¢n
QB000. Pues
usando tal funci¢n, fue como logr‚ "hacer
que la computadora
pensara un n£mero del uno al cien"...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
12 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Como quise que
el Us‚ una frase
com- Nota
conqu‚ fami-
mensaje se
viera pleta para
llamar ÚÄ>liaridad hice que
claramente us‚
un la variable
num‚- ³ la computadora
ancho de
pantalla rica que va
almace- ³ "hablara" conmigo.
de 40 ÄÄÄÄÄÄÄÄÄÄÄÄ¿ nar el n£mero pen- ³
³ sado ÄÄ¿ ³
SUB PiensaNumero ³ ³ ³
'--------------- ³ ³ ³
CLS : SCREEN 0:
WIDTH 40 ³ ³
RANDOMIZE
TIMER ÚÄÄÄÄÄÄÄÄÄÄÄÙ ³
LET
numero.pensado = INT(RND * 100) + 1
³
PRINT : PRINT
³ Esta frase
con-
PRINT "
ESTOY PENSANDO EN UN" <ÄÄÄ´ tin£a el di lo-
PRINT
³ go familiar de
PRINT "
NUMERO DEL 1 AL 100." ³ la computadora
PRINT
³
conmigo.
PRINT " POR FAVOR, ESPERA UN
POCO..."<Ù ³
PRINT : PRINT ³
PRINT " YA LO
PENSE!" <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
PRINT : PRINT
PRINT " PRESIONA ENTER PARA
CONTINUAR."
LET e$ =
INPUT$(1)
END SUB
Recuerda que t£ puedes llenar las subrutinas de la forma que
desees.
Por ejemplo, yo no me conform‚ con
hacer que mi
computadora pensara un n£mero usando la funci¢n RND,
sino que
tambi‚n quise que pareciera que ella aparentara
decirme que lo
est pensando.
Si lees la subrutina te dar s cuenta de ello.
Pero eso no lo es todo, al mi computadora "aparentar"
establecer
un di logo conmigo, se forma cierto aire de
familiaridad entre
ella y yo (interacci¢n), que hace que yo piense que estoy
jugando
con una persona y no con una m quina.
Ahora bien, si ejecutas el programa para ver como funciona
hasta ahora, te encontrar s con una dificultad:
EL MENSAJE DE
ESTA SUBRUTINA SE DESPLEGAR TAN R PIDO QUE DAR¡A LA IMPRESI¢N
DE
QUE LA COMPUTADORA NO ESTAR¡A SIMULANDO ACTUAR COMO
UN HUMANO.
Los humanos toman tiempo para
pensar. El
problema puede
resolverse, haciendo que la computadora se detenga
antes de la
frase YA LO PENSE!.
¨C¢mo hacer esto?
Esto se puede conseguir, a¤adiendo a la subrutina
varias
instrucciones para este prop¢sito. Sin embargo, si siempre que
se nos ocurra alguna idea para mejorar una subrutina le vamos
a
a¤adir instrucciones, llegar el momento de que se
har¡a tan
larga que dificultar¡a su legibilidad.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
13 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
¨Y cu l ser¡a la soluci¢n? Pues, sencillamente, abrir una
nueva subrutina para hacer la pausa
requerida. He
aqu¡ la
soluci¢n...
SUB PiensaNumero
'---------------
CLS : SCREEN 0: WIDTH 40
RANDOMIZE
TIMER
LET
numero.pensado = INT(RND * 100) + 1
PRINT : PRINT
PRINT
" ESTOY PENSANDO EN
UN"
PRINT
PRINT
" NUMERO DEL 1 AL
100."
PRINT
PRINT
" POR
FAVOR, ESPERA UN POCO..."
'HazPausa
PRINT :
PRINT
PRINT "
YA LO
PENSE!"
PRINT :
PRINT
PRINT
" PRESIONA ENTER PARA
CONTINUAR."
LET e$ =
INPUT$(1)
END SUB
CREACION DE UNA NUEVA
SUBRUTINA LLAMADA HazPausa
------------------------------------------------
Nota c¢mo dej‚ los detalles para hacer la pausa
en una
nueva subrutina.
No me preocup‚ por los detalles de la misma
ahora, sino que los dej‚ para llenarla despu‚s. Es esa la raz¢n
por la que le coloqu‚ un REM en forma de comilla('). Si no te
acuerdas de c¢mo crear y darle nombre a las subrutinas,
repasa
la lecci¢n 303.
Ahora, procedemos a llenar esta nueva subrutina. Una forma
de hacer que la computadora aparente pausar por alg£n momento,
es
instruirla a que lleve a cabo una misma
tarea varias veces,
digamos, que sume un n£mero a¤adi‚ndole uno en cada suma pero
sin
desplegar el resultado de la suma.
La idea de sumar un n£mero varias veces nos
sugiere UNA
REPETICION, de modo que el bloque que deber¡amos usar para
llenar
esta subrutina nueva es...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
14 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
BLOQUE DE UN BUCLE ³
³
CON SU CONTADOR
³
³ ANTES DE LA
PRUEBA IF...THEN ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ LET contador=0
³
³ Bucle:
³
³ LET contador= contador
+1 ³
³ IF condici¢n
salida THEN ³
³
GOTO TerminaBucle
³
³ END IF
³
³ GOTO Bucle
³
³ TerminaBucle:
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Una vez que sabemos qu‚ clase de bloque vamos a usar
para
llenar la subrutina HazPausa, procedemos a escribir dicho
bloque
dentro de la subrutina esquem tica...
SUB HazPausa
'-----------
PRINT "HazPausa"
END SUB
...as¡...
SUB HazPausa
'-----------
LET contador=0
Bucle:
LET
contador= contador +1
IF condici¢n salida THEN
GOTO TerminaBucle
END IF
GOTO
Bucle
TerminaBucle:
END SUB
Si llamamos al contador, Pausa; al Bucle, RepitePausa; y a
la etiqueta RepiteBucle, RepitePausa tendremos...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB307
¨QUE BLOQUES USAR?
15 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
SUB HazPausa
'-----------
LET Pausa = 0
RepitePausa:
LET Pausa = Pausa
+ 1
IF Pausa = 40000
THEN GOTO TerminaPausa
GOTO RepitePausa
TerminaPausa:
END SUB
En la pr¢xima lecci¢n
continuaremos con este
interensant¡simo tema.
Ahata luego!