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

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

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

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

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

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

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

º ºÊºººººººº ºº   ¹  º        PROGRAMACION ESTRUCTURADA         º      

º Ê Êȼʼȼȼȼ  ȼ  º                                          º      

ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹      

º                                                               º

º                 EN ESTA LECCION APRENDERAS...                 º      

º                                                               º      

º  ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿  º      

º  ³                                                         ³  º

º  ³  þ  La sintaxis de la sentencia CALL ..............  3  ³  º

º  ³  þ  ¨Qu‚ son procedimientos? ......................  5  ³  º

º  ³  þ  La diferencia entre subrutina                       ³  º

º  ³     y procedimiento ...............................  6  ³  º

º  ³  þ  La sintaxis de la sentencia DECLARE SUB .......  7  ³  º

º  ³  þ  La sintaxis de la funci¢n  DECLARE SUB ........  7  ³  º

º  ³  þ  La importancia de los procedimientos ..........  8  ³  º

º  ³  þ  ¨Qu‚ es una variable compartida? .............. 10  ³  º

º  ³  þ  La sintaxis de la funci¢n DIM SHARED .......... 12  ³  º

º  ³  þ  La sintaxis de la funci¢n ASC ................. 16  ³  º

º  ³  þ  La sintaxis de la estructura l¢gica                 ³  º

º  ³     IF/ELSE IF/ELSE/END IF ........................ 20  ³  º

º  ³                                                         ³  º

º  ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ  º

º                                                               º

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

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

º ººÌ¹º Ì º    ¹ººÈ¹ º    PROGRAMACION DESCENDENTE PARTE II     º      

º ȹʼȼȼȼ  ȼȼ Ê º                                          º      

ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ         


 

ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»      

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

º ººÌ¹º Ì º    ¹ººÈ¹ º    PROGRAMACION DESCENDENTE PARTE II     º      

º ȹʼȼȼȼ  ȼȼ Ê º                                          º      

ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ         

 

 

 

             LLENANDO EL PROCEDIMIENTO SeleccionaConv

             ----------------------------------------

 

 

     Para llenar el procedimiento...

 

SUB SeleccionaConv

'-----------------

PRINT "SELECCIONA CONVERSION"

END SUB

 

     ...usaremos  el programa original que hicimos  en  GW-Basic. 

De  modo  que buscamos la subrutina con el mismo nombre en  dicho

programa...

 

190 'Selecciona conversion                                   

200 '---------------------                                   

210 CLS

220 PRINT

230 PRINT "CONVIERTE:"

240 PRINT

250 PRINT "  1)  C a F"

260 PRINT "  2)  F a C"

270 PRINT

280 INPUT "Escoge por n£mero"; T$

290   IF T$ <> "1" AND T$ <> "2" THEN GOTO 190

300 LET T = VAL(T$)

310 RETURN

 

     Estudiando  detenidamente  sus  sentencias,  en   la  misma,

decidimos  quedarnos con todas las instrucciones con excepci¢n de

la  l¡nea 290  que posee el sentencia de control GOTO.   Como  el

QBasic no usa n£meros de l¡nea, no podemos dejar esta instrucci¢n

intacta.     Tenemos  que  cambiarla.    El  que  sigue,   es  el

procedimiento en QBasic con la  mencionada instrucci¢n adaptada a

este int‚rprete...

 

 

 

 

 

 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II            3 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

SUB SeleccionaConv

'-----------------

  CLS

  PRINT

  PRINT "CONVIERTE:"

  PRINT

  PRINT "  1)  C a F"

  PRINT "  2)  F a C"

  PRINT

  INPUT "Escoge por n£mero", T$

    IF T$ <> "1" AND T$ <> "2" THEN CALL SeleccionaConv 'Otra vez.

  LET T = VAL(T$)

END SUB

 

   Comparemos las  dos l¡neas, para que puedas apreciar mejor  el

cambio hecho...

 

  IF T$ <> "1" AND T$ <> "2" THEN CALL SeleccionaConv 'Otra vez.

  290   IF T$ <> "1" AND T$ <> "2" THEN GOTO 190

 

     Observa,  c¢mo la l¡nea de QBasic (la que no tiene n£mero de

l¡nea),   en  vez  de ir de nuevo  al  procedimiento  usando   el

enunciado GOTO conjuntamente con un n£mero de l¡nea,  como ocurre

en la l¡nea de GW-Basic, lo hace "llamando" a esta con su nombre. 

Nota, adem s, que usamos el enunciado CALL y le a¤adimos la frase

'Otra vez, como una l¡nea REM.  Hicimos esto £ltimo para aumentar

la  legibilidad  de la l¡nea.   Veamos como se  leer¡a  la  l¡nea

usando nuestro lenguaje...

 

   IF T$ <> "1" AND T$ <> "2" THEN CALL SeleccionaConv 'Otra vez.

   ÀÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÙ  ÀÂÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÙ

               ³               ³                ³

                           ENTONCES             ³

   Si T$ no es igual a 1             LLAMA al procedimineto

             Y                            SleccionaConv  

    T$ no es igual a 2                       de nuevo    

                                                         

     La  sentencia CALL es opcional,  es decir,  puedes usarlo si

quieres.   Lo hemos usado aqu¡ porque mejora la legibilidad de la

l¡nea.   Su  funci¢n es transferir el control a un  procedimiento

SUB.  Su sintaxis es...

 

                   ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

                   ³ CALL name (argumentlist) ³

                   ÀÄÄÅÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÙ

           ÚÄÄÄÄÄÄÄÄÄÄÙ     ³        ³

           ³            nombre de    ³

  transfiere control  la subrutina   ÀÄ variables o  constantes

          a                             a pasar a la subrutina


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II            4 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

 

              PROCEDIMIENTOS: SUBRUTINAS Y FUNCIONES

              --------------------------------------

 

     Es  preciso que hagamos un par‚ntesis aqu¡,  para informarte

un poco m s lo que significan las subrutinas en QBasic.  En otros

int‚rpretes  Basic,   como  Basica y GW-Basic  puedes  hacer  tus

programas como lo desees.   Claro que,  lo recomendable es que lo

hagas  de  la  forma  en  que  est   escrito  este  programa   de

temperatura hecho en GWBasic o Basica.

    

     Como  te  hemos explicado antes,  este es un  programa  bien

