ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º
ɻ˻ɻɻ˻ɻÉ˻ɻɻËɻɻÉ
ɻ˻ɻɻËÉ»
º
º
̼̹ººº»Ì¹Ì¹ºÊºÌ¹º ºººººº
ººÌ¹Ì¹È»ºº
º
º Ê
ÊÈȼȼÊÈÊÊÊ ÊÊÊȼÊȼ¼È¼
ȹʼÊÊȼÊȼ
º
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
º É˻ɻ˻»ÉË É»
É» º
º
º ºÊºººººººº ºº
¹ º
PROGRAMACION ESTRUCTURADA º
º Ê Êȼʼȼȼȼ
ȼ º
º
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
º
º
º
EN ESTA LECCION APRENDERAS...
º
º
º
º ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ º
º ³
³ º
º ³ þ ¨Cu les son las unidades
estructurales
³ º
º ³ de un programa?
..............................
2 ³ º
º ³ þ ¨Qu‚ es un diagrama de flujo?
................ 3 ³ º
º ³ þ ¨Qu‚ es bucle? ............................... 5 ³ º
º ³ þ Lo que es un bloque de un bucle
³ º
º ³ con su contador
despu‚s de la prueba
³ º
º ³ IF/THEN
...................................... 7 ³ º
º ³ þ Lo que es un bloque de un bucle
³ º
º ³ con su contador antes
de la prueba
³ º
º ³ IF/THEN
...................................... 7 ³ º
º ³ þ Lo que es un bloque de un bucle
³ º
º ³ sin contador ................................. 8 ³ º
º ³ þ Lo que es un bloque de un bucle
³ º
º ³ en ramas
..................................... 8 ³ º
º ³ þ Lo que es un bloque de secuencia
............. 9 ³ º
º ³ þ La definici¢n completa de
9 ³ º
º ³ PROGRAMACION
ESTRUCTURADA ....................
10 ³ º
º ³ þ Los bucles traducidos al ingl‚s
9 ³ º
º ³ con sus
correspondientes diagramas
³ º
º ³ de flujo
.....................................
11 ³ º
º ³
³ º
º ³
³ º
º ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ º
º
º
ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
º É»Ë»Ë É»É» ɻɻɻ
º
º
º ººÌ¹º Ì º
¹ººÌ» º BLOQUES DE CONSTRUCCION º
º ȹʼȼȼȼ ȼȼȼ
º
º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º É»Ë»Ë É»É» ɻɻɻ
º
º
º ººÌ¹º Ì º
¹ººÌ» º BLOQUES DE
CONSTRUCCION
º
º ȹʼȼȼȼ ȼȼȼ
º
º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
UNIDADES ESTRUCTURALES DE UN PROGRAMA
-------------------------------------
En la lecci¢n QB000 sobre programaci¢n DE ARRIBA A
ABAJO
(Top Down Programming) hab¡amos indicado que dicha
programaci¢n
no era suficiente para escribir programas bien estructurados,
que
necesit bamos algo m s. Este es precisamente el tema
que
discutiremos a continuaci¢n.
Para descubrir ese "algo" necesario para
la programaci¢n
estructurada, consideraremos el programa que
estudiamos en la
lecci¢n 301: el juego titulado
ADIVINA UN N£MERO.
Vuelve a leer el programa cuyo listado aparece al final de
esta lecci¢n. L‚elo cuidadosamente otra
vez. Im ginate c¢mo
funciona y lo que hace cada una de sus subrutinas. Luego
de que
lo hayas estudiado, dig¡talo en tu
computadora y ejec£talo.
Estudia cuidadosamente c¢mo funciona realmente.
En la pr¢xima p gina ver s su diagrama de flujo (flowchart).
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
3 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
(EMPIEZA)
³
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> [TURNO=1]
³
³
³SI
³ <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
\³/
³
/ \
/ \
³
/ \ SI / G=N \
³
/ JUEGA \ <ÄÄÄÄÄÄ / or \
³
\DE NUEVO /
\ TURNO=10 /
³
\ ?
/
\ ? /
³
\ /
\ /
³
\³/NO
\³/NO
³
[TERMINA MENSAJE]
[PIENSA UN NUMERO]
³
³
\³/
[TURNO=TURNO+1]
(FIN)
/ \
/³\
/ \ CORRECTO
³
/ADIVINALO\ ÄÄÄÄÄÄÄÄÄÂÄ> [DI QUE ³
\ / ³ ADIVINASTE] ³
\ ? / ³ ÀÄÄÄÄÄÄÄÄ´
\ /
³
³
\³/INCORRECTO
³
³
[DA
OREJITA] ³
³
\³/
³
³
[PAUSA] ³
³
\³/
³ ³
/ \
³
³
/ \ CORRECTO ³
³
/ADIVINALO\ ÄÄÄÄÄÄÄÄÄÙ
³
\
/
³
\ ? /
³
\ /
³
³INCORRECTO
³
\³/
³
[DI QUE NO
³
ADIVINASTE]
³
³
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
-----------------------------------------------------------------
Nota: En el diagrama de flujo de
arriba los OVALOS est n
indicados con
par‚ntesis ( ) y las CAJAS con par‚ntesis [ ]. De
esta manera ahorramos espacio y podemos dibujar todo el
diagrama
de flujo en una p gina solamente.
-----------------------------------------------------------------
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
4 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
¨Qu‚ notas en el diagrama de flujo? Una serie de bloques de
ARRIBA A ABAJO, uno detr s del otro, d ndonos la impresi¢n de
que
el programa est escrito en secuencia, justamente de la manera
en
que leemos.
No notamos brincos que nos desv¡en de
nuestra
lectura.
Estos bloques hacen que el programa se pueda leer
y
entender sin ning£n esfuerzo de nuestra parte.
Sin embargo, cuando leemos detenidamente rutinas como...
AdivinaNumero:
'------------
LET turno = 1
RepiteTurno:
<ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
CLS
³
LOCATE 1, 20: PRINT
"TURNO"; turno; " DE"; 10
³
PRINT
³
INPUT "ADIVINA
UN NUMERO DEL 1 AL 100"; numero.intentado ³
IF
numero.intentado = numero.pensado OR turno = 10 THEN ³
GOTO TerminaTurno ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
END IF
³
³
GOSUB
DaOrejita
³
³
GOSUB Pausa
³
³
LET turno = turno +
1
³
³
GOTO
RepiteTurno ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
TerminaTurno: <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
RETURN
...descubrimos algunos brincos GOTO'S que
desvanecen la
impresi¢n inicial que ten¡amos del diagrma de flujo
de que el
programa carec¡a de saltos. Sin embargo, a pesar de que esta
subrutina tiene saltos, estos no son
fuera de la misma sino
dentro.
Es decir, al leer la subrutina,
nuestra vista es
desviada un poco, ya que los saltos se
producen en la misma
subrutina.
De modo que, la lectura de la misma
se afecta
m¡nimamente.
Ahora bien, otra cosa que notamos es que cuando seguimos los
saltos, estos se detienen en una l¡nea que
explica el mismo
(sigue las flechas y lo notar s). As¡ que, al
leer esta
subrutina, encontramos dos cosas importantes:
Primero, que los saltos est n confinados dentro del bloque
AdivinaNumero, no fuera de ‚l. Por lo tanto, la legibilidad de
la misma, no se afecta casi nada.
Segundo, si seguimos los saltos veremos que los mismos caen
en l¡neas que los explican.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
5 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Volviendo nuevamente a la subrutina AdivinaNumero. Nota que
hay una sentencia IF/THEN GOTO que detiene la repetici¢n,
y otro
GOTO que la causa.
Como puedes ver, estas SENTENCIAS DE CONTROL son esenciales
para repetir instrucciones y para detenerlas. Observa, que esta
subrutina AdivinaNumero, est formada por un grupo de
sentencias,
o UNIDAD EN BLOQUE,
que lleva a cabo una tarea en particular.
Si observas nuevamente el diagrama de flujo del programa
entero,
ver s que est compuesto de varios bloques de sentencias.
Ahora bien, si vuelves a leer nuevamente
la subrutina
AdivinaNumero, pero esta vez siguiendo las flechas,
notar s que
una se dirige al mensaje RepiteTurno y
la otra al mensaje
TerminaTurno. Nota,
como dentro de estas dos etiquetas (labels),
hay una serie de instrucciones en las que la
instrucci¢n final
(GOTO RepiteTurno), hace que se repitan hasta
que la condici¢n
final (TerminaTurno) es ejecutada.
¨QUE ES UN BUCLE?
-----------------
En otras palabras, tales instrucciones se repiten
varias
veces hasta que una condici¢n final detiene su repetici¢n. Esto
se asemeja a un bucle de pelo (loop-pelo enroscado),
que parece
que da vueltas y m s vueltas hasta que se detiene al final.
As¡ que, podemos decir que...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ UNA SERIE DE
INSTRUCCIONES ³
³ QUE SE REPITEN UNA Y OTRA VEZ ³
³ SE LLAMA UN BUCLE ³
³ (Loop, en ingl‚s) ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Por supuesto, que no queremos ejecutar
una serie de
instrucciones para siempre. De modo que, tenemos que usar una
sentencia, o m s bien, un grupo de sentencias que
las detengan.
En nuestro bucle
(loop) RepiteTurno, usamos la
sentencia
condicional IF/THEN/GOTO, para pararlo.
Si escribamos el bucle nuevamente, pero con solamente
las
l¡neas que lo causan, lo explican, lo generan
y lo terminan,
tenemos...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
6 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
AdivinaNumero:
'------------
LET turno = 1 <ÄÄÄÄÄ Se inicia contador
fuera del bucle.
RepiteTurno:
<ÄÄÄÄÄ Entrada al bucle.
------------ ÚÄÄ Condici¢n para salir
del bucle.
------------ ³
------------ \³/
IF
numero.intentado = numero.pensado OR turno = 10 THEN
GOTO TerminaTurno
END IF
------------
------------
LET turno = turno +
1 <ÄÄÄÄÄ aumenta contador del
bucle
GOTO
RepiteTurno <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Repetici¢n del
bucle.
TerminaTurno: <ÄÄÄÄÄÄ Salida del bucle
RETURN
Y si lo reducimos m s a£n, tenemos...
AdivinaNumero:
'------------
LET turno = 1
RepiteTurno:
------------
IF
numero.intentado = numero.pensado OR turno = 10 THEN
GOTO TerminaTurno
END IF
------------
LET turno = turno +
1
GOTO
RepiteTurno
TerminaTurno:
RETURN
...y si hacemos algunos cambios de etiqueta (label),
para
generalizarlo, tenemos...
AdivinaNumero:
'------------
LET contador = 1
Bucle:
------------
If condici¢n
de salida THEN
GOTO TerminaBucle
END IF
------------
LET contador =
contador + 1
GOTO Bucle
TerminaBucle:
RETURN
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
7 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Observa que lo que tenemos ahora es un...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ BLOQUE DE UN BUCLE CON SU
CONTADOR ³
³ DESPU‚S DE LA
PRUEBA IF...THEN
³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ LET contador =
1
³
³ Bucle:
³
³ -------------
³
³ IF condici¢n salida
THEN
³
³ GOTO
TerminaBucle
³
³ END IF
³
³ -------------
³
³ LET contador = contador +
1 ³
³ GOTO Bucle
³
³ TerminaBucle:
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Habr ocasiones en que tengas que usar el contador antes de
la prueba IF/THEN...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
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: ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Si consideramos la subrutina...
RepiteJuego:
'----------
PRINT
Decidete:
INPUT "QUIERES
JUGAR OTRA VEZ (S/N)"; decision$
IF decision$
= "S" OR decision$ = "s" THEN RUN 'Juega otra vez.
IF decision$
= "N" OR decision$ = "n" THEN GOTO TerminaDecision
GOTO Decidete 'otra
vez.
TerminaDecision:
RETURN
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
8 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
...y re-escribimos su bucle interno, obtendremos el bloque
de un bucle sin contador...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
BLOQUE DE UN BUCLE ³
³
SIN CONTADOR
³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ Bucle:
³
³ ------------- ³
³ IF condici¢n salida
THEN
³
³ GOTO
TerminaBucle
³
³ END IF
³
³ -------------
³
³ GOTO Bucle
³
³ TerminaBucle:
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Si hacemos lo mismo con la subrutina...
DaOrejita:
'--------
PRINT
IF
numero.intentado < numero.pensado THEN
GOTO
DiNumeroEsMayor
END IF
DiNumeroEsMenor:
PRINT "NO, EL
NUMERO PENSADO ES MENOR QUE "; numero.intentado
GOTO
TerminaOrejita
DiNumeroEsMayor:
PRINT "NO, EL
NUMERO PENSADO ES MAYOR QUE"; numero.intentado
TerminaOrejita:
RETURN
...tendremos un bloque de bucle en ramas.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
BLOQUE DE UN BUCLE ³
³
EN RAMAS
³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ IF condicion THEN
GOTO Verdadero ³
³ Falso:
³
³ ------------
³
³ GOTO
TerminaCondicion
³
³ Verdadero:
³
³ ------------
³
³
TerminaCondicion:
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
9 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Ahora, si re-escribimos el bloque interno de la subrutina...
DiQueAdivinaste:
'--------------
PRINT
"CARAMBA, ADIVINASTE!"
PRINT
PRINT "EL
NUMERO ES"; numero.pensado
PRINT
PRINT "LO
ADIVINASTE EN "; turno; " TURNOS DE "; 10
PRINT
PRINT "O EN
UN"; INT((turno / 10) * 100); "% "; "DE LOS TURNOS"
RETURN
...tendremos un bloque de secuencia...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ 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. ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Volviendo a nuestro programa de ADIVINA UN NUMERO, te dije
antes, que un programa ideal debe ser
aqu‚l que no contenga
saltos. Es decir,
un programa que s¢lo consista de una secuencia
de sentenmcias.
Como puedes ver, esto es imposible de conseguir.
Para instruir a la computadora a que ejecute una acci¢n
repetida,
por ejemplo, ser¡a imposible sin que ‚sta haga
uno o varios
saltos a otras l¡neas de programa o etiquetas.
Pero hay una cosa que s¡ podemos hacer, y es evitar que
la
computadora d‚ largos saltos, y confinar los mismos dentro de
sus
subrutinas. De esta
forma, encontraremos de inmediato a donde se
dirige el salto.
Mejor a£n, podemos dirigir el mismo hacia una
l¡nea con un mensaje REM que explique la naturaleza del
salto.
Otra cosa que podemos hacer es escribir nuestros programas
usando solamente los tres bloques que hemos estudiado: EL BLOQUE
SECUENCIAL, DE BUCLE Y EL DE RAMAS.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
10 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Y esta es precisamente la forma en que el programa ADIVINA
UN NUMERO est estructurado. ES UNA SERIE
DE BLOQUES
SECUENCIALES, DE BUCLES Y DE RAMAS. Estos bloques unidos a la
programaci¢n de ARRIBA A ABAJO o DESCENDENTE (Top Down) forman
un
programa bien estructurado. De modo que...
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
LA PROGRAMACI¢N ESTRUCTURADA
³
³
ES UN M‚TODO
³
³
PARA ESCRIBIR UN PROGRAMA BIEN ESTRUCTURADO ³
³
EN CUALQUIER LENGUAJE DE COMPUTADORA ³
³
QUE FACILITA SU LECTURA,
³
³
SU MANTENIMIENTO,
³
³
Y SU MODIFICACI¢N;
³
³
Y QUE HACE TODO ESO,
³
³ USANDO LA
PROGRAMACI¢N DE ARRIBA A ABAJO ³
³
Y ESTAS TRES UNIDADES ESTRUCTURALES: ³
³ LOS BLOQUES DE
SECUENCIA, DE REPETICI¢N (loop) y DE RAMAS. ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
A continuaci¢n ver s los bucles traducidos al ingl‚s y con
sus correspondientes diagramas de flujos. Est£dialos.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
11 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
BLOQUE DE UN BUCLE ³
³
CON SU CONTADOR
³
³ DESPU‚S DE LA
PRUEBA IF...THEN
³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ LET counter=1
³
³ 'Loop
³
³ -------------
³
³ IF exit condition THEN GOTO
End loop ³
³ -------------
³
³ LET counter = counter +
1 ³
³ GOTO Loop
³
³ 'End loop.
³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
³ ³LET counter=1³
³
³ ÀÄÄÄÄÄÄÂÄÄÄÄÄÄÙ
³
³ \³/
³
³ ÚÄÄÄÄÄÄÄÄÄÄÄ¿
³
³ ³ Loop ³<ÄÄÄÄÄÄÄÄÄÄÄ¿
³
³ ÀÄÄÄÄÄÂÄÄÄÄÄÙ ³
³
³ \³/
³
³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
³
³ ³ ---------- ³ ÚÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄ¿ ³
³ ÀÄÄÄÄÄÂÄÄÄÄÄÄÙ ³LET counter=counter+1³ ³
³ \³/ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ / \
/³\ ³
³ / IF \ False ÚÄÄÄÄÄÁÄÄÄÄÄÄ¿ ³
³ / exit \ ÄÄÄÄÄ>³ ---------- ³ ³
³ \condition/ THEN ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ \ /
³
³ \ /
³
³ True ³ THEN
³
³ \³/
³
³ ÚÄÄÄÄÄÄÄÄ¿
³
³ ³End Loop³ ³
³ ÀÄÄÄÄÄÄÄÄÙ
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306 BLOQUES DE
CONSTRUCCION
12 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
BLOQUE DE UN BUCLE ³
³
CON SU CONTADOR
³
³ ANTES DE LA
PRUEBA IF...THEN ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ LET counter=0
³
³ 'Loop
³
³ LET counter = counter +
1 ³
³ IF exit condition THEN GOTO
End loop ³
³ GOTO Loop
³
³ 'End loop.
³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
³ ³LET counter=0³
³
³ ÀÄÄÄÄÄÄÂÄÄÄÄÄÄÙ
³
³
\³/
³
³ ÚÄÄÄÄÄÄÄÄÄÄÄ¿
³
³ ³ Loop ³<ÄÄÄÄÄÄÄÄÄÄÄ¿ ³
³ ÀÄÄÄÄÄÂÄÄÄÄÄÙ ³ ³
³
\³/
³ ³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³
³ ³LET counter=counter+1³ ³ ³
³ ÀÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³
³
\³/
³ ³
³
/ \
³ ³
³ /
IF \ False
³ ³
³
/ exit \ ÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³
\condition/ THEN
³
³ \ /
³
³
\ /
³
³
True ³ THEN ³
³
\³/
³
³
ÚÄÄÄÄÄÄÄÄ¿
³
³
³End Loop³
³
³
ÀÄÄÄÄÄÄÄÄÙ
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
13 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
BLOQUE DE UN BUCLE ³
³
SIN CONTADOR
³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ 'Loop
³
³ -------------
³
³ IF exit condition THEN GOTO
End loop ³
³ ------------- ³
³ GOTO Loop
³
³ 'End loop.
³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ÚÄÄÄÄÄÄÄÄÄÄÄ¿
³
³ ³Repeat Loop³<ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
³ ÀÄÄÄÄÄÂÄÄÄÄÄÙ
³ ³
³ \³/
³ ³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ ³
³ ³Do something³
³ ³
³ ÀÄÄÄÄÄÂÄÄÄÄÄÄÙ
³ ³
³ \³/
³ ³
³ / \
³ ³
³ / IF \ False ÚÄÄÄÄÄÁÄÄÄÄÄÄ¿ ³
³ / exit \ ÄÄÄÄÄÄÄÄ>³Do something³ ³
³ \condition/ THEN ÀÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ \ /
³
³ \ /
³
³ True ³ THEN
³
³ \³/
³
³ ÚÄÄÄÄÄÄÄÄ¿
NO COUNTER ³
³ ³End Loop³ LOOP BLOCK FLOWCHART ³
³ ÀÄÄÄÄÄÄÄÄÙ
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
14 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³
BLOQUE DE UN BUCLE ³
³
EN RAMAS
³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ IF condition THEN
GOTO True
³
³ 'False ³
³ Do
something
³
³ GOTO End IF
³
³ 'True
³
³ Do
something ³
³ 'End IF
³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ /
\
³
³ / IF \ True
³
³ / \ ÄÄÄÄÄÄÄÄ¿
³
³ \condition/ THEN ³
³
³ \ / ³
³
³ \
/
³ ³
³ False ³ THEN
³
³
³ \³/
³
³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
³
³ ³ Do something ³<ÄÄÄÄÄÄÙ
³
³ ÀÄÄÄÄÄÄÄÂÄÄÄÄÄÄÙ
³
³ \³/
³
³ ÚÄÄÄÄÄÄÄÄ¿
³
³ ³ End IF ³ ³
³ ÀÄÄÄÄÄÄÄÄÙ
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
15 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ BLOQUE DE
SECUENCIA ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³
-------------
³
³
-------------
³
³
-------------
³
³
.
³
³ PUEDE CONSISTR 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. ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
³ ³ ------------ ³ ³
³ ÀÄÄÄÄÄÄÂÄÄÄÄÄÄÄÙ ³
³
³
³
³
\³/
³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
³ ³ ------------ ³ ³
³ ÀÄÄÄÄÄÄÂÄÄÄÄÄÄÄÙ ³
³
³
³
³
\³/
³
³
. ³
³
.
³
³
.
³
³
PR¢XIMA L¡NEA
³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
16 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
LISTADO DEL PROGRAMA ADIVINA UN NUMERO
REM ADIVIMA UN NUMERO
REM -----------------
CLS : SCREEN 0: WIDTH 80
GOSUB
PiensaUnNumero
GOSUB
AdivinaNumero
GOSUB
DiSiGanaste
GOSUB
RepiteJuego
GOSUB
TerminaJuego
END
PiensaUnNumero:
'-------------
RANDOMIZE TIMER
LET numero.pensado
= INT(RND * 100) + 1
RETURN
AdivinaNumero:
'------------
LET turno = 1
RepiteTurno:
CLS
LOCATE 1, 20:
PRINT "TURNO"; turno; " DE"; 10
PRINT
INPUT
"ADIVINA UN NUMERO DEL 1 AL 100"; numero.intentado
IF
numero.intentado = numero.pensado OR turno = 10 THEN
GOTO TerminaTurno
END IF
GOSUB DaOrejita
GOSUB Pausa
LET turno = turno
+ 1
GOTO RepiteTurno
TerminaTurno:
RETURN
DaOrejita:
'--------
PRINT
IF
numero.intentado < numero.pensado THEN
GOTO
DiNumeroEsMayor
END IF
DiNumeroEsMenor:
PRINT "NO, EL
NUMERO PENSADO ES MENOR QUE "; numero.intentado
GOTO
TerminaOrejita
DiNumeroEsMayor:
PRINT "NO, EL
NUMERO PENSADO ES MAYOR QUE"; numero.intentado
TerminaOrejita:
RETURN
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
17 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Pausa:
'----
LET Pausa = 0
RepitePausa:
LET Pausa = Pausa
+ 1
IF Pausa = 40000
THEN GOTO TerminaPausa
GOTO RepitePausa
TerminaPausa:
RETURN
DiSiGanaste:
'----------
CLS
IF numero.intentado
= numero.pensado THEN
GOTO
Adivinaste
END IF
NoAdivinaste:
GOSUB
DiQueNoAdivinaste
GOTO TerminaMensaje
Adivinaste:
GOSUB
DiQueAdivinaste
TerminaMensaje:
RETURN
RepiteJuego:
'----------
PRINT
Decidete:
INPUT "QUIERES
JUGAR OTRA VEZ (S/N)"; decision$
IF decision$
= "S" OR decision$ = "s" THEN RUN 'Juega otra vez.
IF decision$
= "N" OR decision$ = "n" THEN GOTO TerminaDecision
GOTO Decidete 'otra
vez.
TerminaDecision:
RETURN
DiQueAdivinaste:
'--------------
PRINT
"CARAMBA, ADIVINASTE!"
PRINT
PRINT "EL
NUMERO ES"; numero.pensado
PRINT
PRINT "LO
ADINASTE EN "; turno; " TURNOS DE "; 10
PRINT
PRINT "O EN
UN"; INT((turno / 10) * 100); "% "; "DE LOS TURNOS"
RETURN
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ QB306
BLOQUES DE CONSTRUCCION
18 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
DiQueNoAdivinaste:
'----------------
PRINT
"FALLASTE EN ADIVINARLO!"
PRINT
PRINT "EL NUMERO
ES"; numero.pensado
RETURN
TerminaJuego:
'-----------
CLS
PRINT
PRINT "ESPERO
QUE TE HAYAS DIVERTIDO"
PRINT
PRINT "HASTA
LUEGO"
FOR Pausa = 1 TO
6000: NEXT Pausa
RETURN