Site hosted by Angelfire.com: Build your free website today!

ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»      

º            ɻ˻ɻɻ˻ɻÉ˻ɻɻËɻɻɠ ɻ˻ɻɻËÉ»             º      

º            ̼̹ººº»Ì¹Ì¹ºÊºÌ¹º ºººººº  ººÌ¹Ì¹È»ºº              º      

º            Ê ÊÈȼȼÊÈÊÊÊ ÊÊÊȼÊȼ¼È¼  ȹʼÊÊȼÊȼ             º      

ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹      

º É˻ɻ˻»ÉË É»  É»  º                                          º      

º ºÊºººººººº ºº   ¹  º        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!

 

 

 

Arriba     Contenido