ordenado,  f cil de leer,  cambiar y mejorar.   Pero el  programa

pudo haber sido escrito de la forma desordenada y dif¡cil de leer  

como lo est  el siguiente programa...

    

  ÚÄÄÄÄÄÄÄÄÄÂÄÄ> 10 REM TEMPERATURE CONVERSION           

  ³         ³    20 CLS                                  

  ³         ³    30 INPUT "CONVERT 1) C TO F  2) F TO C";T

  ³         ³ ÚÄ 40 IF T=1 THEN GOTO 70  'Convert C to F.

  ³       ÚÄÅÄÅÄ 50 IF T=2 THEN GOTO 110 'Convert F to C.

  ³       ³ ÀÄÅÄ 60 GOTO 10                              

  ³       ³   À> 70 PRINT :INPUT "ENTER C";C:PRINT       

  ³       ³      80 LET F=9/5*C+32                       

  ³       ³      90 PRINT C;"C";"=";F;"F":PRINT          

  ³  ÚÄÄÄÄÅÄÄÄÄÄ 100 GOTO 150                            

  ³  ³    ÀÄÄÄÄ> 110 PRINT :INPUT "ENTER F";F            

  ³  ³           120 LET C=(F-32)*5/9                    

  ³  ³           130 PRINT                               

  ³  ³           140 PRINT F;"F";"=";C;"C":PRINT         

  ³  ÀÄÄÄÂÄÄÄÄÄ> 150 INPUT "ANOTHER(Y/N)";S$             

  ÀÄÄÄÄÄÄÅÄÄÄÄÄÄ 160 IF S$="Y" OR S$="y" THEN GOTO 10    

         ³       170 IF S$="N" OR S$="n" THEN END        

         ÀÄÄÄÄÄÄ 180 GOTO 150                            

     

     F¡jate, que aunque es un programa corto funciona bien.   Sin

embargo,   al  leerlo,  encontrar s una gran cantidad  de  saltos

(indicados  por  la  flechas)  que dificultan  su  lectura.    Te

imaginas,   entonces,  ­lo dif¡cil que ser¡a leerlo si  fuera  un

programa largo!

 

 

 

 

 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II            5 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     De  ah¡,   lo  importante que es dividir  los  programas  en

peque¤os miniprogramas o  subrutinas para que  lleven  a cabo una

TAREA  espec¡fica.    Y   en ese modo de  PROCEDER,   es  que  se

fundamenta el QBasic...

    

                     ¨QUE SON PROCEDIMIENTOS?

                     ------------------------

 

                 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿         

                 ³          EL QBASIC          ³          

                 ³ DIVIDE UN PROGRAMA COMPLEJO ³         

                 ³      EN PEQUE¥AS TAREAS     ³

                 ³   LLAMADAS PROCEDIMIENTOS.  ³

                 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

     

     Aprendiste en lecciones anteriores,  que el programa primero

queda definido en una RUTINA PRINCIPAL que llama (call)  a  otras

subrutinas  enterrando en ellas los detalles del mismo.   Pues en

QBasic, a cada una de estas tareas espec¡ficas o algoritmos (¨los

recuerdas?) se les llama PROCEDIMIENTOS.   Un procedimiento es un

m‚todo de poner en ejecuci¢n una orden o una tarea ordenadamente. 

As¡  que...  

    

           ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

           ³        El PROCEDIMIENTO EN QBasic       ³

           ³     ES EL METODO POR MEDIO DEL CUAL     ³

           ³ UN CONJUNTO DE INSTRUCIONES SE EJECUTAN ³

           ³          UNA DETRAS DE LA OTRA          ³

           ³         PARA QUE LA COMPUTADORA         ³

           ³    LLEVE A CABO UNA TAREA ESPECIFICA    ³

           ³             CON LA CONDICION            ³ 

           ³     DE QUE ESTE DEBIDAMENTE DEFINIDO    ³

           ³           ANTES DE EJECUTARSE           ³

           ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

     A  estos PROCEDIMIENTOS, el QBasic le asigna un nombre.   De

modo que, con s¢lo llamarlo (call) por su  nombre, ejecutamos las

instrucciones que tiene en su interior. 

 

     Como puedes deducir de su definici¢n, un procedimiento puede

ser  una  SUBRUTINA  o  una  FUNCION  (subrutina  ya  previamente

definada o definida por el programador).   Para que una subrutina

sea   un   procedimiento  tiene  que  estar  definida  antes   de

ejecutarse.    La  funci¢n es de por s¡ un  procedimiento  porque

siempre se define antes de llevarse a cabo.

 

     De modo que...

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II            6 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

            DIFERENCIA ENTRE SUBRUTINA Y PROCEDIMIENTO

            ------------------------------------------

 

              ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

              ³          UN PROCEDIMIENTO          ³

              ³  NO ES EQUIVALENTE A UNA SUBRUTINA ³

              ³         COMO  LA CONOCEMOS         ³

              ³ EN LOS DEMAS INTERPRETES DE BASIC  ³

              ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

    

       Los PROCEDIMIENTOS son  subrutinas  previamente  definidas

que no usan para nada la sentencia RETURN.

    

     As¡  que,  es preciso que diferenciemos un PROCEDIMIENTO  de

una  SUBRUTINA  CONVENCIONAL (la de GW-Basic y Basica).    Aunque

ambas  estructuras  comparten  la  caracter¡stica  de  ejecutarse

cu ntas  veces sean llamadas...

 

         ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

         ³       LAS SUBRUTINAS  CONVENCIONALES,       ³

         ³                 EN QBASIC,                  ³

         ³ SOLO  FUNCIONAN DENTRO DE UN PROCEDIMIENTO, ³

         ³              Y NO FUERA  DE EL.             ³

         ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

     Establecida   la  diferencia,   desde  ahora  en   adelante,

llamaremos a  las  subrutinas convencionales (las  que  usan  las

sentencias GOSUB y RETURN)  subrutinas;  y  a  las subrutinas del

Qbasic, procedimientos  SUB  o meramente procedimientos.  De esta

manera, evitaremos confundir unas con los otros.

 

     Como las subrutinas en QBasic, son procedimentos, tienen que

definirse  antes  de usarse.   Por eso es que cuando creaste  los

procedimientos....

     

     SeleccionaConv

     HazConv

     PideOtraConv

     TerminaPrg

 

     ...viste   c¢mo   estos   se   defin¡an   y   se   colocaban

autom ticamente al  principio del  programa siempre que guardabas

(save)   el  mismo.    Observa abajo,  c¢mo es que  estos  quedan

definidos...

     

     DECLARE SUB SeleccionaConv ()

     DECLARE SUB HazConv ()      

     DECLARE SUB PideOtraConv () 

     DECLARE SUB TerminaPrg ()   


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II            7 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     ...con la sentencia DECLARE SUB (declara subrutina)  seguido

del  nombre  que  los  designa.   Observa  tambi‚n,   el  par  de

par‚ntesis  despu‚s del nombre.   Es aqu¡ donde se colocaran  los

par metros  o  valores que habr  de usar el procedimiento en  sus

instrucciones,   para poder  llevar  a  cabo  la tarea espec¡fica

encomendada.  La sintaxis completa es...

 

              ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

              ³ DECLARE SUB name (parameter list) ³

              ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÙ

                    ÚÄÄÄÄÄÄÄÄÙ     una o m s variables

                 nombre            a ser utilizadas por

             del procedimiento     el procedimiento en

                                   sus instrucciones

                           

     Si  el  procedimiento  a  declararse fuera  una  funci¢n  su

sintaxis ser¡a:

    

        ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

        ³ DECLARE FUNCTION name (parameter list) ³

        ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÙ

                   ÚÄÄÄÄÄÄÄÄÙ     una o m s variables

                 nombre           a ser utilizadas por

             de la funci¢n        la funci¢n en sus

                                  instrucciones      

 

     M s adelante, cuando hablemos de las funciones   abundaremos

m s sobre ellas.  Por el momento, conf¢rmate con la sintaxis dada.

 

     Puedes  llamar  a los procedimientos con  s¢lo  escribir  su

nombre, como puedes ver en estos ejemplos...

 

      IF T$ <> "1" AND T$ <> "2" THEN SeleccionaConv

 

     REM Conversi¢n de temperaturas

     REM --------------------------

     CLS                          

       SeleccionaConv             

       HazConv                    

       PideOtraConv               

       TerminaPrg                 

     END                           

 

     ...o puedes llamarlos tambi‚n usando CALL, as¡...

 

      IF T$ <> "1" AND T$ <> "2" THEN CALL SeleccionaConv

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II            8 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     REM Conversi¢n de temperaturas

     REM --------------------------

     CLS                          

       CALL SeleccionaConv             

       CALL HazConv                    

       CALL PideOtraConv               

       CALL TerminaPrg                 

     END                          

 

     Es  sumamente  importante que te fijes,  que lo que  estamos

actualmente haciendo,  al  convertir el programa  de  temperatura

escrito  originalmente en GWBasic a QBasic, es llevando a cabo la

transici¢n de BASIC a QBasic.   Pero no es solamente eso,  lo que

estamos  haciendo  es  movi‚ndonos  a  UNA  MANERA  DE  PROGRAMAR

SUMAMENTE  AVANZADA  Y QUE PUEDE APLICARSE A OTROS  LENGUAJES  DE

PROGRAMACION.

    

               LA IMPORTANCIA DE LOS PROCEDIMIENTOS

               ------------------------------------

 

     A medida que avancemos en el estudio del QBasic veremos cu n

poderosos resultan ser los procedimientos.  El procedimiento como 

m‚todo para simplificar la programaci¢n,  no solamente en  Basic,

sino  tambi‚n  en  otros lenguajes,  ofrece estas  tres  ventajas

principales:

    

     Primero,   es  un  peque¤o programa dentro  de  un  programa

principal  que  lleva a cabo una tarea espec¡fica  que  se  puede

manejar separadamente.  Tiene una sola entrada y una sola salida. 

Nos  permite  concentrarnos en esa tarea en particular, en vez de

considerar todos los problemas que nos trae el programa completo.

 

     Segundo,  simplifica la lectura de todo el programa haciendo

que este sea modular.  Leamos una vez m s la rutina principal del

programa de temperatura...

 

     REM Conversi¢n de temperaturas

     REM --------------------------

     CLS                          

       SeleccionaConv             

       HazConv                    

       PideOtraConv               

       TerminaPrg                 

     END                          

 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II            9 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     Observa,  c¢mo el  nombre  de cada procedimiento nos  da  un

bosquejo  o resumen de lo que se supone haga el programa.   Nota,

tambi‚n, c¢mo la rutina principal, esconde los detalles del mismo

en los procedimientos.   Si quieres saber m s sobre el  programa,

pues v‚ al procedimiento correspondiente.

    

     Tercero,    con  el  procedimiento  se  evita  repetir   una

instrucci¢n igual o varias instrucciones iguales.

    

     Volviendo al procedimiento...

        

SUB SeleccionaConv

'-----------------

 CLS

 PRINT

 PRINT "CONVIERTE:"

 PRINT

 PRINT "  1)  C a F"

 PRINT "  2)  F a C"

 PRINT

 INPUT "Escoge por n£mero", T$

   IF T$ <> "1" AND T$ <> "2" THEN CALL SeleccionaConv 'Otra vez.

 LET T = VAL(T$)

END SUB

 

     ...la l¡nea...

 

  IF T$ <> "1" AND T$ <> "2" THEN CALL SeleccionaConv 'Otra vez.

 

    ...tiene el prop¢sito de evitar que el programa se interrumpa

de  s£bito si se digitara otros n£meros o caracteres que no  sean

el 1 ¢  el  2.   De ser as¡,  la instrucci¢n  l¢gica  de  control

IF/AND/THEN,  llamar¡a de  nuevo  al procedimiento SeleccionaConv

para que se digite un nuevo n£mero.

 

     Observa  que  utilizamos la variable alfanum‚rica  T$   para

almacenar la selecci¢n hecha.   Pudimos haber usado una  variable

num‚rica para este prop¢sito.  Si hubi‚semos hecho esto £ltimo, y

si hubi‚semos digitado, digamos una letra en vez de un n£mero, el

programa se hubiese detenido con el mensaje...

 

     Redo from start

 

 

 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           10 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     Aunque  el mensaje se interrumpe por un momento  para  luego

empezar con el mensaje INPUT Escoge por n£mero,  lo cierto es que

el programa se interrumpe.  Para evitar esto, usamos una variable

alfanum‚rica (T$)  en vez de una num‚rica (T).   Como la variable

alfa T$, acepta tanto letras como n£meros,  al digitar una letra,

en  lugar  de  un  n£mero,   la misma  es  aceptada  evitando  la

interrupci¢n  del programa,  y  por lo tanto,  el  despliegue  en

pantalla del aviso de error que mencionamos.

    

     Ahora  bien,   si utilizamos T$,  esto no quiere  decir  que

hallamos  resuelto  de  una  vez y por todas el  problema  de  la

interrupci¢n   moment nea  del  programa.    Todav¡a  queda  otra

oportunidad de  que el programa se interrumpa,  y  esta  es,  que

digitemos un n£mero diferente de 1 y 2.  Para evitar esto, es que

usamos  el  enunciado l¢gico estructural  IF/AND/THEN.    En  ‚l,

instruimos a la computadora que vuelva a ejecutar la subrutina si

el n£mero digitado no es ni el 1 ni el 2.

    

     Una  vez resuelto el problema de la no deseada  interrupci¢n

momentanea  del  programa,  nos queda algo m s por hacer,  y   es

convertir el valor alfa de la variable T$  a  un valor  num‚rico,

que  es  lo que queremos.   Por esa raz¢n, es que  convertimos el

valor alfa de la variable alfanum‚rica a un valor n£merico con la

funci¢n VAL  en la l¡nea...

    

     LET T = VAL(T$)

    

                 ¨QUE ES UNA VARIABLE COMPARTIDA?

                 --------------------------------

 

     ...que  luego almacenamos en la variable num‚rica T.   Ahora

ocurre  algo  interesante con el uso de las variables en  QBasic. 

Esta   variable   num‚rica   T  va  ser  usada  en   un   pr¢ximo

procedimiento,   llamado  HazConv.   O  sea,  que dicho valor  no

solamente lo vamos  a usar en este procedimiento solamente (valor

local), sino en otro.  Pues...

    

           ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

           ³          CUANDO USAMOS EL VALOR         ³

           ³ DE UNA VARIABLE NUMERICA O ALFANUMERICA ³

           ³         EN VARIAS PROCEDIMIENTOS        ³

           ³            DECIMOS QUE ES UNA           ³

           ³           VARIABLE COMPARTIDA           ³   

           ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           11 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     Lo  mismo  ocurre  con la variable alfa  T$,   pero  con  la

diferencia  de  que  aunque  la  misma s¢lo va  a  usarse  en  el

procedimiento donde aparece,  si la  opci¢n seleccionada no es el

n£mero 1 o el 2,  el procedimiento vuelve a repetirse.   En  este

caso, tambi‚n la  variable va ser compartida por el procedimiento

mismo.

 

     Ahora bien,  no basta con saber que una variable va a usarse

en  varios procedimientos de un programa,  o  en el procedimiento

mismo, hay que se¤al rselo al int‚rprete QBasic, para que ‚ste lo

use  adecuadamente.    En nuestro ejemplo,  le hicimos  saber  al

QBasic que las variables  T$  y  T la vamos a compartir con otros

procedimentos  (aunque  sea en el procedimiento mismo)   de  esta

forma...     

 

DECLARE SUB SeleccionaConv ()

DECLARE SUB HazConv ()

DECLARE SUB PideOtraConv ()

DECLARE SUB TerminaPrg ()

'

'Variables compartidas:

  DIM SHARED T

  DIM SHARED T$

   

'

REM Conversi¢n  de temperaturas

REM --------------------------

CLS

  SeleccionaConv

  HazConv

  PideOtraConv

  TerminaPrg

END

   

     ...escribiendo...

     

'Variables compartidas:

  DIM SHARED T

  DIM SHARED T$

 

     ...antes  de  la RUTINA PRINCIPAL.   Observa que  el  t¡tulo

'Variables   compartidas:,    nos  dice  que  inmediatamente   se

mencionaran  las  variables  a  ser compartidas entre  todos  los

procedimientos  SUB  o FUNCTION en el programa.  La sintaxis  m s

simple es... 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           12 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

                     ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

                     ³ DIM SHARED variable ³

                     ÀÄÄÅÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÙ

          ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÙ    ³       ÀÄ el nombre de la

   DIMensiona o declara      ³          variable num‚rica

   la variable          COMPARTIDA      o alfanum‚rica

                             ³

   Especifica que la variable va a ser compartida con los

             los procedimientos SUB o FUNCTION

 

     Esta   sintaxis  es  simple.    Hay  otras   versiones   m s

elaboradas. Por el momento conf¢rmate con esta.  A medida que nos

adentremos m s en nuestro curso, te daremos las otras versiones.

 

     Ahora que hemos llenado el procedimiento SeleccionaConv,  el

programa todo, aparecer¡a como sigue....

 

DECLARE SUB SeleccionaConv ()

DECLARE SUB HazConv ()

DECLARE SUB PideOtraConv ()

DECLARE SUB TerminaPrg ()

'

'Variables compartidas:

  DIM SHARED T

  DIM SHARED T$

'

REM  Conversi¢n de temperaturas

REM --------------------------

CLS

  SeleccionaConv

  HazConv

  PideOtraConv

  TerminaPrg

END

 

SUB SeleccionaConv

'-----------------

 CLS

 PRINT

 PRINT "CONVIERTE:"

 PRINT

 PRINT "  1)  C a F"

 PRINT "  2)  F a C"

 PRINT

 INPUT "Escoge por n£mero", T$

   IF T$ <> "1" AND T$ <> "2" THEN CALL SeleccionaConv 'Otra vez.

 LET T = VAL(T$)

END SUB

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           13 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

SUB HazConv

'----------

PRINT "HAZ LA COVERSION"

END SUB

 

SUB PideOtraConv

'---------------

PRINT "PIDE CONVERSION"

END SUB

 

SUB TerminaPrg

'-------------

PRINT "TERMINA PROGRAMA"

END SUB

 

     Lo que nos resta es ejecutar el programa con F5  (run)  para

asegurarnos  que  funciona  bien.   Si  lo  ejecutas,   ver s  lo

siguiente...

 

     CONVIERTE:

 

       1)  C a F

       2)  F a C

 

     Escoge por n£mero 1

     HAZ LA CONVERSION

     PIDE CONVERSION

     TERMINA CONVERSION

 

     ...si  el despliegue en pantalla es como el indicado arriba,

entonces, la subrutina SeleccionaConv que acabaste de llenar est 

funcionando bien.  Esto significa que est s preparado para llenar

la pr¢xima subrutina....

    

                LLENANDO EL PROCEDIMIENTO HazConv

                ---------------------------------

 

SUB HazConv

'----------

PRINT "HAZ LA COVERSION"

END SUB

    

     Como  estamos  llenando los procedimientos del  programa  de

QBasic usando el programa en GW-Basic, buscamos la subrutina...

 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           14 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

330 'Haz la conversi¢n                                       

340 '-----------------                                        

350 IF T = 1 THEN

360   'Convierte C a F:                                      

370      CLS

380      PRINT

390      INPUT "ENTRA C"; C$

400        IF ASC(C$) < 48 OR ASC(C$) > 57 THEN GOTO 330

410      LET C = VAL(C$)

420      PRINT

430      LET F = 9 / 5 * C + 32

440      PRINT C; "C"; "="; F; "F"

450      PRINT

460 END IF

470 IF T = 2 THEN

480   'Convierte F a C:                                      

490      CLS

500      PRINT

510      INPUT "ENTRA F"; F$

520        IF ASC(F$) < 48 OR ASC(F$) > 57 THEN GOTO 330

530      LET F = VAL(F$)

540      PRINT

550      LET C = (F - 32) * 5 / 9

560      PRINT F; "F"; "="; C; "C"

570      PRINT

580 END IF

590 RETURN

    

     ...en dicho  programa.    Despu‚s  de  leer detenidamente la

misma,   deducimos  que  las £nicas l¡neas  que  ameritan  sufrir

cambios son...

    

400        IF ASC(C$) < 48 OR ASC(C$) > 57 THEN GOTO 330

520        IF ASC(F$) < 48 OR ASC(F$) > 57 THEN GOTO 330

590 RETURN

 

     En la l¡nea 400 tenemos que cambiar...

    

        THEN GOTO 330  por  THEN CALL HazConv 'Otra vez.

 

     ...y en la l¡nea 520 tenemos que cambiar...

     

        THEN GOTO 330 por THEN CALL HazConv 'Otra vez.

    

     La l¡nea 590, no la necesitar s, as¡ que ign¢rala.

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           15 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     Pues  bien,  una vez que localizas las l¡neas  que  ameritan

cambio,  vas a llenar el procedimiento HazConv en el programa  de

temperatura de QBasic.   Procede de la misma forma que lo hiciste

al  llenar  el procedimeinto SeleccionaConv.   Despu‚s que  hayas

llenado el mismo, este deber  aparecer as¡...

      

SUB HazConv

'----------

 IF T = 1 THEN

   'Convierte C a F:

    CLS

    PRINT

    INPUT "ENTRA C"; C$

     IF ASC(C$) < 48 OR ASC(C$) > 57 THEN CALL HazConv 'Otra vez.

    LET C = VAL(C$)

    PRINT

    LET F = 9 / 5 * C + 32

    PRINT C; "C"; "="; F; "F"

    PRINT

 END IF

 

 IF T = 2 THEN

   'Convierte F a C:

    CLS

    PRINT

    INPUT "ENTRA F"; F$

     IF ASC(F$) < 48 OR ASC(F$) > 57 THEN CALL HazConv 'Otra vez.

    LET F = VAL(F$)

    PRINT

    LET C = (F - 32) * 5 / 9

    PRINT F; "F"; "="; C; "C"

    PRINT

 END IF

END SUB

    

     Observa,   que  se  est n  utilizando  dos  nuevas variables

alfanum‚ricas llamadas C$  y F$ para almacenar temporeramente los

valores cent¡grados o fahrenheit respectivamente.  Si los valores

son  aceptados,  se pasar n luego a las variable num‚ricas C  ¢ F,

seg£n sea el caso.

    

     Ahora bien, las variables alfas C$ y F$ no solamente se usan

para   almacenar  los  valores  temporeros  arriba   mencionados. 

Tambi‚n  se  est n utilizando para probar si los mismos  son  los

correctos.    De  ah¡ que aparezcan tambi‚n  en  las  estructuras

l¢gicas de control IF/OR/THEN. 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           16 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     En otras palabras, tambi‚n se usar n como base para llamar a

al mismo procedimeinto, en caso de que los valores almacenados en

ellas  no  sean  los  verdaderos.    Por  consiguiente,   debemos

considerarlas  tambi‚n  como  variables compartidas  aunque  sean

compartidas por los mismos procedimientos.   De modo que, debemos

indicarle esto al int‚rprete de QBasic as¡:

 

DECLARE SUB SeleccionaConv ()

DECLARE SUB HazConv ()

DECLARE SUB PideOtraConv ()

DECLARE SUB TerminaPrg ()

'

'Variables compartidas:

  DIM SHARED T

  DIM SHARED T$

  DIM SHARED C$

  DIM SHARED F$

'

REM Conversi¢n de temperaturas

REM --------------------------

CLS

  SeleccionaConv

  HazConv

  PideOtraConv

  TerminaPrg

END

 

     Como  los valores de las variables num‚ricas C y F se van  a

usar  s¢lo  en  este  procedimiento  (valores  locales),   no  es

necesario  que los  consideremos como variables compartidas,   de

modo  que no se a¤aden bajo el t¡tulo de 'Variables  compartidas,

en la RUTINA PRINCIPAL.

 

     Consideremos ahora las l¡neas...

 

     IF ASC(C$) < 48 OR ASC(C$) > 57 THEN CALL HazConv 'Otra vez.

     IF ASC(F$) < 48 OR ASC(F$) > 57 THEN CALL HazConv 'Otra vez.

    

     En ambas l¡neas, la funci¢n ACS significa...

 

   funci¢n ASC extrae ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ cualquier   

   c¢digo ASCII   ÄÄÄÄÅ ASC(stringexpression$) ÅÄ expresi¢n  

   del 1er caracter   ÀÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÙ de cadena   

   de una cadena            ASC ("a12")                      

                            ÀÄÄÄÄÂÄÄÄÄÙ                      

                                9 7                          

     a  c¢digo 97                ÀÄ c¢digo del primer caracter

                                  en "a12"                 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           17 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     EL  c¢digo  ASCII  (American Standard Code  for  Information

Interchange)  contiene el n£mero de c¢digo para cualquier s¡mbolo

que  usamos.    Estos van del n£mero 000  al n£mero 127  para  el

c¢digo regular, y del 128 hasta el 255  para el c¢digo extendido. 

El  QBasic,   en su secci¢n Help tiene todos los c¢digos.    Para

obtenerlos, presiona ALT, luego H,  selecciona Contents y bajo la

secci¢n Quick References, selecciona ASCII Character Codes.

      

     Algunos ejemplos son:

    

          032 sp   048 0   064 @   080 P   096 `   112 p

          033 !    049 1   065 A   081 Q   097 a   113 q 

          034 "    050 2   066 B   082 R   098 b   114 r 

          035 #    051 3   067 C   083 S   099 c   115 s 

          036 $    052 4   068 D   084 T   100 d   116 t 

          037 %    053 5   069 E   085 U   101 e   117 u 

          038 &    054 6   070 F   086 V   102 f   118 v 

          039 '    055 7   071 G   087 W   103 g   119 w 

          040 (    056 8   072 H   088 X   104 h   120 x 

          041 )    057 9   073 I   089 Y   105 i   121 y

          042 *    058 :   074 J   090 Z   106 j   122 z

          043 +    059 ;   075 K   091 [   107 k   123 {

          044 ,    060 <   076 L   092 \   108 l   124 | 

          045 -    061 =   077 M   093 ]   109 m   125 }

          046 .    062 >   078 N   094 ^   110 n   126 ~ 

          047 /    063 ?   079 O   095 _   111 o   127  

 

     Observa que los c¢digos ASCII(aski) del 0 al 9 son:

 

          048 0   053 5

          049 1   054 6

          050 2   055 7

          051 3   056 8

          052 4   057 9

                      

     Nota que cualquier caracter cuyo c¢digo sea...

    

      menor que 48 o mayor que 57        

          <     48       >     57

 

     ...no  es un n£mero. 

 

     Con esto en mente,  y  si suponemos que C$="a12", veamos que

significa la siguiente l¡nea l¢gica...

 

 

 

 

 


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           18 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

  IF ASC(C$) < 48 OR ASC(C$) > 57 THEN CALL HazConv 'Otra vez.

         ÀÄ¿             ÀÄÄ¿

           ³                ³

  IF ASC("a12")<48 OR ASC("a12")>57 THEN CALL HazConv 'Otra vez.

  ÀÄÄÄÄÄÄÂÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÂÄÄÄÄÄÄÄÙ  ³   ÀÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÙ

  Si el c¢digo ASCII      ³      ENTONCES  LLAMA el procedimiento

  del primer caracter     ³                HazConv otra vez.

  de "a12" es menor       ³

  que 48                  ³

                   O el c¢digo ASCII

                   del primer caracter

                   de "a12" es mayor

                   que 57

 

     Como en  "a12"   el primer caracter es a  y  su c¢digo es 97

(mayor que 57), no pasa la prueba, y por lo tanto, el valor de C$

es  rechazado y el procedimiento HazConv es vuelto a llamar  para

entrar un nuevo valor.

    

     Como  puedes  apreciar,  esta estructura l¢gica  IF/OR/THEN,

prueba  los valores almacenados en C$.   Si el primer caracter de

dicho valor no es un n£mero, el mismo es rechazado y se volver  a

llamar el procedimiento HazConv para pedir un nuevo valor.    Con

esto,    tambi‚n  se  evita,   que  el  programa  se   interrumpa

s£bitamente.

    

     La l¡nea...

    

     IF ASC(F$) < 48 OR ASC(F$) > 57 THEN CALL HazConv 'Otra vez.

    

     ...cumple  la  misma funci¢n que la anterior pero usando  la

variable F$.

 

              LLENANDO EL PROCEDIMIENTO PideOtraConv

              --------------------------------------

 

     Continuando  con el llenado de las subrutinas en el programa

de  temperatura  QBasic  a partir  del  programa  de  temperatura

GWBasic, consideremos ahora la subrutina...

 

610 'Pide otra conversi¢n                                     

620 '--------------------                                    

630 INPUT "OTRA CONVERSION (S/N)"; S$

640   IF S$ = "S" OR S$ = "s" THEN GOTO 100 'Run program.

650   IF S$ = "N" OR S$ = "n" THEN GOTO 670

660 GOTO 610

670 RETURN

 

      


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           19 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

     Esta es la forma en que la traducimos en QBasic:

 

SUB PideOtraConv

'---------------

 LOCATE 12, 1: PRINT "                                         "

 LOCATE 12, 1: PRINT "Otra conversi¢n (S/N)";

 INPUT S$

 

   IF S$ = "S" OR S$ = "s" THEN

     RUN 'programa otra vez.

   END IF

 

   IF S$ <> "S" AND S$ <> "s" AND S$ <> "N" AND S$ <> "n" THEN

     CALL PideOtraConv

   END IF

 

END SUB

 

     Como puedes ver, ha habido cambios "pro forma",  cambios  de

forma pero no substanciales.   Puedes traducir la subrutina  como

tu quieras.   Lo importante es,  que el procedimiento resultante,

tenga una sola entrada y una sola salida.

 

     Nota,  c¢mo  en la segunda estructura IF/THEN  se prueba  el

valor de S$  para ver si sus valores son S y s o N y n.   Si  los

valores no  son  estos,  se repite el procedimiento PideOtraConv. 

Recuerda que CALL es opcional.  Lo usamos aqu¡ porque quisimos.

 

     Otra manera de hacer esta prueba es la siguiente versi¢n del

mismo procedimiento:

 

SUB PideOtraConv

'---------------

 LOCATE 12, 1: PRINT "                                              "

 LOCATE 12, 1: PRINT "Otra conversi¢n (S/N)";

 INPUT S$

   IF S$ = "S" OR S$ = "s" THEN

     RUN 'programa otra vez.

   ELSEIF S$ <> "S" AND S$ <> "s" AND S$ <> "N" AND S$ <> "n" THEN

       CALL PideOtraConv

   ELSE

   END IF

END SUB

 

     Nota,   c¢mo en  una sola estructura  l¢gica  IF/THEN  hemos

incluido todas las instrucciones  que  en la versi¢n anterior nos

tom¢ dos estructuras l¢gicas IF/THEN.   A  pesar de eso,  creemos

que la primera versi¢n,  la de las dos estructuras IF/THEN es m s

f cil de entender.  La sintaxis para esta £ltima estructura es...


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           20 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

                 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

                 ³ IF condition1 THEN         ³

                 ³     [statementblock-1]     ³

                 ³ [ELSEIF condition2 THEN    ³

                 ³     [statementblock-2]]... ³

                 ³ [ELSE                      ³

                 ³     [statementblock-n]]    ³

                 ³ END IF                     ³

                 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

    

     Antes de comenzar  a llenar el £ltimo procedimeiento de este

programa,  recuerda que tienes que DECLARAR LA VARIABLE S$   COMO

VARIABLE COMPARTIDA (SHARED) en la RUTINA PRINCIPAL en la secci¢n

de 'Variables compartidas:, as¡:

     

DECLARE SUB SeleccionaConv ()

DECLARE SUB HazConv ()

DECLARE SUB PideOtraConv ()

DECLARE SUB TerminaPrg ()

'

'Variables compartidas:

  DIM SHARED T

  DIM SHARED T$

  DIM SHARED C$

  DIM SHARED F$

  DIM SHARED S$

'  

REM  Conversi¢n de temperaturas

REM --------------------------

CLS

  SeleccionaConv

  HazConv

  PideOtraConv

  TerminaPrg

END

    

               LLENANDO EL PROCEDIMIENTO TerminaPrg    

               ------------------------------------

 

     He aqu¡ como traducimos la subrutina TerminaPrg del programa

GWBasic  al  procedimiento  con el mismo nombre  en  el  programa

esquel‚tico  en QBasic...

    

690 'Termina programa                                        

700 '----------------                                        

710 CLS

720 PRINT "EL PROGRAMA SE ACABO"

730 PRINT

740 RETURN


 

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ QB304          PROGRAMACION DESCENDENTE PARTE II           21 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 

 

SUB TerminaPrg

'-------------

  CLS

  PRINT : PRINT : PRINT

  PRINT

  PRINT "                  EL PROGRAMA HA TERMINADO"

  PRINT

  PRINT "               SI DESEAS EJECUTARLO OTRA VEZ"

  PRINT

  PRINT "                        PRESIONA F5"

END SUB

 

     F¡jate,   que  el procedimiento,  lo  hemos  elaborado  m s. 

Puedes  hacerlo como te plazca,  siempre  y cuando cumpla con  su

cometido   que  es  el  desplegar  un  mensaje  que  indique   la

terminaci¢n del programa.

 

     Has aprendido en esta lecci¢n c¢mo traducimos un programa de

GWBasic  a  QBasic.    Naturalmente,  que  como  el  programa  de

temperatura   en  GWBasic  estaba  hecho  bien   estructuralmente

hablando, la traducci¢n a QBasic se nos hizo sumamente sencilla.

    

     En la pr¢xima lecci¢n escribiremos otro programa en  QBasic,

y  lo  haremos a partir de cero,  esto es,  desde que se crea  el

mismo hasta que se termina.

 

     Pero antes de despedirnos,  te daremos a continuaci¢n varias

versiones  del  mismo  programa  de  temperatura.    El  programa

original escrito en GWBasic,  y  dos versiones en QBasic:  la que

hiciste  en  esta  lecci¢n  y otra versi¢n  del  mismo  programa. 

Estudia todas las versiones cuidadosamente.   Si puedes hacer una

propia, ­magn¡fico!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

                     PROGRAMA DE TEMPERATURA

                   VERSION ORIGINAL EN GWBASIC

 

100 'Conversi¢n de temperaturas                              

110 '--------------------------                              

120 CLS

130   GOSUB 190  'Selecciona conversi¢n.                     

140   GOSUB 330  'Haz la conversi¢n.                         

150   GOSUB 610  'Pide otra conversi¢n.                      

160   GOSUB 690  'Termina programa.                          

170 END

180 '                                                        

190 'Selecciona conversion                                   

200 '---------------------                                   

210 CLS

220 PRINT

230 PRINT "CONVIERTE:"

240 PRINT

250 PRINT "  1)  C a F"

260 PRINT "  2)  F a C"

270 PRINT

280 INPUT "Escoge por n£mero"; T$

290   IF T$ <> "1" AND T$ <> "2" THEN GOTO 190

300 LET T = VAL(T$)

310 RETURN

320 '                                                        

330 'Haz la conversi¢n                                        

340 '-----------------                                       

350 IF T = 1 THEN

360   'Convierte C a F:                                      

370      CLS

380      PRINT

390      INPUT "ENTRA C"; C$

400        IF ASC(C$) < 48 OR ASC(C$) > 57 THEN GOTO 330

410      LET C = VAL(C$)

420      PRINT

430      LET F = 9 / 5 * C + 32

440      PRINT C; "C"; "="; F; "F"

450      PRINT

460 END IF

470 IF T = 2 THEN

480   'Convierte F a C:                                      

490      CLS

500      PRINT

510      INPUT "ENTRA F"; F$

520        IF ASC(F$) < 48 OR ASC(F$) > 57 THEN GOTO 330

530      LET F = VAL(F$)

540      PRINT

550      LET C = (F - 32) * 5 / 9

560      PRINT F; "F"; "="; C; "C"

570      PRINT

580 END IF

590 RETURN

600 ' 


 

610 'Pide otra conversi¢n                                    

620 '--------------------                                    

630 INPUT "OTRA CONVERSION (S/N)"; S$

640   IF S$ = "S" OR S$ = "s" THEN GOTO 100

650   IF S$ = "N" OR S$ = "n" THEN GOTO 670

660 GOTO 610

670 RETURN

680 '                                                        

690 'Termina programa                                        

700 '----------------                                        

710 CLS

720 PRINT "EL PROGRAMA SE ACABO"

730 PRINT

740 RETURN

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

               PROGRAMA DE TEMPERATURA ESQUEMATICO

                            EN QBASIC

 

DECLARE SUB SeleccionaConv ()  

DECLARE SUB HazConv ()

DECLARE SUB PideOtraConv ()   

DECLARE SUB TerminaPrg ()

'

REM Conversi¢n de temperaturas

EM --------------------------

CLS

  SeleccionaConv

  HazConv

  PideOtraConv

  TerminaPrg

END

 

SUB SeleccionaConv

'-----------------

PRINT "SELECCIONA CONVERSION"

END SUB

 

SUB HazConv

'----------

PRINT "HAZ LA COVERSION"

END SUB

 

SUB PideOtraConv

'---------------

PRINT "PIDE CONVERSION"

END SUB

 

SUB TerminaPrg

'-------------

PRINT "TERMINA PROGRAMA"

END SUB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

              VERSION 1 DEL PROGRAMA DE TEMPERATURA

                            EN QBASIC

 

 

DECLARE SUB SeleccionaConv ()

DECLARE SUB HazConv ()

DECLARE SUB PideOtraConv ()

DECLARE SUB TerminaPrg ()

'

'Variables compartidas:

  DIM SHARED T

  DIM SHARED T$

  DIM SHARED C$

  DIM SHARED F$

  DIM SHARED S$

'

REM Conversi¢n de temperaturas

REM --------------------------

CLS

  SeleccionaConv

  HazConv

  PideOtraConv

  TerminaPrg

END

 

SUB HazConv

'----------

 IF T = 1 THEN

   'Convierte C a F:

    CLS

    PRINT

    INPUT "ENTRA C"; C$

      IF ASC(C$) < 48 OR ASC(C$) > 57 THEN CALL HazConv 'Otra vez.

    LET C = VAL(C$)

    PRINT

    LET F = 9 / 5 * C + 32

    PRINT C; "C"; "="; F; "F"

    PRINT

 END IF

 

 IF T = 2 THEN

   'Convierte F a C:

    CLS

    PRINT

    INPUT "ENTRA F"; F$

      IF ASC(F$) < 48 OR ASC(F$) > 57 THEN CALL HazConv 'Otra vez.

    LET F = VAL(F$)

    PRINT

    LET C = (F - 32) * 5 / 9

    PRINT F; "F"; "="; C; "C"

    PRINT

 END IF

END SUB

 


 

SUB PideOtraConv

'---------------

 LOCATE 12, 1: PRINT "                                              "

 LOCATE 12, 1: PRINT "Otra conversi¢n (S/N)";

 INPUT S$

 

   IF S$ = "S" OR S$ = "s" THEN

     RUN 'programa otra vez.

   END IF

 

   IF S$ <> "S" AND S$ <> "s" AND S$ <> "N" AND S$ <> "n" THEN

     CALL PideOtraConv

   END IF

 

END SUB

 

SUB SeleccionaConv

'-----------------

 CLS

 PRINT

 PRINT "CONVIERTE:"

 PRINT

 PRINT "  1)  C a F"

 PRINT "  2)  F a C"

 PRINT

 INPUT "Escoge por n£mero"; T$

   IF T$ <> "1" AND T$ <> "2" THEN CALL SeleccionaConv 'Otra vwz.

LET T = VAL(T$)

END SUB

 

SUB TerminaPrg

'-------------

 CLS

 PRINT : PRINT : PRINT

 PRINT

 PRINT "                  EL PROGRAMA HA TERMINADO"

 PRINT

 PRINT "               SI DESEAS EJECUTARLO OTRA VEZ"

 PRINT

 PRINT "                        PRESIONA F5"

END SUB

 

 

 

 

 

 

 

 

 

 

 

 

 


 

              VERSION 2 DEL PROGRAMA DE TEMPERATURA

                            EN QBASIC

 

 

DECLARE SUB SeleccionaConv ()

DECLARE SUB HazConv ()

DECLARE SUB PideOtraConv ()

DECLARE SUB TerminaPrg ()

'

'Variables compartidas:

  DIM SHARED T, T$, C$, F$, S$

'

REM Conversi¢n de temperaturas

REM --------------------------

CLS

  SeleccionaConv

  HazConv

  PideOtraConv

  TerminaPrg

END

 

SUB HazConv

'----------

 IF T = 1 THEN

   'Convierte C a F:

    CLS

    PRINT

    INPUT "ENTRA C"; C$

      IF ASC(C$) < 48 OR ASC(C$) > 57 THEN

        CALL HazConv 'Otra vez.

      END IF

    LET C = VAL(C$)

    PRINT

    LET F = 9 / 5 * C + 32

    PRINT C; "C"; "="; F; "F"

    PRINT

 END IF

 

 IF T = 2 THEN

   'Convierte F a C:

    CLS

    PRINT

    INPUT "ENTRA F"; F$

      IF ASC(F$) < 48 OR ASC(F$) > 57 THEN

        CALL HazConv 'Otra vez.

      END IF

    LET F = VAL(F$)

    PRINT

    LET C = (F - 32) * 5 / 9

    PRINT F; "F"; "="; C; "C"

    PRINT

 END IF

END SUB

 


 

SUB PideOtraConv

'---------------

 LOCATE 12, 1: PRINT "                                         "

 LOCATE 12, 1: PRINT "Otra conversi¢n (S/N)";

 INPUT S$

 

   IF S$ = "S" OR S$ = "s" THEN

     RUN 'programa otra vez.

   END IF

 

   IF S$ <> "S" AND S$ <> "s" AND S$ <> "N" AND S$ <> "n" THEN

     CALL PideOtraConv

   END IF

END SUB

 

SUB SeleccionaConv

'-----------------

 CLS

 PRINT

 PRINT "CONVIERTE:"

 PRINT

 PRINT "  1)  C a F"

 PRINT "  2)  F a C"

 PRINT

 INPUT "Escoge por n£mero"; T$

   IF T$ <> "1" AND T$ <> "2" THEN

     CALL SeleccionaConv 'Otra vez.

   END IF

 LET T = VAL(T$)

END SUB

 

SUB TerminaPrg

'-------------

 CLS

 PRINT : PRINT : PRINT

 PRINT

 PRINT "                  EL PROGRAMA HA TERMINADO"

 PRINT

 PRINT "               SI DESEAS EJECUTARLO OTRA VEZ"

 PRINT

 PRINT "                        PRESIONA F5"

END SUB

 

 

Arriba     Contenido