Está en la página 1de 77

!

I9 Hora 7

L¡srnoo 7.5 coNT¡ruunclóru

26: LoOP WHILE (userGuess$ <> compAns$) ' TermÍnar cuando Ia letra
' es igual
27i
28: ' El usuario adivinó la letra, avísale
29: PRINT tr*** iFelicidades! iEs Ia letna correctat"
30: PRINT " Le IIevó " ; tries; " intentos , "
31: END

Microsoft se ganó el favor de la industria con su compilador QuickBASIC. Finalmente había


un compilador de BASIC (no sólo un compilador, sino también un editor integrado de panta-
lla completa). La mayoría de las versiones de BASIC anteriores a QuickBASIC, incluían su
propio editor de línea o editor de pantalla completa limitado. Mucha gente piensa que el edi-
tor integrado de pantalla completa de Microsoft jugó un papel tan importante en el éxito de
QuickBASIC como en las mejoras del mismo lenguaje. Microsoft estableció su liderazgo en
el campo de BASIC cuando infrodujo QBasic, una versión interpretada de BASIC que ahora
viene con todas las versiones de MS-Dos. Si tiene Ms-Dos 5.0 o uno posterior, tiene eBa-
sic. La clara cantidad de máquinas en todo el mundo que cuentan con éste (casi todas las PC
usan alguna versión de MS-DOS), significa que QBasic estrí disponible para cualquiera que
cuente con una PC. QBasic es el Ienguaje preferido de la mayoría de los programadores nova-
tos y este libro no es la excepción. Comenzará a aprender QBasic en la siguiente lección.

Una de las principales virtudes de BASIC es su manejo de datos de cadena. Los datos de ca-
dena consisten en caracteres, palabras y oraciones, a diferencia de los datos numéricos. BA-
SIC tiene muchas rutinas integradas que pueden alinear cadenas a la izqüerda o a la derecha
y seleccionar uno o varios caracteres de una cadena. Estas capacidades de manejo de cadenas
no son tan sencillas en C, Pascal, COBOL o FORTRAN como lo son en BASIC.

Programación gráfica con V¡sual Basic


Tal vez el lenguaje de programación más impresionante de todos sea Visual Basic. Visual
Basic en realidad es menos un lenguaje de programación y más un conjunto de controles grá-
ficos con los que puede construir programas interpretados o compilados en BASIC. Visual
Basic es un ambiente de programación de Windows con el que se pueden escribi¡ programas
para Windows. Cuando se inicia Visual Basic, vemos la pantalla que aparece en la figura 7.1.
Como puede observar en esta pantalla, el término visual es una descripción muy precisa.

No deje que la aparente disposición aleatoria de la pantalla de Visual Basic le asuste. A medi-
da que aprenda sobre Visual Basic durante la hora 14, entenderámejor la relación entre las
distintas partes de la pantalla y conocerá modos para hacer que la pantalla tenga la apariencia
que usted prefiera. Visual Basic le permite reacomodar y esconder ciertas partes de la pantalla
para que pueda personalizar su apariencia y "tacto" y darle el aspecto que más le satisfaga.
Lenguajes de programación: la época moderna 139 i
I

Frcunn 7.1
La pantalla inicial de
Visual Basic abre las
ventanas necesorias
para la programación
grdfica.

Los programas en Windows son difíciles de escribi¡, tanto para programadores principiantes
como para avanzados no acostumbrados a este ambiente. Además de esta hora, aprenderá
acerca de la codificación para el ambiente de programación en Windows durante la hora 13,
"Consideraciones de programación en Windows".

La codificación de un programa Windows desde la nada, especialmente para los programado-


res novatos, fue una pesadilla hasta que llegó Visual Basic. Visual Basic se encarga de las mi-
nucias de la aplicación Windows, permitiendo al usuario ajustar el tamaño de la ventana del
programa, seleccionar de un menú, hacer clic con el ratón y pulsar una tecla. Visual Basic
asegura que la tarea apropiada se realice cuando sea solicitada.

Visual Basic es uno de los primeros ambientes de programación de Windows que ofrece tanto
un intérprete como un compilador. Puede aprender Visual Basic y probar sus programas en el
modo interpretado y luego compilarlos para su distribución a los usuarios. Además del soft-
ware relacionado con Windows que queda en memoria durante la operación de Windows, la
administración que lleva a cabo Windows de manera continua puede hacer lento un programa
en Visual Basic. Debe supervisar varias actividades que un programa MS-DOS no realizaba
en la época anterior a Windows. El compilador de Visual Basic no apareció sino hasta la ver-
sión 5, por lo que no tuvo mayor impacto en los departamentos de programación hasta que
Microsoft liberó Visual Basic como intérprete y compilador.

Visual Basic fue la primera herramienta de programación de Windows que permitió al princi-
piante crear programas sencillos para Windows sin conocer C. Antes de Visual Basic, la ma-
yoía de los programas se escribían en C mediante el Kit de desarrolladores de software
(SDK) de Microsoft. El único requisito para aprender Visual Basic es conocer el funciona-
miento general de las aplicaciones en Windows. Si está familiarizado con una o dos aplicacio-
nes de Windows, como el procesador de texto Word, sabe todo lo necesario para comenzar a
escribir progmmas en Visual Basic.

Orientación gráfica
Hay una división entre algunos bandos de programadores sobre si se debe usar Visual Basic o
algrún lenguaje mas "serio", como C++, en el ambiente Windows. Debido a que el sistemaVi-
sual Basic realiza una buena parte del trabajo del programador, éste üene que preocuparse por
menos. Sin embargo, también tiene menos control sobre el programa final del que podía te-
ner si lo escribiese con un lenguaje como C++. El movimiento hacia Visual Basic, alejrándose
de lenguajes de Windows como Visual C++, comprueba que Visual Basic efectivamente
se puede us¿tr con éxito y se puede tomar en serio como un sistema de programación de
Windows.

No caiga en la trampa de pensar que los ambientes de programación como Visual Basic están
orientados a objetos, aunque tales lenguajes funcionan con objetos en la pantalla. Visual Basic
L. La lección de la hora 16
es de orientación gráfica pero no es un lenguaje orientado a objetos.
explica qué es lo que determina si un programa está orientado a objetos o no.
t,

Los juegos son la excepción


Entre en cualquier tienda de computación y busque versiones de software para MS-DOS.
Simplemente no las encontrará. Todo lo que se vende hoy para PC requiere Windows y la
mayor parte requiere Windows 95. Una importante excepción que podrá hacerle preguntarse
un par de cosas son losjuegos. Muchosjuegos populares y actuales no operan bajo el am-
biente de Windows, sino que toman el control del sistema, e incluso lo reinician en un
ambiente exclusivamente de DOS antes de que se ejecuten.

El problema con los juegos es su gran hambre de recursos de computación. No sólo deben en-
cargarse de los requisitos normales de programación, como ciflculos, archivos en disco e inte-
racción con el usuario, sino también deben ofrecer rápidas acciones con video a color y soni-
do. La capa extra que representa Windows entre el código y el hardware hace que los juegos
sean lentos. A pesar de que Windows es más eficiente que nunca, que el hardware es más rá-
pido y que Microsoft ofrece en Windows nuevas interfaces con programación multimedia,
muchos fabricantes de juegos prefieren pasar por alto el ambiente Windows y escribir nueva-
mente en el modo nativo de la máquina.

La mayor parte de estos fabricantes escriben en C, C++ o lenguaje ensamblador para lograr la
eficiencia que requieren sus juegos. A pesar de que Windows es por mucho el ambiente más
popular en la actualidad, los lenguajes no basados en Windows seguirán teniendo demanda
durante algún tiempo.
Lenguajes de programación: la época moderna 141

¿Qué lenguaje es mejor?


Existen tantos lenguajes de programación en la actualidad que podría preguntarse cuál es el
mejor. Es difícil determinar la respuesta, mas no imposible. ¿Qué música es mejor? ¿eué pe-
riodo del arte es mejor? ¿Qué auto es mejor? La respuesta es un contundente "depende...".
Determinar un mejor lenguaje de programación depende de la tarea se que tiene que llevar
a cabo.

si realmente qüere saber qué lenguaje de programación es el mejor para aprender primero,
este libro ya tiene la respuesta. BASIC (o preferiblemente su derivación, QBasic) es el mejor
lenguaje de propósito general para los programadores novatos. Esta es la opinión del autor,
respaldada por unos 3 000 estudiantes de nivel universitario a los que ha enseñado. La lección
de la siguiente hora comienza a desarrollar sus habilidades de programación enseñándole
QBasic.

La mayoría de la gente necesitará más poder del que puede ofrecer QBasic. Una vez que do-
minen un lenguaje de introducción como QBasic, muchas personas cambiarán a Visual Basic,
C o C++. Los empleos actuales reqüeren que usted aonozca C, C++ o Visual Basic y CO-
BOL en los departamentos que trabajan con mainframes. Si quisiera trabajar en organizacio-
nes grandes programando mainframes, deberá aprender COBOL tan pronto como crea estat
listo (una vez que se sienta seguro con QBasic). Sin embargo, la mayoría de la gente tiene ac-
ceso a microcomputadoras y es agradable aprender a programar en PC, pues ofrece una reali-
mentación rápida y se puede hacer en casa. Como aprendió antes en este capítulo, c y C++
son lenguajes de gran demanda, y Visual Basic esüá teniendo también un fuerte impacto en los
departamentos corporativos de programación.

Los lenguajes que conozca determinarán el lenguaje en que programará. Si uabaja en un pro-
yecto urgente (como casi todos los proyectos de procesamiento de datos), no tendrá tiempo de
dominar un lenguaje nuevo por lo que, si todo lo que conoce es Visual Basic, es muy proba-
ble que ese sea el lenguaje que usará.

Es difícil determinar cu¡íntos lenguajes de programación debe conocer un "buen" programa-


dor. Algunos programadores con buen sueldo y grandes habilidades únicamente conocen un
lenguaje, aunque la mayoría maneja varios. Descubrirá que prefiere algunos lenguajes sobre
otros y se volverá experto en apenas uno o dos, aunque tal vez aprenda varios más con los
años.

Muchos factores determinan el lenguaje que emplea una compañía para escribir una aplica-
ción en particular. La compañía tal vez sólo tenga un par de compiladores. De ser así, sus
aplicaciones las escribirá con alguno de ellos. Los compiladores de mainframe suelen costar
miles de dólares; por tanto, es difícil que las empresas vayan de lenguaje en lenguaje en bus-
ca del mejor. Es frecuente que se haga que funcione el lenguaje que se ha comprado.
El tipo de aplicación también ayuda a determinar el mejor lenguaje a usar. Una aplicación
científica en mainframe siempre se haría mejor en FORTRAN, §i hubiese que decidir entre
éste y COBOL. Y COBOL serla el lenguaje de mainframe apropiado para procesar una gran
canüdad de transacciones comerciales.

Por lo regulan las compañías prefieren los Ienguajes de programación comu-


nes que los no conocidos. Por ejemplo, hay un lenguaje de programación
orientada a objetos llamado Actor que es muy bueno, pero muy pocos pro-
gramadores lo conocen. C++ sería una selección mucho más sabia si fuera
necesario que otro diese mantenimiento al programa en un futuro.

Recuerde siempre que los lenguajes de programación de alto nivel son de propósito general,
esto es, que sirven para casi cualquier aplicación. COBOL podrla ser una mala selección para
aplicaciones cienlficas, pero puede funcionar si no se cuenta con ofra opción.

Use lo que use, la programación proporciona grandes satisfacciones y diversión. prepárese


para engrosar las filas de los programadores. Dé vuelta a la página para dar inicio a la lección
de la hora 8 y comenzar a escribir programas de inmediato.

Resumen
A medida que maduran, los lenguajes de programación se vuelven más fáciles de usar. La
mayor parte de los lenguajes actuales incluye ambientes integrados y ofrece eI manejo de
programación estructurada. Las interfaces griíficas de usuario, como Windows de Microsoft,
requieren herramientas de programación más complejas, pero los lenguajes fáciles de usar
como Visual Basic, simplifican el ingreso (hasta para los novatos) al mundo de la programa-
ción griáfica.

La popularidad de los lenguajes de programación cambia con el tiempo. Pascal, el lenguaje


preferido para las PC a principios de la década de los 80, ahora sirve como herramienta para
el aprendizaje de técnicas estructuradas en las escuelas. C y C++ prácticamente invadieron la
programación de las PC durante las décadas de los 80 y 90, aunqueVisual Basic ahora está
desplazando un poco a esos lenguajes, gracias a sus raíces en BASIC que lo hacen un lengua-
je más sencillo de aprender y usar.

La siguiente hora le enseña el lenguaje eBasic.


Lenguajes de programación: la época moderna 143
|

Preguntas y respuestas
P ¿Cuál es más poderoso, Visual Basic o C++?
R Hasta los gurús de Visual Basic estarán de acuerdo en que C++ es el lenguaje miís po-
deroso desde donde se le vea. Aunque es posible escribir cualquier progama de Win-
dows en Visual Basic, el lenguaje C++ es más flexible y se integra mejor con el
ambiente Windows. Los compiladores de C++ basados en Windows, como Visual C++,
permiten que los programadores de C++ creen los programas de Windows más avanza-
dos que hay en el mercado.
P ¿Por qué aprender Visuat Basic si Visual C++ es mejor?
R Con el poder de Visual C++ viene mucha responsabilidad. C++ es más difícil de apren-
der que Visual Basic. Ademris, su mantenimiento es más compücado en muchos casos.
Es verdad que, si se codifica de manera adecuada con la ayuda de su tecnología de pro-
gramación orientada a objetos (que aprenderá durante la hora 16), un programa en C++
será más fácil de mantener que uno en Visual Basic. Si¡ embargo, la faciüdad de uso y
los constructores más sencillos de Visual Basic, permiten una programación ayatzada
de Windows a los programadores novatos e intermedios, así como a los departamentos de
programación que desean elaborar programas de fácil mantenimiento.

Taller
Las preguntas del cuestionario se presentan para una mayor comprensión. Vea las respuestas
en el apéndice A.

Cuestionario
1. ¿Qué lenguaje parece ofrecer el mejor manejo de las técnicas de programación esüuc-
turada?
2. ¿Qué lenguaje sustituyó a Pascal como el preferido en las PC?
3. ¿Por qué fueron populares tanto Pascal como C en las primeras PC?
4. ¿Cómo se llama el lenguaje C mejorado?
5. ¿Cómo compensan C y C++ su pequeño vocabulario de comandos?
6. ¿Qué lenguaje fue el primero en ofrecer programación orientada a objetos?
7. Verdadero o falso: Visual Basic ofrece tanto un intérprete como un compilador.
8. ¿Qué lenguaje sirvió como lenguaje de programación original de Windows?
9. ¿Dentro de qué ambiente, Windows o DOS, opera Visual Basic?
10. Verdadero o falso: el mejor lenguaje que se puede usar es C++.
ffi

HoRA

Su primer lengual e:
aBasic
Durante esta hora tendrá su primera exposición sobre los detalles de un lenguaje
de programación. Comenzará llevándole a través de una sesión de programación
en QBasic. Más tarde aprenderá c6mo guardar datos de QBasic y ver los resulta-
dos de cáIcu1os. Tras esta lección, podrá escribir sus propios programas en
QBasic.

Aunque no puede volverse experto en programación en una hora, esta lección


sienta las bases para su futuro como tal. Todos los conceptos de programación
que conozca aquí los puede emplear en cualquier otro lenguaje que aprenda
después.

Los puntos relevantes de esta hora son:


. Cómo instalar QBasic
. Cómo insertar y ejecutar programas en QBasic
o Qué hacer cuando sucedan effores
o Qué son las variables y por qué son tan importantes sus nombres
| 146
Hora 8

. Cuál es la diferencia entre variables de cadena y variables numéricas


. Cómo lleva a cabo QBasic operaciones matemáticas
. Cómo imprimir resultados.

El comienzo
Si trabaja con Windows 3.1 o es de los pocos que nunca ha cambiado al ambiente de Win-
dows, le resultará más sencillo iniciar QBasic que a quienes usan el sistema operativo
Windows 95 o alguno posterior. Si trabaja en DOS, simplemente inícielo escribiendo OBASIC
, en el indicador de DOS.

Si utilizaWindows 3.1, tal vez tenga un icono etiquetado QBasic en el grupo de programas
Principal (Main). Si no, seleccione el icono MS-DOS del grupo de programas Principal y te-
clee QBasic tras el indicador de DOS que aparece.

Sitrabaja en un ambiente Windows, s¡n importar de qué vers¡ón se trate,

9 pulse Alt+lntro (Enter) para max¡mizar la sesión de DOS a la pantalla com-


pleta. Presionando la combinación Alt+lntro de nuevo se devuelve la sesión
de DOS a una ventana menor. La ventaja de la sesión de pantalla completa
es que su lectura es más fácil, pero la ventana pequeña presenta un menú
de DOS, al cual se puede acceder.

Muchos programadores de QBasic se entristecieron cuando migraron a Windows 95 y descu-


brieron que esta nueva versión de Windows no inclula QBasic. Parecía que sus días estaban
contados. Por fortuna, Microsoft no eliminó QBasic de Windows 95 y hastaWindows 98 lo
incluye. El único requisito es que usted lo instale, pues ninguna opción de Windows 95 o
Windows 98 lo hace.

lnstalación de QBasic
Para instalar QBasic, siga estos pasos:

l. lnserte su CD-ROM de Windows en la unidad correspondiente.


2. Inicie el Explorador de Windows. Para ello, puede hacer clic con el botón derecho en el
botón Inicio (Start) de Windows y seleccionar Explorer, o pulsar las teclas Windows+E,
si cuenta con un teclado para Windows que tenga el logotipo de Windows.
3. Haga clic en el signo más (+) que está junto a la entrada de CD-ROM en el panel iz-
quierdo del Explorador para desplegar la lista de archivos aknacenados en el CD.
4. Abra la carpeta Tools.
Su pr¡mer lenguaje: Qeasic

5. Seleccione la carpeta oldmsdos. Como se muestra en la figura 8.1, esta carpeta contiene
los dos archivos necesarios para QBasic.

F¡cuRR 8.1
Usted puede instalar
QBasic desde Windows
95 o Windows 98.

Datr*e,em Bash*¡.c¡m EmmS$G.exe

Los dos archivos


de QBasic

Qba*ig.s¡{6 übasiu.ldp Xwpy.exe

6. Seleccione ambos iconos de QBasic (esto lo puede hacer encerrándolos con el ratón).
1. Seleccionados los iconos, haga clic en el signo de más para desplegar el contenido de la
unidad C:. Só1o haga clic en el signo de más, no en el icono, de lo contrario los archi-
vos de QBasic ya seleccionados desaparecerán de su vista.
8. Avance el panel izquierdo hasta que aparezca la carpeta Windows.
9. Haga clic en el signo de más (no en el icono de Windows) para desplegar la carpeta de
Windows.
10. Arastre los archivos de QBasic seleccionados a la carpeta Command ubicada en la car-
peta Windows del panel izquierdo. Con esto se copiarán ambos archivos a la carpeta
Windows y QBasic quedará disponible desde cualquier carpeta.

Ahora ya tiene todo lo que necesita para iniciar QBasic desde el disco duro.

Ejecución de QBasic
Para iniciar QBasic, siga estos pasos:

1 Haga clic en el botón Inicio (Start) de Windows.


2 Seleccione Ejecutar (Run).
3. Teclee QBasic en el cuadro de dirálogo Ejecutar que aparece.
4. Hagaclic en Aceptar (OK) para cerrar el cuadro de diálogo Parámetros (Parameters), si
es que aparece. Este cuadro de diálogo le permite pasar información del ambiente a un
progmma QBasic, algo poco frecuente en la actualidad pues por 1o regular QBasic no se
usa para programas a nivel producción, donde es más apropiado un compilador. Aparece
la pantalla de QBasic, que se muesta en la figura 8.2. (La ventana de QBasic podría apa-
recer llenando toda la pantalla, sin la bana de henamientas de DOS en la parte superior.)

Flcuna 8.2
Ha iniciado QBasic
con éxito.

5. Pulse la tecla Esc para eliminar los mensajes de inicio.

E¡ editor de QBas¡c
Recuerde que la escritura de los programas debe ser por medio de un editor. El editor es la
pantalla de entrada tipo procesador de texto donde se escribe el código del programa. El
editor de QBasic es más que un editor; también es un intérprete de QBasic. Desde el edi-
tor de QBasic, puede escribir un programa, ejecutarlo, cambiarlo, ver su salida y guardarlo
en disco para un almacenamiento permanente. La combinación editor/intérprete de QBasic
es precursora del ambiente Visual BASIC, que incluye editor, depurador, intérprete y com-
pilador.

QBasic incluye su propia herramienta de depurac¡ón, disponible desde e! me-

9 nú Depurac¡ón (Debug), que le ayuda a localizar errores. La lección de !a ho-


ra 22, "Herramientas de depuración", explica la manera de usar el menú de
Depuración.
Su primer lenguaje: QBasic 149

Aunque la mayor parte de los lenguajes de programación son diferentes, a medida que apren-
da QBasic y otros, verá que casi todos los lenguajes de programación tienen mucho en común
con ofros lenguajes. Todos tienen maneras de imprimir la salida y de obtener valores del te-
clado y del disco. Cuentan con comandos para efectuar ciclos, con la repetición de una o va-
rias instrucciones. Pueden tomar decisiones. Algunos llevan a cabo estas acciones con mayor
elegancia y naturalidad que otros. Sin embargo, lo importante es que cada vez conozca un
nuevo lenguaje de programación, el próximo será aún más sencillo de aprender. QBasic es un
buen lugar para el comienzo de su carrera como programador. Incluso si no acaba programan-
do en QBasic para ganarse la vida, encontrará muy útiles las habiüdades de programación que
desarrolle con éste.

El uso del editor de QBasic


Famiüarícese con el ambiente de QBasic llevando a cabo una sesión de QBasic como ejem-
plo. Se le dará un progrrrma para que lo teclee y lo ejecute. Para hacer interesante el asunto, el
programa contiene un eúor que debe corregir antes de que se ejecute correctamente.

Tenga presentes los siguientes puntos mientras trabaja con el editor de QBasic:

. Mueva el cursor por la pantalla con las teclas de flechas.


. La tecla Insert enciende y apaga el modo de inserción (cuando arranca QBasic, el modo
de inserción está encendido). Con el modo de inserción encendido, los caracteres a la
derecha del cursor se desplazan hacia la derecha cuando teclea otros caracteres. Con el
modo de inserción apagado (modo de sobreescritura), los caracteres tecleados sustitu-
yen a aquellos por donde pasa el cursor.
. La tecla Supr borra el carácter bajo el cursor. Cuando borra caracteres, los que están a
la derecha se desplazan y llenan el espacio que dejan los borrados.
. Con las teclas Re Pág (PageUp) y Av Pág (PageDown) se avanza y se retrocede la pan-
ta[a. Úsehs cuando su programa sea demasiado grande para caber en una sola pantalla.
Esta acción de avance y retroceso funciona como una cálllrra,a que recoffe una escena.
. Seleccione texto manteniendo pulsada la tecla Shift (Mayús) (aparece en el teclado co-
mo una flecha, debajo de la tecla Bloq Mayus) mientras mueve el cursor, o selecciónelo
con el ratón arrastrando el apuntador sobre el texto que quiere seleccionar. El menú
Edición @dit) contiene los comandos Copiar (Copy), Cortar (Cut) y Pegar (Paste)
usuales.
. Las secuencias de teclas comunes sirven para mover el cursor por la pantalla. Inicio
(Home) y Fin (End) llevan el cursor al inicio y al fin de la línea actual. Ctrl+Inicio
y Ctrl+Fin desplazan el cursor al inicio y al fin del programa. Ctrl+flecha izquierda y
Crl+flecha derecha mueven el cursor al inicio de la palabra previa o de la posterior.
Ejecución de su primer programa en QBasic
Siga estos pasos para insertar y ejecutar su primer programa en QBasic.

1. Inicie QBasic. Verá la pantalla de inicio de QBasic.


2. Pulse la tecla Esc para borrar la opción Ayuda (Help) de la ventana de edición. (Más
adelante tal vez quiera ver algunas de las pantallas de ayuda desde esta pantalla inicial.)
3. Teclee el programa del listado 8.1. (Las líneas en blanco son opcionales, así como las
líneas con sangría. Los espacios extra simplifican la lectura del programa.) Pulse Intro
(Enter) al terminar cada línea. No sucederá un ajuste de texto, pues está trabajando con
un editor de texto, no con un procesador de texto.

Si teclea un error obvio, como una instrucción mal escrita, Visua! Basic lo re-
conoceráy presentará un mensaje de error tan pronto como pulse lntro (vea
la figura 8.3). QBasic intenta resaltar la parte errónea de la instrucción, aun-
que a veces no lo hace exactamente donde sucedió el error. Puede hacer clic
en Sí (OK) para cerrar el cuadro de mensaje y corregir e! error antes de con-
tinuar. (El paso 6 demuestra un error de sintaxis que no puede detectar el
editor sino hasta la ejecución del programa.)

Frcuna 8.3
+If :rj:::v..filt:::::::::a

Auto
El editor de QBasic
:

puede detectar algunos


errores cuando inserta
el programa.

:. :::::i::t:::::::::::::t::::lt.tTT:lTitti

iFÍ li'-fi$t$,**§nG:*iix*fr¡iitáü¡r::i|ii:Er*!üi1¡*Si*r§S:,*a*iiit: {$,i,sti,i#$tr$¡:¡i:iiiiirif§*,ü ii

Ltsrnoo 8.1 Su pnrMER pRoGRAMA EN QBnslc LE pERMtrE pRAclcAR coN EL


EDlroR DE QBAS¡C

1: REM Mi primer pnograma en QBasic


2: BEEP
3: REM Pedin al usuanio su nombne
4= CLS
5: INPUT " óCuáI es tu nombt'e " ; nm$
Su pr¡mer lenguaje: QBasic 1s1 I

6: PRINT
7:
8: REM i Sonan Ia sinena !
Qr FOR uP = 100@ T0 15OO STEP 25
1Oz SND UP, 3
11: NEXT up
12=
13: REM Impnimin eI nombne a través de Ia pantalla
14: col=1
15: FOR fila = 1 T0 24
16: LOCATE fila, col
17: PRINT nm$
18: col=col+2
19: NEXT fila
2@: END

4. Asegúrese de que el programa tecleado se vea exactamente como el del paso 3.Haga
una doble revisión. QBasic no puede leer su mente y la exactitud es parte de la pro-
gramación. Sin embargo, puede teclear los comandos en mayúsculas o en minúsculas.
QBasic convierte automáticamente a mayúsculas los comandos que escriba en
minúsculas.
5. Ejecute el programa seleccionando Ejecutar (Run), Iniciar (Start) del menú desplegable.
También puede usar la combinación Shift+F5 como tecla abreviada para ejecutar sus
programas; es más rápido que usar el menú. Todas las opciones del menú cuentan con
sus teclas abreviadas equivalentes junto a ellas. (Algunas opciones de menú, sin embar-
go, no tienen teclas abreviadas equivalentes.) Siempre pulsará la tecla Alt para acceder
a los menús.

6. Debido a que el progr¿rma contiene un error, no se ejecutará. QBasic lo localiza y pre-


senta un cuadro de error. Cuando QBasic presenta un error, tiene dos opciones. Puede
obtener más ayuda sobre el mensaje de error seleccionando Ayuda (Help) en el cuadro
de mensaje de error. Entonces aparece la ayuda en línea de QBasic para guiarle en su
solución (vea la figura 8.4). Haga clic en Sí (OK) para eliminar el mensaje de ayuda
tras leerlo. Si no necesita más ayuda, pulse Sí para eliminar el cuadro de mensaje de
error. De ambas maneras, QBasic resalta el lugar donde encontró el error. Como puede
veq a QBasic no le gusta el comando SND.
7. En QBasic no existe el comando SND. El comando debe ser SOUND. Cambie la línea
para que se vea como sigue:
SoUND up, 3
Hora 8
| 1s2

Frcunn 8.4
Auto
QBasic ofrece ayuda (L.t'. Á.r §

sobre los errores.


B[${ 84i pr"nruer pr'*grJar*a eu ftS+sit:
uil [ §l

H[$* Pid* al us¡¡*c"i* stt ¡¡qmhr*

$!§i x8{T

$¿&_h$ i
Erü$X +;¡r

[,cF *

8. Ejecute de nuevo el programa. Cuando lo haga, se borrará la pantalla y QBasic emitirá


un sonido. Luego le preguntará su nombre. Después de escribirlo, sonará una sirena y
el nombre aparccerá a lo largo y ancho de la pantalla, como se muesfra en la figura 8.5.
QBasic siempre presenta el mensaje Pulse cualquier tecla para continuar
(eress any key to continue) antes de regresar a su programa, con el fin de que
pueda ver el resultado en la pantalla.

Frcunn 8.5
El resultado que
aparece cuando
ejecuta su primer
programa en QBasic.

Cuando la pantalla regresa a la ventana de edición del programa, puede re-

9 gresar a la pantalla de salida seleccionando Ver I lnfo en pantalla (View


Output Screen) del menú o pulsando la tecla abreviada F4. La pantalla de sa-
lida le permite alternar entre el código y la salida en la misma sesión.
I
Su primer lenguaje: Qgasic 1 53

9. Si quiere guardar el programa para ejecutarlo después, seleccione A¡chivo I Guardar


(File I Save). Luego teclee un nombre, como PRIMER.BAS, y presione Intro (Enter).
Todos los programas QBasic deben tener la extensión de nombre de archivo .BAS. La
primera parte del nombre del archivo se apega a la regla de nombrado de DOS previo a
Windows 95, que dice que la primera parte del nombre de un archivo debe tener entre 1
y 8 caracteres.

QBasic no maneja nombres de archivo largos.

¡Felicidades! Acaba de escribir, corregir y ejecutar su primer programa en QBasic. Ahora


aprenda los detalles del lenguaje para que pueda escribir desde cero sus propios programas.

Todo el poder de QBas¡c


Es hora de desarrollar habilidades con el lenguaje QBasic. A lo largo de estas 24 horas, apren-
derá sobre la impofancia de escribir programas de fácil mantenimiento. Los programas que
escriba no sólo deben trabajar, sino también ser de fácil lectura. Es muy probable que usted u
oüo necesitarán actualizar el programa después. Un código claro simplifica esta tarea.

La escritura de programas claros y bien documentados t¡ene otra ventaja

9 más. Terminará el programa más rápido y con menos errores. El ser organ¡-
zado siempre tiene su recompensa.

Código de comentarios
Algunas de las instrucciones más importantes que pondrá en los programas QBasic serán ig-
noradas por éste. Son los comentarios que documentan lo que hace el programa. El programa
en QBasic que tecleó anteriormente tiene cuatro comentarios. Los comentarios en QBasic son
cualquier instrucción que comience con REM.

El intérprete de QBasic ignora los comentarios. Éstos se incluyen en los programas para be-
neficio de quienes los ven. Su finalidad es documentar el programa, describiendo en español
lo que éste yaarealizar. Por ejemplo, por los cuatro comentarios puede saber lo que hace el
programa sin necesidad de tener conocimiento sobre QBasic, excepto la instrucción REM.
1s4 Hora 8
|

A muchos programadores les gusta comenzar sus programas con un comen-

9 tario que indica el nombre del programador y la fecha en que !o escribió.


Esto es importante si es uno de entre muchos programadores en un departa-
mento de procesamiento de datos. Cuando otros tienen que modificar los
programas, pueden determinar quién fue el primer programador para
consultar con él sus dudas. Cada vez que modifique un programa, puede
añadir un comentario que describa el cambio. Tal bitácora de cambios es
importante cuando varias personas trabajan en un equipo y cualquiera de
ellos podría tener que corregir un error producto de algún cambio. El listado
8.2 muestra las primeras líneas de un programa que incluye un buen conjun-
to de comentarios al inicio del código.

Lrsmoo 8.2 Los coMENTARros AyUDAN A DEscRtBtR EL pRoGRAMA y EL pRoGRAMADoR

1: REM
2: REM Programa escrito por SaUy K. Yarnell
3: REM Fecha de programación: 6-9-98
4: REM Actualizado el: 7-2-98: Se añadió eI manejo del informe de nómina #4-E
5: REM Actualizado eI: 12-1-98: Se añadió eI manejo de La nueva ley de
impuestos 439T3
6: REM Actualizado eI: 3-16-99: Se añadió eI manejo del informe de ventas
estimadas

QBasic permite un atajo para los comentarios. Se puede indicar un apóstrofo (') en lugar de
REM. El listado 8.3 muesfta el mismo progÍuna que vimos antes, con el comentario abrevia-
do en lugar de REM, Como puede ver, los comentarios abreviados pueden ir a la derecha
de las instrucciones de QBasic; no es necesario que se ubiquen en líneas independientes,
como las instrucciones REM.

Lrsnoo 8.3 Er eRoGRAMA ¡ru QBesrc coN coMENTARtos ABREVtADos

1: ' Mi pnlmer pnognama en QBasrc


2: BEEP
3: ' Pedir aL usuanro su nombre
4= CLS
5: INPUT " óCuáL es tu nombne? " ; nm$
6: PRrNT ' Impnimir una línea en branco
7:
8: ' i Sonan Ia sinena !

9: FOR up = 1@@A T0 15A0 STEP 25 ' Ciclo que controla Ia sinena


1A= SOUND uP, 3 ' Emitin un tono en eI altavoz
1 1 : NEXT up ' Fin der cicro de sonido
12=
13: ' Impnlmrn eI nombne a través de Ia pantalla
14= col = 1

15: FOR fira = 1 T0 24 ' Repetin vanras veces


16 : L0CATE fila, col ' Colocar eI cu nsor
Su pr¡mer lenguaje: QBasic 1ss I

17
= PRINT nm$ I mp nimi n el nombne del usuanio
18: col = col + 2
1 9: NEXT fila ' Fin del ciclo de impnesión
2O: END

No todas las líneas requieren comentarios. Haga uso de ellos para dejar claro lo que hace el
código. Algunos programadores insertan comentarios cada ffes o cuatro líneas; para ellos es
suficiente. Sin embargo, la cantidad de comentarios adecuada es la necesaria para dejar claro
el código.

El siguiente no es un cotnentario útil:


PRINT Totalventas ' Imprimir el total de ventas
Tal comentario simplemente repite lo que dice la instrucción misma. Es redundante, pues el
código es lo bastante autodocumentado gracias al bien nombrado valor Tota1Ventas. Por
otra parte, considere el siguiente comentario.

PRINT Totalventas ' EI total incluye gasto único de asignación


Este comentario informa más sobre la instrucción de lo que puede hacerlo la instrucción mis-
ma. Aunque el código previo del programa podría explicar que el total incluye el gasto único,
este comentario recuerda al usuario que el total puede contener algo especial. Algunos co-
mentarios son muy útiles, no cabe duda.

Recuerde que los comentarios son para los programadores, no para los usua-
rios. Los usuar¡os nunca ven los comentarios. Éstos permanecen en e! tistado
del programa para describir lo que sucede en el código.

Almacenam¡ento de datos
Como lo implica su definición, el procesamiento de datos significa que sus programas proce-
san datos. Estos datos se deben almacenar en memoria de alguna manera mienüas el progra-
ma los procesa. En los programas QBasic, como en la mayor parte de los lenguajes de
programación, los datos se almacenan et variables. Una variable es como una caja dentro de
su computadora que contiene un valor de datos. El valor podía ser un ntlmero, un carácter o
una cadena de ca¡acteres.

En realidad, los datos se almacenan en localidades de memor¡a. Las variables


evitan que tenga que recordar qué localidades de memoria contienen los
datos. En lugar de recordar una localidad de almacenamiento específica (lla-
mada dirección), basta con que recuerde el nombre de su variable.
Hora 8
l1s6

Los programas pueden tener tantas variables como necesite. Hay un límite para la cantidad de
variables que puede tener un programa, pero dicho llmite depende del tipo de datos que se al-
macenan. (De cualquier lruInera, la cantidad es tan grande que no se quedará sin variables pa-
ra su programa.) Las variables tienen nombres asociados. No es necesario recordar qué
localidad de memoria contiene los datos; puede asignar nombres a las variables para recordar-
las miás fácilmente. Por ejemplo, Ventas es mucho más sencillo de recordar que la localidad
de memoria 4376.

Puede usar casi cualquier nombre que qüera, siempre y cuando siga estas reglas de nombrado:

. Los nombres de las variables deben comenzar co¡- un carácter alfabético, es decir,
una letra,
. Los nombres de las variables pueden tener de 1 a 40 caracteres en mayúsculas o mi-
núsculas.
. Tras el primer carácter alfabético, los nombres de las variables pueden contener núme-
ros. Hay algunos caracteres especiales que también pueden ser parte de los nombres
de las variables (como . , &, y ^), pero no se permiten otros (como (, * , y +), aparte de
letras acentuadas. Es más seguro emplear nada más leffas y números.

Evite los nombres de variables extraños. Dé a sus variables nombres que des-
criban el tipo de datos que almacenan. Balancegg es mucho mejor nombre
de variable para el valor del balance de 1998 que X1y96a, aunque a QBasic
no le importa cuál use.

He aquí algunos ejemplos de nombres de variables válidos e inválidos:

Válido Inválido
Ventas93 Ventas - 93

Mi Tanifa My$ra nif a

BaICtasXCob 93Ct asXCob

f ila REM

No asigne a una variable el mismo nombre de un comando de QBasic; en este


caso, QBasic presentará un mensaje de error de nombre de variable inválido.

Las variables pueden contener números o cadenas de caracteres. Si se apega a las reglas de
nombrado que acabamos de listar, las variables podrán contener nrlmeros.
Su primer lenguaje: QBasic 157 ,

Hay un carácter especial que, si se indica al final del nombre de una variable, resulta muy
útil. Si pone el signo ($) al final de un nombre de variable, ésta puede contener uno o varios
caracteres alfabéticos o especiales. Por lo tanto, las siguientes variables pueden contener ca-
racteres, palabras e incluso oraciones:

nm$

Compania$

muest ra$

Empleados$

Asignación de valores
La mayoría de las instrucciones de los programas en QBasic emplean nombres de variables.
Los programas en QBasic con frecuencia hacen un poco más que almacenar valores en varia-
bles, cambiar variables, calcular basándose en variables y enviar a la salida valores de
variables.

Cuando esté listo para almacenar un valor de datos, tendrá que nombrar una variable para
ello. Tendrá que valerse de una instrucción de asignación para almacenar valores en las varia-
bles del programa. La instrucción de asignación incluye el signo (=) y un comando opcional,
LET, He aquí dos ejemplos de instrucciones de asignación:
ventas = 956.34
LET tasa = .28

La palabra clave LET es opc¡onal y requ¡ere que usted teclee más, si decide
lrr
9 usarla. Por tanto, casi todos los programadores ev¡tan esto y dejan fuera
de sus instrucciones de asignac¡ón. Es probable que no ex¡sta una buena ra-
zón para usar LET; Ias viejas vers¡ones de BASIC (de la década de los 50) lo re-
querían, por lo que aquellos programadores que lo aprendieron entonces, tal
vez aún lo usan. Es importante que sepa Io que hace lrt para el caso de que
encuentre alguna instrucción que !o contenga. Recuerde que Visual Basic es
totalmente compatible con e! lenguaje de programación QBasic. Por tanto, es
posible que vea una instrucción ler en algún programa en Visual Basic.
i
1s8 Hora 8

Piense que el signo igual en una insfrr¡cción de asignación es como una flecha que apunta a la
izquierda. Lo que suceda del lado derecho del sigao se envla al lado izquierdo y se almacena en
la variable que hay ahí. La figura 8.6 muesfra el funcionamiento de la insfrucción de asignación.

Frcune 8.6 A=23

Las instrucciones de
asignación almacenan
valores en variables.

Si desea almacenar los datos de una cadena de caracteres en una variable, debe encerra¡ dicha
cadena entre comillas. A continuación se muestra cómo almacenar la palabra QBasic en una
variable llamada lang$ :

Iang$ = "oBasic" ' Encerrar las cadenas entre comillas


Una vez cargados los valores en las variables, se quedan ahí durante el resto de la ejecución
del programa o hasta que se les asigne otro valor. Una variable sólo puede contener un valor a
la vez. Por tanto, las instrucciones
edad = 67
edad = 27

dan como resultado que edad contiene 27, pues ese fue el último valor almacenado en ella.
La variable edad no puede contener ambos valores.

También puede asignar el valor de una variable a otra y llevar a cabo operaciones matemáti-
cas sobre variables numéricas. A continuación preseritamos un programa corto que almacena
el resultado de un cálculo en una variable, y luego emplea dicho resultado para otro cálculo:
pi = 3.1416
radio = 3
anea=pi*radÍo*nadio
mediaArea=ateal2

QBasic inicializa con ceros las variables. Esto significa que, cuando da un

9 nombre a una variable, QBasic supone que su valor será 0 (cero) hasta que
se le as¡gne otro valor. Por tanto, si qu¡ere que una variable com¡ence con
cero, no es necesario que se lo asigne. QBasic también deja en blanco las va-
riables que cont¡enen ¡nformación en caracteres (aquellas que tienen un su-
fijo de signo($) y almacena en ellas cadenas nulas o cadenas vacías,
indicando que aún no se ha asignado nada a las variables.
Su primer lenguaje: QBasic 1ss I

Ahora que hay valores almacenados en variables, debe haber un modo de presentarlos en la
pantalla y en la impresora. Las siguientes secciones describen Ia manera de enviar valores de
datos a las salidas.

Salida de valores
La instrucción PRIllt envía los datos a la pantalla. Prácticamente todos los programas QBasic
emplean PRINT, pues la presentación de datos en pantalla es de gran impofancia. Los usua-
rios deben poder ver los resultados y leer mensajes de los progr¿¡mas que ejecuten. La figura
8.7 muestra una ilusffación de lo que hace enIrut.

F¡cunn 8.7 PRINT "Hola"

PRINT envía la salida


a la pantalla. PRINT

La pantalla

Hay varias maneras de utilizar pnrur. La manera más sencilla de imprimir palabras en la
pantalla es encerrarlas enüe comillas en seguida de la instrucción pnrur . Las dos instruccio-
nes siguientes imprimen nombres en la pantalla:
PRINT "Sally Brown"
PRINT "John WiIson"

La salida producida es la siguiente:


SaIIy Bnown
John Wilson
Las comillas nunca aparecen en las cadenas impresas; sólo encierran las cadenas de caracteres
que se imprimirán. Lo que esté enüe las comillas se imprime tal cual ap?rece. La instrucción
PRINT.

PRINT "5 + 7"

no imprime 12 (el resultado de 5+ z). Gracias a las comillas que la encierran, la expresión
se imprime como aparece dentro de ellas. Esta instrucción enrur produce la siguiente salida:

Sin embargo, si imprime una expresión sin comillas, QBasic envía a la salida el resultado del
ciflculo de esta expresión:
PRINT 5+ 7

imprime 12.Las variables impresas sin comillas también se imprimen. El listado 8.4 contie-
ne un código con insfiucciones de salida para que pueda ver el resultado de los cálculos.
160 Hora 8
|

Lrsmoo 8.4 Pnrrur ruvfn a LA pANTALLA EL RESULTADo oe los cÁlcuLos y orRos DATos

1: ' Pnognama que calcula e imprime eI área


2: ' de un círculo y de medio círculo
3: pi = 3.1416 'PI matemático
4: nadio=3 'Radiodelcínculo
5: anea = pi * nadio * radio ' Calculan eI ánea del cínculo
6: mediaAnea = anea I 2 ' Calcu1an eI ánea de Ia mitad deI cíncuIo
7z PRINT " EI área de un cínculo con un nadio de 3 es "
8: PRINT anea
o. PRINT " EI área de Ia mitad de ese círculo es "
1@= PRINT mediaArea
11: END

No se confunda con el nombre PRINT. pRINT envía la salida a la pantalla,


no a la impresora.

La instrucción END al final de los programas QBasic es opcional. Lamayoría de los progra-
madores ponen la instrucción END para que quienes vean el programa puedan saber que han
llegado al final, en lugar de preguntarse si tal vez el programa tenga offa página.

Ésta es la salida que verá si ejecuta el programa del listado 8.4:


1 : EI ánea de un cínculo con un nadio de 3 es
2= 28.2744
3: EI área de Ia mitad de ese cínculo es
4':, 14.1372
Observe que cada instrucción PRINT proyoca la impresión de una nueva línea. Siga el progra-
ma y vea cómo se genera la salida.

La hora 9, "Entrada y salida", abarca la salida de valores y la entrada de


datos del usuario. Aprenderá más sobre cómo QBasic da formato a los datos
para que tengan la apariencia que desea.

Borrado de la pantalla
Antes de que su programa presente algo en la pantalla, probablemente quiera ponerla en blan-
co. Si su progrÍIma no borra la pantalla antes de imprimir en ella, 1o que hubiese antes en ella
permanecerá ahí cuando ejecute el programa.
lenguaje: QBasic

Recuerde que QBasic es un lenguaje que se basa en DOS. Si no maximiza su


pantalla de QBasic, lo único que borrará, mediante el programa en Qbasic,
es la ventana de DOS en la que se ejecuta. Si en el fondo aparece una parte
de Windows, ésta no se borrará.

Es muy sencillo borrar la pantalla en QBasic. Basta con Ia instrucción cLS. Cuando QBasic
encuentra una insffucción CLS, borra la pantalla. Siempre es una buena idea poner en blanco
la pantalla antes de dar comienzo a un progr¿rma.

El siguiente programa breve borra la pantalla e imprime un mensaje en la parte superior


de ésta:

CLS
PRINT 'iQBasic es divertido!"

Asegúrese de que sus programas borren la pantalla si escribe programas que


presentan datos importantes. Por ejemplo, si escribe programas para el de-
partamento de nóminas, querrá asegurarse de que borren siempre la panta-
lla antes de la instrucción END. La pantalla en blanco asegura que las cifras
de nómina confidenciales no queden en ella, a la vista de miradas indiscretas.

Operaciones matemáticas con QBas¡c


QBasic lleva a cabo ciálculos matemáticos del mismo modo que casi todos los lenguajes de
programación. Utiliza los mismos operadores matemáticos primarios prira suma, resta, multi-
plicación y división que vio en el capítulo anterior, además de algunos particulares de QBasic.
La tabla 8.1 presenta los operadores matemáticos de QBasic que debe conocer.

Trsm 8.1
Openaoon¡s uerevrÁrcos or QBesrc
Operador Descripción
o Agrupador de expresiones
Exponenciación
*, l, )rMoD Multiplicación, división, división de enteros y módulos
+) - Suma y resta
Hora 8
| 162

Es importante el orden de los operadores de la tabla 8.1. En el caso de que haya más de uno
de estos operadores en una expresión, QBasic no calculará los valores en un orden de izquier-
da a derecha. En otras palabras, la expresión:

v=5+2*3
almacena en v el valor 11, no 21, como podría suponerse. QBasic no lleva a cabo los cálculos
de izquierda a derecha, sino en el orden dado en la tabla 8.1. Dado que la multiplicación apa-
rece antes de la suma, QBasic calcula primero 2 *
3, que es 6; luego calcula 5 + 6, para
obtener el resultado de 11.

El orden de evaluación de los operadores con frecuenc¡a se conoce como pre-

9 cedencia de operadores. Todos los lenguajes de programac¡ón, excepto APL,


calculan las expres¡ones basándose en una tabla de precedencias. Otros len-
guajes de programac¡ón pueden usar operadores diferentes a Ios que apare-
cen en la tabla 8.1, aunque casi todos ellos emplean los paréntesis y los
¡
operadores matemáticos primarios (*, l, + y -) del mismo modo que QBasic.
I
l

FT,
t
t'.
t."
Entre los operadores, los paréntesis son los que tienen mayor prioridad. Cualquier expresión
i

enffe paréntesis se calcula antes que las demás partes de la expresión. La instrucción:

v=(S+2)*O
asigna el valor 21 a v, pues los paréntesis obligan a que se sumen 5 + 2 antes de la multipli-
cación de 7 por 3.

El operador de exponenciación eleva un número a una potencia particular. En la siguiente ins-


trucción, se pone 100 en la variable x, pues t 0^2 significa eleva¡ 10 a la segunda potencia (10
por 10):

x=10^2
Puede también elevar un número a una potencia fraccionaria mediante el operador
^. Por
ejemplo la instrucción:

x=81 ^0.5
eleva 8 1a la
I z, encontrando la raíz cuadrada de 8 1 . (Si le parece que estas matemáticas se
I

vuelven un poco complejas, sepa que algunos han programado en QBasic por años sinjamás
elevar un número a una potencia fraccionaria. Pero, si tuviese necesidad de hacerlo, QBasic lo
hará por usted.)

En QBasic, la división se maneja de fres modos distintos. La diagonal (/) produce la división
normal. La instrucción:

d=312
Su primer lenguaje: QBasic 163
|

pone 1.5 en d. La diagonal invertida (\) efechúa ladivisión de enteros. Un entero es un núme-
ro redondo y el resultado que produce la división de enteros siempre es una cifra entera (la
parte decimal se descarta). Por consiguiente, la instrucción:

d=3\2
pone 1 en d e ignora el .5.

Uno de los operadores más extraños de QBasic no es un símbolo; se parece más a un coman-
do. Se fiata del operador MOD. El operador MOD devuelve el residuo entero de una división.
Por ejemplo, la instrucción:

m=20MODg
pone 2 en m, pues 20 dividido enüe 3 es 6 con un residuo de2.Hay algunas operaciones ma-
temáticas especializadas que requieren de aritmética de módulo (residuo entero) y QBasic
ofrece el operador MOD para cumplir con esta necesidad.

Para terminar con los operadores matemáticos, el listado 8.5 contiene un programa que impri-
me los resultados de cálculos que emplean todos los operadores de QBasic descritos en esta
lección. La salida del programa aparece en la figura 8.8 en seguida del listado del programa.

Lrsnoo 8.5 Los cÁlcur-os oe QBesrc se rrecrúm¡ EN EL oRDEN DE PRECEDENCIA DE Los


OPERADORES

1 : ' Pnograma que demuestra los openadones matemáticos de QBasic


2= numl - 12
3: num2 = 5
4: CLS
5: PRINT " num1 es " ; numl
6: PRINT " num2 es " ; num2
7 ' Impnime eI nesultado de varios cáIculos sobre 12 y 5
8:= valor = numl + num2
9: PRINT "num1 + num2 es igual a"; valor
1@= valot'= num1 - num2
11: PRINT "num1 - num2 es igual a" va10 r"

12: valon=num1*num2
13: PRINT " numl * num2 es igual a " vaLo n
14: valon = numl / num2
15: PRINT "numl / num2 es igual a" vaLo n
16: valon=num1\num2
17: PRINT "num1 \ num2 es igual a" valor
18: valon = numl MOD num2
19: PRINT " num1 MOD num2 es igual a " ; valor
2@= valon=num1^num2
21 : PRINT "numl ^ num2 es igual a"; vaLon
22= valon=num1+num2*4
23: PRINT "num1 + num2 * 4 es igual a"; valor
24: valon = (num1 + num2) 'k 4
25: PRINT " (numl + num2) * 4 es igual a"; valor
26= END
Frcunn 8.8
Salida de los cálculos.

No hace falta que sea un matemático para utilizar QBasic; éste se encarga de todo por
usted. Lo único que tiene que entender es cómo QBasic lleva a cabo las operaciones ma-
temáticas para que pueda preparar las operaciones a real\zar.

Resumen
QBasic es una de las mejores implementaciones de BASIC para los programadores princi
piantes. Como aprendió en esta hora, la escritura de programas en el lenguaje de programa-
ción QBasic no sólo es fácil, sino también divertida. Los programas de esta hora le enseñaron
a almacenar datos en variables y a enviar resultados a la pantalla. Los resultados de los cálcu-
los matemáticos siguen un orden predeterminado. Sin embargo, puede con toda libertad pasar
por alto ese orden valiéndose del uso de paréntesis.

La siguiente hora explica la manera de generar una salida más elegante y de obtener valores
del teclado para guardarlos en las variables.

Preguntas y respuestas
P En QBasig ¿debo conocer los valorcs que asignaré a las variables cuando escriba
el programa?
R Los datos provienen de muchas fuentes. Conocerá algunos de los valores que puede
asignar mientras escribe sus programas, pero una buena parte de los datos vendriín del
usuario, como verá durante la siguiente hora, o de los archivos de datos, según se expli-
ca en la hora 11, 'Administración de datos y archivos en disco". En esta lección se
asignaron todos los datos a variables, a fin de familiarizarle con el funcionamiento de
las instrucciones de asignación y los ciflculos de QBasic.
Su primer lenguaje: QBasic 165

P ¿Qué tipos de datos pueden contener las variables?


R Las variables pueden contener muchos tipos de datos, como números, caracteres y ca-
denas de caracteres. A medida que aprenda más sobre programación, verá que los datos
numéricos vienen en toda clase de formatos y, paru dominar un lenguaje de programa-
ción, también debe dominar los distintos tipos de datos numéricos disponibles. Algunos
lenguajes de programación, como Visual Basic, manejan además variables para fechas
y horas.

Taller
Las preguntas del cuestionario se presentan para una mayor comprensión. Vea las respuestas
en el apéndice A.

Cuestionario
1. ¿Qué es lo primero que debe hacer para usar QBasic con Windows 95 o Windows 98?
2. ¿Cuáles son las dos maneras que emplea QBasic paralocalizar los errores (sin conside-
rar el depurador)?
3. ¿Cuál es el objetivo de los comentarios?
4. ¿Qué hace una variable?
5. Verdadero o falso: PRINT imprime en la pantalla o en la impresora.
6. ¿Cuántos valores de datos puede contener una variable al mismo tiempo?
7. ¿Qué hace con las variables el sufijo de signo ($)?
8. ¿Por qué QBasic no efectúa sus cálculos en orden de izquierda a derecha?
9. Verdadero o falso: QBasic maneja nombres de archivos largos.
10. ¿Qué instrucción de QBasic borra la pantalla?
I.

HoRA

Entrada y sal¡da
La entrada y la salida son las piedras angulares de los programas que interactúan
con el mundo exterior. En la lección anterior, aprendió a generar salida en la
pantalla mediante la instrucción PRINT. Se puede lograr más con esta instrucción
que sólo enviar datos a la salida. PRINT y sus distintas opciones dan también
formato a la salida.

Lo contrario a PRINT es INPUT. Mientras que PRINT envía una salida ala panta-
11a, INPUT recibe una entrada del teclado. La instrucción INPUT es la principal
manera que tienen los programas para interactuar con el usuario. Con frecuencia
verálas instrucciones PRINT e INPUT en pareja, de manera que PRINT pueda so-
licitar los datos que necesita INPUT.

Los puntos relevantes de esta hora son:


o Por qué es necesario mejorar el aspecto de la instrucción PRINT
. Cómo intercalar varios valores de salida en la misma línea
. La diferencia entre el separador coma y el separador de salida punto y
coma
o Qué son las funciones internas
168 Hora 9
|

a Cómo saltar aI siguiente marcador de tabulación de la pantalla


a Cuándo usar SPC ( ) para espaciar la salida
o Cuál es el propósito de INPUT
a Por qué son tan importantes los indicadores de entrada de datos
a Cómo se da formato a datos como cifras de moneda.

lmpresión avanzada
La instrucción PRINT puede hacer mucho más que imprimir valores de datos. Puede emplear
PRINT para enviar a la salida datos ordenados por columnas que forman tablas de informa-
ción. Además, tiene la posibilidad de controlar el espaciado de los valores. Las siguientes sec-
ciones muestran distintas maneras de presentar la salida de un programa meüante PRINT, de
modo que tenga la apariencia que usted desea.

I
EI punto y coma
\ En la lección anterior, aprendió a imprimir valores línea por línea.La siguiente instrucción
t.
imprime tres números, cada uno en su propia llnea:
PRINT 15
PRINT 20
PRINT 25

Ésta es la salida de estas Íes instrucciones PRINT cuando se ejecutan:

Si quiere imprimir varios valores en la misma llnea, puede hacerlo con la separación de un
punto y coma. Por tanto, la instrucción

PRINT 15; 2@; 25

imprime los tres valores en la misma línea, así:

15 20 25

QBasic siempre incluye un espacio para el signo de un número. Los números


positivos no presentan el signo más frente a ellos, pues está implícito. Sin
embargo, los números negat¡vos s¡empre aparecen con el signo menos. Si los
tres valores que qu¡ere imprimir son negat¡vos, aparecerá un s¡gno menos
frente a cada uno de ellos, sin espacios en blanco antes.

I
t
I

t
Entrada y salida 16e I

Con el punto y coma puede mejorar el programa que presentamos en la lección anterior, que
lleva a cabo el crálculo y la impresión del área de un círculo. Si estos valores aparecenjusto
después de las descripciones de los ciflculos, en lugar de en la siguiente línea, la salida tendrá
más senüdo que antes. El listado 9.1 muestra el programa mejorado.

Ltsrnoo 9.1 Coru EL EMpLEo DEL puNTo y coMA pUEDE sEpARAR vALoREs euE sE
ENCUENTRAN EN LA MIsMA l.ÍruTa

' Pnognama que calcula e impnime eI ánea


' de un cínculo y de un medio cínculo
pi = 3.1416 ' PI matemático
nadio = 3 'Radio del cír'culo
anea = pi * nadio * nadio 'Ca]cu1an el- ánea del cínculo
mediaAnea = anea I Z ' Calculan Ia mitad del área del
cínculo
PRINT "EI ánea de un cínculo con un nadio de 3 es"; anea
PRINT '' EI área dE Ia mitad de ese cínculo es"; mediaAnea
END

La siguiente es la salida de este programa:


EI ánea de un cínculo con un nadio de 3 es 28.2744
E] área de ]a mitad de ese cíncuLo es 14.1372
El punto y coma también puede ir al final de PRINT:

PRINT ,.SaIIy ,,
;

de modo que la salida de un PRINT subsecuente se presentará en la misma línea que la ante-
rior. En ocasiones, querrá imprimir el resultado de varios cálculos en la misma línea. Impri-
miéndolos con un punto y coma al final, podrá hacerlo a medida que los vaya calculando
durante la ejecución del programa y asegurarse de que aparecerán juntos.

lmpresión con comas


La coma actria de manera similar al punto y coma ya que le permite imprimir varios
valores juntos con la misma instrucción PRINT. A diferencia del punto y coma, que
causa que los valores se impriman uno tras otro, la coma provoca que el siguiente valor se im-
prima en la siguiente zona de impresión.

Hay una zorta de impresión por cada 14 columnas de la pantalla. La figura 9.1 muestra la di-
visión de la pantalla en cinco zonas de impresión. Cada coma de una instrucción PRINT causa
que el siguiente valor se imprima en la siguiente zona de impresión.

Tome en cuenta el espac¡o extra que ocupa el signo más imaginario al impri-
mir números; sin embargo, las cadenas nunca se imprimen con espac¡os an-
tes ni después.
170 Hora 9
|

Frcune 9.1 #1 #2 #3 #4 #5
Zona de
Ias zonas de impresión
impresión suceden
cada 14 columnas de
la pantalla.

Columna de
la pantalla 1 15 Zg 49 57

La siguiente instrucción PRINT demuestra el uso de la coma:


PRINT 15, 20, 25

Esta instrucción imprime el 15 (tras un espacio) y luego el 20 en la columna 15, y el 25 enla


columna 29, como sigue:

15 20 25

La coma es útil para imprimir tablas de valores. La coma asegura que las columnas de la tabla
se alineen en cada zona de impresión. En el siguiente progrÍrma, los nombres se imprimen co-
menzando por las mismas cuatro columnas, aunque los nombres son de üferentes longitudes.

' Ilustra eI uso de las comas


PRINT "Sam", "Jesse", "Charles", "Susan"
PRINT "Christine"r "Ron", "Jayne", nMartha"
PRINT "Johnny", "Thomas", "Francis", "Kerry"
PRINT "Kim"r "Barbara", "Lea"r "Wj.Iliam"
END

La salida de este código es:

Sam Jesse Charles Susan


Chnistine Ron Jayne Martha
Johnny Thomas Fnancis Kenny
Kim Banbana Lea WiIIiam
A medida que vaya trabajando con más datos e imprima varios valores de manera simultánea,
apreciará la ayuda que ofrecen las zonas de impresión cuando se quieren alinear los datos en
columnas.

lmpresión de líneas en blanco


Para imprimir una línea en blanco, únicamente necesita poner una instrucción PRINT sola. En-
tre las salidas de las siguientes fres instrucciones aparece una línea en blanco:

t_
Entrada y salida 17 1l

PRINT " Pnimena línea "


PRINT
PRINT ,,ÚItima línea,,

Ésta es Ia salida de estas tres instrucciones:

@ Pnimena línea
Úrtima línea

Control del espaciado


Puede dar formato a la salida de las instrucciones PRINT con la ayuda de SPC( )o
TAB ( ) . Ambas se conocen como funciones internas (a veces llarnadas funciones in-
trínsecas, o simplemente funciones). Una función es una rutina integrada que hace el trabajo
por usted. Los paréntesis contienen un valor que controla el funcionamiento de la función.

SPC ( ) imprime tantos espacios en blanco como lo indique el valor entre paréntesis. TAB ( )
imprime los espacios en blanco necesarios para mover el siguiente carácter a la columna indi-
cada entre paréntesis. Aunque estas funciones desempeñan un trabajo similar, las entenderá
muy pronto viendo cómo funcionan.

Observe el listado 9.2,qure se vale de SPC( ) y del punto y coma (;) para imprimir dos cade-
nas en la misma línea. SPC(5) le dice a la instrucción PRINT que salte cinco espacios antes de
imprimir la cadena de texto, que aparecerá en la columna seis. Si termina una instrucción
PRINT con un punto y coma, la siguiente instrucción PRINT se imprimirá donde terminó la úl-
tima, en lugar de ser en la siguiente línea, como sucedería sin el punto y coma.

L¡srnoo 9.2 sPc( ) SEPARA vA¡-oREs

1 st nName$ = " QBasic "


2 PRINT rr*rrr Spc(5); stnName$; Considenan eI punto y coma.
3 PRINT Spc(2); stnName$

Cuando la ejecución del programa llegue a estas líneas, la salida aparecerá en la pantalla co-
mo slgue:

QBasic QBas ic

El código obliga a PRINT a salta¡ 5 espacios antes de que aparezca el primer OBasic. Tras
dos espacios más, la segunda PRINT imprime QBasic también.

Si usted utiliza TAB ( ) en lugar de SPC ( ), QBasic se desplaza a la columna indicada por el
argumento entre los paréntesis e imprime ahí el siguiente elemento de datos. SPG ( ) obliga a
la siguiente impresión a comenzar cierta cantidad de espacios más adelante, mientras que
TAB ( ) obligaa la sigüente impresión a comenzar en una columna especlfica. Como ejemplo,
estudie el listado 9.3.

Lrsrnoo 9.3 CorurnolE EL EspAcrADo DE LA rNsrnucc¡óN pRINT coN LAs FUNcroNEs


rABO Y SPCo

StnName$ = "QBaSiC"
PRINT rr*,¡ TAB(5); strName$; TAB(20); stnName$
PRINT rr*r¡' SPC(5); strName$i SPC(2A); stnName$

En la segunda llnea, TAB( ) mantiene la impresión en columnas específicas, pero en la tercera


SPC ( ) desplaza la impresión una cierta cantidad de espacios.

a de este código es:


* QBasic QBasic
* QBasic QBasic

lmpresión en la impresora
Además de enviar la salida a la pantalla puede hacerlo también a la impresora. La instrucción
LPRINT envía datos a la impresora del mismo modo que PRINT. Si imprime cadenas LPRINT
denffo de comillas, se imprimen en la impresora tal cual. Si imprime variables y expresiones
sin las comillas, QBasic imprime los valores de dichas variables y expresiones.

El empleo de los puntos y comas y las comas con LPRINT provoca que los valores impresos
aparezcat uno tras otro o en la siguiente zona de impresión, respectivamente. El siguiente có-
digo imprime en la impresora los nombres por columnas.
' Ilustra eI uso de Ias comas
LPRINT "Sam", "Jesse", "Jackson", "Susan"
LPRINT "Christine", "Ron", "Jayne", "Martha"
LPRINT "Johnny", "Thomas", "Francis", "Kerry"
LPRINT "Kim", "Banbara", "Lea", "Wi1liam"
END

Con frecuencia, sus programas imprimirán tanto en la pantalla como en la impresora. Debido
a ello, aparecenjuntas instrucciones similares de salida, una enviando la salida a la pantalla y
la otra a la impresora.

Obtención de datos del teclado con INPUT


La instrucción INPUT es lo conffario de PRINT. Como lo muestra la figura 9.2, INPUT recibe
valores del teclado. Estos valores tecleados por el usuario son almacenados en variables. En
Entrada y salida 173
|

el capítulo anterior, aprendió a asignar valores a variables. Usted usó la instrucción de asigna-
ción porque sabía los valores. Sin embargo, no siempre conoce todos los valores al escribir el
programa.

Piense en un programa de recepción médica que lleva el control de los pacientes que entran
en la oficina de un doctor. El programador no tiene idea de quién entrará a continuación, así
que no puede asignar los nombres de los pacientes a las variables. Los nombres de los pacien-
tes se pueden almacenar en variables únicamente durante la ejecución del programa.

Cuando un programa llega a la insffucción INPUT, presenta un signo de interrogación y se de-


tiene hasta que el usuario teclea un valor y pulsa la tecla Intro (Enter). A continuación presen-
tamos una instrucción INPUT:

INPUT edad ' Espenan a que eI usuanio indique un valor'

Flcunn 9.2
INPUT recibe valores
del teclado durante ffiEEffi trtr
la ejecución del
programa.
trtr
El teclado
Variables del
programa

El signo de interrogaciónes una señal para el usuario de que se está solicitando la respuesta a
algo. ¿Cómo sabe el usuario qué se le pregunta? Es responsabilidad del programador inclür
una instrucción PRINT antes de cada instrucción INPUT que solicite al usuario el valor nece-
sa¡io. La instrucción PRINT solicita al usuario una entrada. Un mensaje de solicitud es una
pregunta que se hace antes de esperar una entrada del usuario. El mensaje de solicitud pone
una pregunta completa antes del signo de interrogación de INPUT. Observe las tres líneas que
siguen:

PRINT "áCuáI es su edad";


INPUT edad
PRINT , iGnacias!,,

Cuando la computadora llega a la primera PRINT, imprime el mensaje como de costumbre. El


punto y coma al final mantiene el cursor en la misma línea, así que lo que se imprima a conti-
nuación aparecerá tras la pregunta. ¿Recuerda lo que hace INPUT? Imprime un signo de inte-
rrogación. Gracias al punto y coma, el signo de interrogación aparece tras la pregunta y el
usuario ve esto:

¿cuáI es su edad?
4 Hora 9
"17

Las palabras aparecen debido a PRINT y el signo de interrogación se presenta gracias a INPUT.
El programa no prosigue con la siguiente instrucción PRINT hasta que el usuario responde la
pregunta inücando un valor y pulsando Intro.

Evite Ia tentación de poner un signo de interrogación al f¡nal de las pregun-


tas de solicitud de sus programas. Si lo hace, INPUT repet¡rá el signo de inte-
rrogac¡ón y los mensajes se verán en la pantalla como el siguiente:
tCuáI es tu edad??

Siga el programa del listado 9.4 y estudie la salida que aparece a continuación. Podrá ver có-
mo se llena una variable que no tiene valor por medio de una instrucción INPUT.

Ltsrnoo 9.4 INPUT REcTBE uN vALoR TEcLEADo poR EL usuARto

1: ' Demostración de Ia instnucción INPUT


2=
3: PRINT "Antes de INPUT, Iá vaniable x contiene"; x
4= PRINT
5: PRINT " óQué valon quiet'e que tenga x ahona " ;
6: INPUT X
7: 'x ahora tiene eI valon tecleado pot^ eI usuario
8: PRINT
Qr PRINT "Tnas INPUT, x contiene " ; x

1@: END

QBasic pone en ceros todas las variables al comienzo del programa. Esto significa que x es
cero hasta que le asigne un valor mediante INPUT. La siguiente es la salida del programa. El
usuario tecleó 27 como valor para x.

Antes de INPUT, Io vaniable x contiene O


óQué valor" quiere que tenga x aho ra? 27
Después de INPUT, x contiene 27

QBasic espera en la instrucciónTNPUT durante el tiempo que le lleve al usua-


rio teclear un valor como respuesta a dicha instrucción. La rNpuT termina
después de que el usuario ha pulsado la tecla lntro.
ü
trl

Entrada sa lida

Entrada de cadenas y variables múltiples


Cualquier tipo de variable, numérica o de cadena, se puede insertar con INPUT. Por ejemplo,
estas líneas esperan a que el usuario asigne un valor de cadena:

PRINT "iouál es tu nombre";


INPUT nombre$

El nombre que indica el usuario como respuesta a la pregunta se inserta en la variable nombr.e$.

Si el usuario sólo pulsa lntro (Enter), sin indicar un valor de respuesta a


INPUT, QBasic carga un valor llamado nulo en la variable, Un valor nulo es
un cero, si se trata de variables numéricas, o una cadena vacía, en el caso de
las variables de cadena. Una cadena vacía (una variable de cadena sin nada
en ella) literalmente tiene cero caracteres de longitud.

Una sola instrucción INPUT puede reunir más de un valor, si así lo requiere la aplicación. Pue-
de indicar más de una variable, con la separación de comas, tras la instrucción INPUT. La si-
guiente instrucción INPUT espera que el usuario teclee tres valoreS:

PRINT "¿CuáI es tu nombre, edad y salario";


INPUT nombre$, edad, salario
Este es un ejemplo de la ejecución de estas instruccrones:

áCuáI es tu nombre, edad y salario? Fred, 41, 1904.95

Observe que el usuario debe saber que son necesarias las comas entre los valores tecleados.
Si no lo hace, recibe un mensaje de error que dice Redo from start, un aviso no demasia-
do descriptivo. Este mensaje de error informa al usuario que los valores no se insertaron en el
formato esperado. Una de las desventajas de reunir varios valores con una sola instrucción
INPUT es que el usuario no siempre sabe cómo insertarlos. Es más seguro y apropiado pedir
cada valor de manera individual. Por ejemplo:

PRINT "JCuáI es tu nombne";


INPUT nombre$
PRINT "¿Qué edad tienes";
INPUT edad
PRINT "óCuánto ganas";
INPUT Salario

Este conjunto de tres instrucciones INPUT tiene menos probabilidades de generar errores du-
rante su ejecución. El usuario sólo tiene que insertar los tres valores uno por uno; no necesita
ocuparse de poner comas entre ellos. Observe cómo el siguiente programa guía al usuario pa-
so a paso a través de las preguntas:
Entrada v salida 175

Entrada de cadenas y variables múltiples


Cualquier tipo de variable, numérica o de cadena, se puede insertar con INPUT. Por ejemplo,
estas líneas esperan a que el usuario asigne un valor de cadena:

PRINT "¿CuáI es tu nombre";


INPUT nombre$

El nombre que indica el usuario como respuesta a la pregunta se inserta en la variable nombr e$.

Si el usuario sólo pulsa lntro (Enter), sin indicar un valor de respuesta a


INPUT, QBasic carga un valor llamado nulo en la variable, Un valor nulo es
un cero, si se trata de variables numéricas, o una cadena vacía, en el caso de
las variables de cadena. Una cadena vacía (una variable de cadena sin nada
en ella) literalmente tiene cero caracteres de longitud.

Una sola instrucción INPUT puede reunir más de un valor, si así lo requiere la aplicación. Pue-
de indicar mrás de una variable, con la separación de comas, fras la instrucción INPUT. La si-
guiente instrucción INPUT espera que el usuario teclee tres valores:
PRINT "¿CuáI es tu nombre, edad y salario";
INPUT nombre$, edad, salanio

Este es un ejemplo de la ejecución de estas instn¡cciones:

iCuáI es tu nombre, edad y salario? Fred, 4'1, 1904.95


Observe que el usuario debe saber que son necesarias las comas entre los valores tecleados.
Si no lo hace, recibe un mensaje de error que dice Redo from start, un aviso no demasia-
do descriptivo. Este mensaje de error informa al usuario que los valores no se insertaron en el
formato esperado. Una de las desventajas de reunir varios valores con una sola instrucción
INPUT es que el usuario no siempre sabe cómo insertarlos. Es más seguro y apropiado pedir
cada valor de manera individual. Por ejemplo:

PRINT "¿CuáI es tu nombne";


INPUT nombre$
PRINT "á0ué edad tienes";
INPUT edad
PRINT " ¿Cuánto ganas " ;
INPUT salanio

Este conjunto de tres instrucciones INPUT üene menos probabilidades Óe generar errores üu-
rante su ejecución. El usuario sólo tiene que insertar los tres valores uno por uno; no necesita
ocuparse de poner comas enüe ellos. Observe cómo el siguiente programa guía al usuario pa-
so a paso a ftavés de las preguntas:
Hora 9
1176

LCUáL es tu nombre? Fred


óQué edad tienes? 41
óCuánto ganas? 1 904.95

Combinación de PRINT e INPUT


Ha visto la importancia de imprimir mensajes de solicitud con PRINT antes de sus instruccio-
nes INPUT. Sus programas no deben presentar el signo de interrogación de INPUT sin imprimir
antes un mensaje que indique al usuario el tipo de enfrada que se espera. Los diseñadores de
QBasic reconocieron la importancia de presentar un indicador de solicitud con todos los INPUT
de los programas. Agregaron una característica a la instrucción INPUT para inclui¡ el mensaje de
solicitudjunto con la entrada. En lugar de tener pares de instrucciones PRINT-INPUT, puede
tener instrucciones INPUT individuales que solicitan al usuario y reciben la enffada.

Un ejemplo sencillo muestra el funcionamiento del mensaje de solicitud. Las siguientes ins-
trucciones deben ser viejas conocidas para usted. PRINT pregunta algo al usuario e INPUT ob-
üene la respuesta.
PRINT "¿CuáI es eI número de1 mes (por ejemplo, 1, 5 u 11)";
INPUT numMes

PRINT presenta una soücitud que indica al usuario la entrada esperada.

La siguiente es una instrucción equivalente. Hace lo mismo que la combinación PRINT-


INPUT, pero en una sola línea de código:

INPUT "¿CuáI es eI número del mes (por ejemplo, 1, 5 u 11)"; numMes

Esto es lo que ve el usuario cuando QBasic llega a esta línea del programa:
¿CuáI es eI número clel mes (por ejemplo, 1, S u 11)?
Entonces el usuario puede responder la pregunta dando a la variable numMes un número de
mes y el programa continúa su ejecución.

El listado 9.5 muestra un programa que podría servir a una tienda pequeña para el cálculo de
los totales en la caja regisfradora. Las instrucciones INPUT de este progrÍrma son obligatorias;
Hora 9
| 176

óCuáI es tu nombre? Fned


óQué edad tienes? 41
óCuánto ganas? 1 904.95

Combinación de PRINT e INPUT


Ha visto la importancia de imprimir mensajes de solicitud con PRINT antes de sus instruccio-
nes INPUT. Sus programas no deben presentar el signo de interrogación de INPUT sin imprimir
antes un mensaje que indique al usuario el tipo de enüada que se espera. [,os diseñadores de
QBasic reconocieron la importancia de presentar un indicador de solicitud con todos los INPUT
de los programas. Agregaron una característica a la instrucción INPUT para incluir el mensaje de
solicitudjunto con la entrada. En lugar de tener pares de insüucciones PRINT-INPUT, puede
tener instrucciones INPUT inüviduales que solicitan al usuario y reciben la entrada.

Un ejemplo sencillo muestra el funcionamiento del mensaje de solicitud. Las siguientes ins-
trucciones deben ser viejas conocidas para usted. PRINT pregunta algo al usuario e INPUT ob-
tiene la respuesta.
PRINT "áCuáI es eI número de1 mes (por ejemplo, 1,5 u 11)";
INPUT numMes

PRINT presenta una solicitud que indica al usuario la entrada esperada.

La siguiente es una instrucción equivalente. Hace lo mismo que la combinación PRINT-


INPUT, pero en una sola línea de código:

INPUT "áCuáI es eI número del mes (por ejemplo,'1, 5 u 11)"; numMes

Esto es lo que ve el usuario cuando QBasic llega a esta línea del progr¡rma:

ZCuáI es eI número del mes (por ejemplo, 1, 5 u 11)?


Entonces el usuario puede responder la pregunta dando a la variable numMes un número de
mes y el programa continúa su ejecución.

El listado 9.5 muesfra un programa que podría servir a una tienda pequeña para el ciálculo de
los totales en la caja regisfradora. Las instrucciones INPUT de este programa son obligatorias;
E ntrad a sa lida

Algunas preguntas no se pueden efectuar con una sola solicitud rrupur. Por

9 lo tanto, puede haber ocasiones en las que tenga que poner varias instruc-
ciones PRINT antes de una INPUT para describir la entrada que se espera. El
siguiente es un ejemplo que hace justamente eso:
PRINT "Ahona debes digitan los úItimos cuatro dígitos de tu"
INPUT "código postal ampliado. ¿lCuáIes son esos cuatno dígitos"; eZip

sólo al momento de su ejecución ser¡ín conocidos los importes de las compras del cliente. Co-
mo puede ver, la obtención de la entrada al momento de ejecución es vital para un procesa-
miento de datos "real".

LIsTnoo 9.5 INPUT PUEDE SIMULAR UN PRoGRAMA DE CAJA REGISTRADORA PARA


UNA TIENDA PEQUENA

1: ' solicÍtando aI usuanio varios valores


Demuestra INPUT
2= ' Ia caja negistradora de una tienda e imprime eI total
en de Ia venta
3: CLS 'Borra!^ Ia pantalla
4= pRrNT , "** Tienda de mamá y papá **,
5: PRINT
6: INPUT " áCuántas botellas de t'ef nesco se vendienon " ; pop
7: popTot aI = pop * .75
8: INPUT "óCuántas papas fnitas se vendienon"; chips
9: chipTotal = chips * 1.25
1@= INPUT " óCuántos litnos de gasolina se vendieJ'on " ; gas
11: EasTotal = gas * 1.19
12=
13: ' Calculan Ia venta total y suma 7% de impuestos
14: fuIISaIe = popTotal + chipTotal + gasTotal ' Venta total-
15: sTax=.@7 *fullSale
16: netSale = fuIISaIe + sTax
17=
18: ' La siguiente INPUT obtiene un valon nulo simplemente para detener eI
prognama
19: INPUT "Pulse Intno cuando esté listo pana Ia factuna..."; ans
2A: ' Impnimin una factuna en Ia pantalla
21
= PRINT
22= PR I NT
23= PRINT , " ** Factuna tienda de mamá y papá 'r* rl

24= PRINT
25; PRINT tr ************************************************* rr

26= PRINT pop; "botellas de nefnesco: ", popTotal


27: PRINT chips; " bolsas de papas: " , chipTotal
28= PRINT gas ; " Iit nos de gasolin€ri " , gasTotal
29= PRINT rr-- --rr
30: PRINT "Venta total: " , fuIISaIe
continúa
178 Hora 9
|

Lrsrnoo 9.5 coNTrruuacróru

31 : PRINT "Impuestos: ", sTax


32= PRINT "Gnan total: ", netSale
33: PRINT
34= PRINT " i Dan las gnacias aI cliente ! "
35: END

La ñgura 9.3 muesüa el resultado de la ejecución de este programa. Como puede ver, el pro-
grama sefa útil para una tienda pequeña.

Frcuna 9.3
I-a ejecución del
programa de caja
registradora produce
esta salida.

La cláusula USING
Hay un problema con el programa del listado 9.5; no imprime con dos posiciones decimales,
cosa que debe hacer un programa que calcula pesos y centavos. Puede usar una opción más
de la instrucción PRINT (o LPRINT), llamada USING. La opción USING describe de qué manera
se quieren imprimir los datos. Hay tanto en la instrucción USING que haría falta la hora com-
pleta para explicarlo. En este punto de su c¿urera como programador, probablemente necesita-
rá USING para imprimir dos posiciones decimales para los centavos. La impresión de moneda
probablemente es el uso más difundido de USING en QBasic.

QBasic no respeta los ajustes internacionales de Windows. Aún cuando en su


país se ut¡lice la coma decimal en lugar del punto decimal y de que W¡ndows
tenga los ajustes necesarios para su país, QBasic segu¡rá empleando el punto
decimal.
E ntrada sa lida

Ésta es una instrucción PRINT que asegura que la variable TOTAL imprima dos puntos deci-
males:

PRINT USING '#####.##'; total


El##+##.## puede parecer extraño. Es una cláusula de imagen que describe cómo debe verse
la variable que sigue. Si hubiese fres signos de número tras el punto decimal, el resultado se-
rían fres posiciones decimales, inclusive si todas fueran cero. Si total no tiene cinco dígitos
antes del punto decimal, en el número aparecerán espacios en blanco.

Cuando emplea PRINT USING, QBasic sigue el patrón de su cadena uslNc e


ignora el modo como imprimiría normalmente los valores. Por lo tanto, no
hay un espacio automático entre los números positivos si los imprime con
una cadena USING.

El listado 9.6 tiene varias instrucciones PRINT USING que muestran cómo imprimir las sali-
das en diferentes formatos.

Llsrnoo 9.6 Venlns opcroNEs PRINT USING AyuDAN A DEMosTRAR LA


INSTRUCC¡ÓN

' fmpnesión con PRINT USING


PRINT 2223.329 ' Espacio extna pana eI + imaginanio
PRINT USING '#### .##u ; 2223.329
PRINT USING '#### .#" ; 2223.329
PRINT USING '####.# ###.# ##.###"; 2223.329; 12; 12
PRINT USING '######, .##" ; 2223.329
END

La salida del programa es la siguiente:


2223.329
2223.33
2223.3
2223 .3 12.0 12.4@@
2,223 .33

Observe que PRINT USING determina Ia manera como aparecerá el número


impreso y que pRINT UsING no deja lugar para un signo más imaginario an-
tes de los valores positivos, como sucede con !a instrucción PnINT normal.
|
180 Hora 9

La última instrucción PRINT USING muestra que el poner una coma justo antes del punto de-
cimal en una cadena, USING ordena a QBasic que inserte una coma cada tercer dígito de la
cifra. La impresión de números con comas facilita su lectura.

El listado 9.7 presenta el mismo programa para caja registradora que vimos antes. Gracias a
las instrucciones PRINT USING, el programa imprime todas las salidas con dos números deci-
males, asegurando su redondeo a pesos y centavos antes de imprimirlas. La figura 9.4 muestra
la salida con un mejor aspecto.

L¡sreoo 9.7 Puroe MEJoRAR EL ASpEcro DE LAs crFRAs DE MoNEDA

1: ' Demuestra INPUT solicitando aI usuario varios valores


2i 'en 1a caja negistradona de una tienda e Ímprime el total de Ia venta
3: CLS ' Bonrar Ia pantalla
4: PRINT , "** Tienda de mamá y papá **"
5: PRINT
6i INPUT "éCuántas botellas de refresco se vendieron"; pop
7: popTotal = pop * .75
8: INPUT "éCuántas papas fritas se vendieron"; chips
9: chipTotal = chips * 1.25
10: INPUT "ZCuántos litnos de gasolina se vendieron"; gas
11: gasTotal = gas * 1.19
12:
13: ' Calcu1ar Ia venta total y sumar 7% de impuestos
14: fuusale = popTotal + chipTotal + gasTotal ' Venta total
15: sTax = .07 * fullSale
16: netsale = fullSale + sTax
17i
18: ' La siguiente INPUT obtiene un valor nulo simplemente para detener eI
programa
19: INPUT "Pulsan Intro cuando esté listo para Ia factura..."; ans
zo't 'Imprimir una factura en Ia pantalla
21: PRINT
22: PRINT
23: PRINT, "** Factuna tienda de mamá y papá **'
24: PRINT
25: PRINT tr*************************************************tr
26: PRINT USING "## botellas de nefresco:, ###.##,,; pop; popTotal
27: PRINT USING '## bolsas de papas:, ###.##,,; chips; chipTotal
28: PRINT USING '## litros de gasolinat ###.##,,; gas; gasTotal
29: PRINT
30: PRINT USING "Venta total: ####,.##'; fuIISaIe
31 : PRINT USING 'Impuestos: ###, .##"; sTax
32: PRINT USING "cran total: ####,.##,; netsale
33r PRINT
34: PRINT "¡Dar las gracias aI clientel,,
35: END
E ntrada sa lida

Freunn 9.4
La salida se ve mucho
meJor con PRINT
USING.

Cuando tenga que obtener datos del usuario que podrían contener algunas comas, digamos
una dirección, emplee LINE INPUT en lugar de INPUT. Cuando sospeche que el usuario po-
dría escribir una coma como parte del valor de entrada, tendrá que obtener el valor mediante
LINE INPUT. LINE INPUT es exactamente como INPUT, excepto que con ésta sólo puede ob-
tener una cadena de entrada. Esta cadena puede incluir cualquier carácfet Sin embargo, no
se permite una coma en la instrucción INPUT, pues sería elcarácter de separación si se estu-
viese cargando más de una variable con una sola INPUT.

Las siguientes instrucciones llenan una variable de cadena, permitiendo que el usuario teclee
comas durante la entrada, si así lo desea:

LINE INPUT "ZCuáI es tu dirección? "; addr$

Si quiere que el usuario inserte un apellido separado del nombre mediante una coma, se nece-
sitará emplear LINE INPUT para hacer la solicitud.

LINE INPUT no genera un s¡gno de interrogación de manera automática, por


lo que debe ponerlo al f¡nal de la solicitud, si le hace falta.

Resumen
El dominio de la entrada y la salida haúla üferencia entre un programa que le guste a los
usuarios y uno que odien. Si etiqueta de manera adecuada las entradas, solicitando a los usua-
rios lo que se desea durante el proceso de entrada, no tendriín dudas sobre su formato corec-
to. La obtención de los datos de entrada en formato correcto es importante para QBasic pues,
a diferencia de los programas en Windows, los programas QBasic no manejan los cuadros de
i 182 Hora 9
I

entrada de datos ni los campos de edición elegantes que permiten muchos controles de
Windows.

La siguiente hora describe la manera de controlar la ejecución de un programa con el lenguaje


QBasic. Un programa en QBasic toma decisiones basadas en los datos que se le suministran.

Preguntas y respuestas
P ¿Existe la instrucción ¡rpur us¡rc?
R No. La cláusula US I NG sólo es p¿ua salida, pues ésta es la que se necesita para dar for-
mato. Los datos vienen en toda clase de formatos, pero habrá ocasiones en que desee
ciertos formatos que pueden ser un tanto diferentes de sus formatos nativos.
P ¿Cómo puedo dar formato a valores de salida que quiero enviar a la impresora
con LPRINT?
R ¡Con 1a cláusula USING! LPRINT funciona igual que PRINT y esto significa que se pue-
den dar comandos LPRINT USING que hacen lo mismo que sus contrapartes PRINT
USING.

Taller
Las preguntas del cuestionario se presentan para una mayor comprensión. Vea las respuestas
en el apéndice A.

Cuestionario
1. ¿Por qué aparece con frecuencia un espacio en blanco antes de los valores que imprime
un programa?
2. Verdadero o falso; QBasic deja el espacio en blanco antes de los números tanto positi-
vos como negativos.
3. ¿Qué hace el punto y coma en una instrucción PRINT?
4. ¿Qué es una función intema?
5. ¿Cuál es la üferencia entre la función SpC ( ) y la función TAB ( ) ?
6. ¿Qué hace la cláusula USING?
7. ¿Qué instrucción obtiene los valores ingresados por el usuario?
8. ¿De qué manera se pueden aceptar comas como entrada si las comas son parte del valor
que se ingresa?
9. Verdadero o falso: una instrucción INPUT puede recibir más de un valor.
10, ¿Por qué es importante solicitar al usuario una entrada?
ffiffiffiA 10
Procesamiento de datos
con aBasic
La lección de esta hora ampliará su conocimiento de QBasic mostrándole la ma-
nera de comparar valores y de repetir secciones de los programas QBasic. Las
respuestas del usuario o los resultados de los cálculos pueden controlar el flujo
del programa. Esta lección le enseña cómo escribir programas que toman deci-
siones. El código a veces necesita repetir secciones para completar el procesa-
miento de varios valores de datos. Aprenderá a cnear ciclos para hacer
precisamente eso.

Con los conceptos que aprendeút en esta lección, podrá escribir poderosos pro-
gramas que hagan 1o que necesite. Se descubirá pensando en nuevas ideas y
maneras de ttllizat su computadora.

Los puntos relevantes de esta hora son:


. Cómo toma decisiones QBasic
. Qué hace la instrucción I F

. Cómo afecta Ia instrucción ELSE las decisiones


I 184
I
Hora 10

. Cómo repetir partes del código


. Cuál es la diferencia entre los distintos tipos de instrucciones de ciclos de QBasic
. De qué manera se pueden hacer diagramas de flujo de lógica para crear ciclos y tomar
decisiones.

Comparación de datos con I F


El constructor de decisión de la programación estructurada es muy fácil de implementar con
QBasic. El constructor de decisión se representa en los diagramas de flujo mediante un sím-
bolo de decisión que siempre tiene dos salidas. De igual manera, una instrucción de decisión
en QBasic siempre tiene dos posibilidades. Para decidir la ruta a tomar en un programa QBa-
sic, debe valerse de la instrucción IF. La mayoía de los lenguajes de programación tienen
una instrucción IF que funciona como la de QBasic.

El listado 10.1 muestra un ejemplo de un progrzrma que contiene una instrucción IF. Aún
cuando nunca haya visto una instrucción IF de QBasic, es probable que no tenga ningún pro-
blema para determinar lo que hace este programa.

Llsrnoo 10"1 EvtpleE UNA rNsrRuccróN IF cunNDo eutERA euE su pRoGRAMA


TOME UNA DECISIÓN

1: ' Decisión sobne la comisién a pagan a un vendedon


2: INPUT "áCómo se llama eI vendedon"; nombnev$
3: INPUT "óCuáI fue su total de ventas pana eI mes pasado"; ventas
4:

6: comision = @

7= diaslibres = @

B: ELSE
9: comision = 25
1A= diaslibres = 2
11: END IF
12=
1 3 : PRINT
14= PRINT nombreV$; " ganó una comisión de"; comision;
15: PRINT "y necibe"; diasLibnes; "días 1ibnes."
1 6: END

Vea los siguientes dos ejemplos de ejecución del programa. Preste atención al hecho de que el
programa genera una comisión distinta dependiendo de las ventas totales del vendedor. El pri-
mer ejemplo de ejecución es éste:
iCómo se llama el vendedor? Jim
áCuá1 fue su total de ventas deI mes pasado? g2g4.4g
Jlm ganó una comislón de 0 y recibe O días libr.es.
Procesa m iento datos 185

El vendedor no recibió una comisión, pues sus ventas no fueron lo bastante altas. Observe la
diferencia en el siguiente ejemplo:

éCómo se llama eI vendedor? Jane


¿lCuáI fue su total de ventas deI mes pasado? s642.34
Jane ganó una comisión de 25 y r'ecibe 2 días libres.
El programa ofrece un control completo sobre las dos opciones gracias a la instnrcción IF. La
figura 10.1 muestra el diagrama de flujo del programa. El símbolo de decisión es representa-
do en el programa por la instrucción IF.

Frcunn 1 0.1 rNtcro


El símbolo de decisión
del diagrama de flujo
ilustra la naturaleza de
la instrucción LF del Obtener las ventas
programa de vende- del mes anterior
dores.

Días libres
son 0

Días libres
son 2

lmprimir
resultados

IF funciona ta1cual se lee en inglés. Sl Ia instrucción a la derecha de IF es verdadera, enton-


ces se ejecutan instrucciones a continuación de ella. Observe que se requiere la palabra
1as
THEN. Si la instrucción a Ia derecha de IF no es verdadera, entonces se ejecuta el bloque de
instrucciones a continuación de ELSE. La cláusula ELSE es opcional; sin ella, usted prueba si
se ejecutará un solo bloque de instrucciones. Por ejemplo, la siguiente es una instrucción IF
que imprime un mensaje únicamente si es verdadera la instrucción a la derecha de IF. Si es
falsa, y no existe ELSE, el programa continúa en la línea después de END IF:

IF (edad < 18) THEN


PRINT "No tienes Ia edad suficiente"
END IF
186 Hora 10
|

END I F siempre marca el final del conjunto de instrucciones de I F. Sea cual sea el resultado
de la I F, siempre se ejecutan las instrucciones siguientes a END I F después de terminada
la IF.

Los paréntesis que encierran la instrucción a la derecha de IF no son obliga-


torios, pero dejan en claro lo que se está probando. Esta instrucción a la
derecha de rF, encerrada entre paréntesis, se llama prueba relacional.

Escritura de la prueba relacional


La instrucción IF se lee como se leería en español: si (IF) algo es verdadero, entonces (THEN)
haz una cosa; de lo contrario (ELSE) haz otra cosa. Cuando habla usando una condicional, no
siempre añade un de lo contrario, y tampoco es necesario tener un ELSE en QBasic. Conside-
re las siguientes instrucciones:

Si gano suficiente dinero, me jubilaré antes de tiempo.

Si vas a estar fuera tarde, lldmame, de lo contrario, te meterás en problernas.

Sivienes por estos rumbos, cenaremos juntos.

Como lenguaje de programación, QBasic es bastante estricto sobre la manera como se lleva a
cabo la prueba IF. La prueba relacional, es deci¡, la instrucción a la derecha de IF, siempre
inc§e alguno de los símbolos de la tabla 10.1.

TIsLA 1O.1 OpennDoREs RELAcToNALES DE LA rNsrRucctóN IF


Operador Descripción Ejemplo
Menor que
Mayor que
Igual que IF(edad = 21\ THEN

Mayor o igual que IF (calificacion )= 90) THEN

Menor o igual que F (precio (= 1.00) THEN


Diferente

Aprendió acerca de los operadores matemáticos en la hora 8, "Su primer lenguaje: QBasic".
QBasic proporciona estos operadores relacionales para que pruebe ciertas condiciones con las
insffucciones IF. Siempre hay dos posibilidades con los operadores relacionales. Alguna cosa
o es menor que otra, o lo contrario. Algo es mayor que otra cosa, o no. Algo es igual que offa
cosa, o no lo es.
Procesa m iento QBasic

Las dos posibilidadesque permiten las operaciones relacionales son el medio

9 para duplicar el símbolo de decisión con dos salidas de los diagramas de


flujo. Un símbolo de decisión tiene dos resultados posibles, al igual que rr.
rr puede ser verdadero o falso.

Las instrucciones que siguen a THEN y a ELSE pueden ser cualquiera de las de QBasic. Cuan-
do ELSE contiene una IF en su bloque, debe combinar ELSE e IF en una sola instrucción:
ELSEIF. Esta regla del lenguaje QBasic es más fácil de entender de lo que parece. El listado
10.2 contiene un conjunto de instrucciones IF que imprime pnimero, segundo, tercero
o cuarto, dependiendo del número que indique el usuario.

LISTEOO 10.2 UruE IF CON UNA ELSE SE DEBE CONVERTIR Eru IruSTNUCCIÓN ELSEIF

1: ' ImpnÍme una descnipción basada en eI númeno del usuanio


2: INPUT 'óCuántos años llevas en Ia escuela " ; años
3: IF (años = 1) THEN
4z PRINT " Éste es tu pnimen año "

5: ELSEIF (años = 2) THEN


6: PR I NT " Éste es tu segundo año "
7= ELSEIF (años = 3) THEN
8: PRINT " Éste es tu tercen año "
Qr ELSEIF (años = 4) THEN

1@: PRINT "Éste es tu cuanto año"


11: ELSE PRINT "No indicaste 1 , 2, 3 ni 4u
122 END IF
13: END

Como lo muestra este programa, por medio de la instrucción IF puede probar si el usuario
inserta datos aceptables. Esto se conoce como validación de entrada. Puede validar algunos
valores de entrada para asegurÍuse de que el usuario ha insertado lo esperado. Por ejemplo,
puede comprobar una edad para asegurarse de que es mayor que 0. No siempre hay una ma-
nera de determinar si el valor de la entrada del usuario es precisamente el correcto, pero es
posible revisarlo y saber si es razonable.

La instrucción SELECT CASE


Hay un tipo especial de instrucción de decisión en QBasic que se llama SELECT CASE. Ésta es
útil para probar varias condiciones. Aunque cada condición sólo tiene dos posibilidades, como
es el caso de las conüciones IF, SELECT CASE puede reemplazar una serie de instrucciones
IF dentro de otra instrucción IF, como en el programa del listado 10.2.
SELECT OASE es muy sencillo de entender. El listado 10.3 muesfta una nueva versión del pro-
grama del listado 10.2.
Lrsrnoo 10.3 El ¡MpLEo OT SELECT CASE pnnn SELEccIoNAR ENTRE VARIoS
RESULTADOS DE UNA PRUEBA SIGNIFICA UNA MEJORA SOBRE VARIAS INSTRUCCIONES
I F ¡rucnUsTADAS

1: ' Impnime una descnipción basada en el númeno del usuanio


2: INPUT "éCuántos años llevas en Ia escuela"; años
3:
4: SELECT CASE anos
5: CASE 1
6: PRINT " Éste es tu pr-imer. año "
7: CASE 2
8: PRINT " Éste es tu segundo año "
9: CASE 3
1@: PRINT " Éste es tu tercen año "
11: CASE 4
12= PRINT "Éste es tu cuanto año"
13: CASE ELSE
14= PRINT "No indicaste 1, Z, 3 ni 4u
15: END SELECT
16: END

En este programa hay cinco casos posibles. El usuario puede indicar 1,2,3, 4 u otra cosa. se
ejecuta el caso que es igual a la entrada del usuario, pero no los demás. SELECT CASE es útil
para sustituir las, ligeramente más complieadas, instrucciones IF denffo de otras IF.

Use las instrucciones IF cuando deba seleccionar entre una o dos condicio-

9 nes relacionales. Si hay más condiciones relacionales que probar, es más sen-
cillo escribir y entender una SELECT CASE.

lnstrucciones de ciclos
Las instrucciones de ciclos son otra característica importante de cualquier lenguaje de progra-
mación' QBasic ofrece varias instrucciones que contolan los ciclos. Su computadora nunca
se aburrirá ya que creará ciclos una y otra vez, repiüendo instrucciones con rapidez a medida
que se necesite.

Los ciclos tienen muchos usos. Un ciclo puede servir para pedir al usuario los datos de varias
personas, calcular un total combinado e imprimir varias líneas de datos. Las ftes insffucciones
principales de ciclos son:

. ciclos F0R...NEXT
. ciclos D0...UNTIL
. ciclos D0. . .WHILE
Procesamiento de datos con QBasic 18e
I

Las siguientes secciones describen estas instrucciones.

EI ciclo FOR. , . NEXT


El ciclo FOR. . . NEXT es en realidad un ciclo de instrucciones encerradas entre la instrucción
FOR y la NEXT . Antes de pasar a la instrucción FOR. . . NEXT, será útil una ver analogía con
cuestiones cotidianas. Como sucede con IF, los ciclos FOR son maneras naturales de expresar
ideas. Por ejemplo, considere la siguiente descripción:

Para cada una de las facturas de hoy:


$ compnoban Ios datos de Ia factura,
t suman eI total de Ia factura aI total de ventas dianias.
t Ver Ia sÍguiente factuna.
De esta descnpción que calcula la suma total de las facturas puede deducir que sucede un
proceso repetitivo. Si hay cinco facturas, el proceso se repite para cada una de ellas,

El ciclo FoR de la computadora funciona como el concepto para cada descripción de la factu-
ra (por ello se le llama FOR, que en inglés significa para). A fin de ayudarle a entender el mé-
todo de ios ciclos FOR, el listado 10.4 muesffa un ciclo sencillo que explica las instrucciones
FoR y NEXT,

LISTAOO 1O.4 COTINOL DE UN CICLO DE CONTEo PoR MEDIo DE FOR Y NEXT

' Pnimen pr"ognama F0R...NEXT


' Este pnognama impnime los númenos 1a5
CLS
FORr=1T05
PRINT 1
NEXT 1
END

Ésta es la salida del pro grama del listado lO.4:

ffi@r
1

2
3
4
5

Las instrucciones FOR y NEXT funcionan en pareja; encierran una o varias instrucciones. Las
instrucciones dentro del ciclo FOR. . . NEXT se repiten hasta que éste termina. El ciclo es con-
trolado por la variable de la instrucción FOR. En el programa del listado l0.4,la variable de
control es i (puede ser cualquier nombre de variable). La instrucción FOR dice lo siguiente:
para cada i (teniendo i un vaTor de 1 7a prinera vez, de 2 7a segunda y
asj hasra 77egar a 5), 7leva a cabo la instrucción entre FOR y NEXT.
1e0 Hora 10
I

Como puede deducir del listado 10.4, el ciclo FOR...NEXT incrementa auto-
máticamente (suma uno a) !a variable de control. El cuerpo del ciclo FoR (la
instrucción o instrucciones entre FOR y NEXT) hace un ciclo por cada incre-
mento de la variable, hasta que ésta llega al último valor especificado en la
instrucción.

El listado 10.5 muestra un programa que hace lo mismo que el 10.4, pero sin un ciclo FOR.
Como puede ver, el ciclo FOR simplifica la codificación de instrucciones repetitivas. (Conside-
re lo sencillo que sería imprimir los números del 1 al 200 mediante una instrucción
FOR. . . NEXT, en lugar de escribir doscientas líneas de código para imprimirlos según el
método del listado 10.5.)

LISTNOO 10.5 Ln IMPRESIÓN SIN UN cIcLO FOR. . . NEXT sE VUELVE TEDIoSA

1 : ' Impnime de1 1 aI 5 sin una inst nucción FOR...NEXT


2: CLS
3: i = 1

4.. PRINT i
5: i = 2
6: PRINT i
7= i = 3
8: PRINT i
9: i = 4
1@: PRINT i
11: i = 5
12= PRINT i
13: END

No es necesario que imprima el valor de la variable del ciclo como se hace en el listado 10.5.
Con frecuencia, un ciclo FOR conftola un conjunto de instrucciones, determinando la cantidad
de veces que se repiten dichas instrucciones, sin usar la variable de control para otra cosa. El
listado 10.6, controlado mediante un ciclo FOR, imprime 15 veces un mensaje.

Llsrnoo 10.6 Ln tMpREStóN DE uN MENsAJE vARtAS vEcEs MEDTANTE uN ctcLo Es


EFIC¡ENTE

1: ' Pnognama de impnesión de mensaje


2= CLS
3: FOR i = 1 T0 15
4= PRINT " i FeLiz cumpleaños ! "
5: NEXT i
6: END
Procesamiento QBasic

oto ejemplo aclarará mejor esto. vea el programa del listado 10.7. con é1, un maesfro podría
imprimir una üsta de calificaciones. El programa solicitará al maesúo la cantidad de calificacio-
ne§ que insertará. Con esa respuesta, repetirá una serie de insfrucciones, preguntando el nombre
y la calificación del siguiente alumno. A medida que el profesor inserta los datos, se
los valores en la impresora. Al final del programa hay un fistado completo de los nombres y las
calificaciones. (Durante la hora 17, "Algoritmos de programación", aprenderá cómo programar
un acumulador para sumar todas las calificaciones e imprimir el promedio del grupo.)

Llsrnoo 10.7 cue¡¡oo sE coDrFrcA coN uN crclo, Es rAct securR uN pRoGRAMA


oe lupneslótrt DE cALtFtcActoNEs

1: 'Programa de impt'esión de califÍcaciones


2: CLS
3:
4: PRINT , "** Pt^ognama de impnesión de calif icaciones ** rr

5: PRINT
6: INPUT "óCuántas pt-uebas hay hoy"; n umP f"u ebas
7: PR I NT
8:
9: LPRINT ** Calificaciones de Ia pnueba **rr
1@: LPR I NT
11: LPRINT "Nombne",, "Cdlificación',
12: FORr=lT0numPnuebas
13: INPUT áCuá1 es el- nombne del siguiente estudiante"; Nombne$
14: PRINT áCuá1 es Ia calif icación de ,, ; Nombr-e$;
15: iNPUT caIlf
16: NT Nomb ne$
LPR I , , cdlif
17: NEXT i
18: END

La figura 10.2 muestra la salida del programa del listado 10.7. Si el maestro tiene cinco estu-
diantes, el cicio FOR sucederá cinco veces. Si el maestro dice que son diez estudiantes, seriín
diez ciclos. Dado que el valor ingresado por el maesfro controla el ciclo FOR, se trata de un
programa de propósito general que puede manejar cualquier cantidad de estudiantes.

El siguiente es un listado de la salida del programa si los nombres y calificaciones se insertan


como se muestra en la figura 10.2:
* * Calificaciones de Ia pr"ueba **
Nomb ne CaI if ic ac ió n
Joe Sant iago 87
Kim Moore 98
Eddie Kenr"y 56
Maggle Smith 73
Car"I Jones 100
Flcunn 10.2
La ejecución del
programa de impresión
de calificaciones
presenta el ciclo.

Control del ciclo FOR


Hay offas maneras de conftolar un ciclo FOR. Puede hacer que la variable de control se incre-
mente en algún valor distinto de I cada vez que se realiza un ciclo. También puede hacer que
la variable cuente de manera descendente, no ascendente. La inclusión de la opción STEp
en la instrucción FOR permite que la variable de control cambie a un valor distinto, sea en una
cantidad positiva o negativa.

El listado 10.8 muesüa un programa que cuenta de manera descendente del 10 al 1 y luego im-
prime iDespegue I al final del ciclo. Para rcaTizar la cuenta regresiva se ha empleado un valor ,

La instrucción FOR dice que se solicita un ciclo en el que 1 disminuya de 10 a


STEP negativo. 1.
cadavez que sucede un ciclo, se suma -1 a i, lo que causa el conteo descendente.

Llsrnoo 10.8 El cotvrEo REGREstvo DE 10 a 1 es sENctLLo coN uN ctcLo FOR


1: ' Pnograma de conteo r"egr-esivo
2= CLS
3:
4= FOR i = 1A T0 1 STEP -1
5: i
PRINT
6: NEXT i
7:
8: PRINT "iDespegue!"
9: END

Esta es la salida del programa:


Procesamiento de datos con QBasic 1e3
|

1@

9
I
7
6
5
4
3
2
1

i Despegue !

Puede indicar cualquier valor para una cifra STEP. El listado 10.9 muestra un programa que
imprime los números pares menores de 15 y luego los números nones hasta el 15. Dos ci-
clos controlan el conteo. El primero inicia en 2 el conteo y el segundo en 1. Cada ciclo su-
ma un valor STEP de 2 al valor FOR inicial para generar los conjuntos de números positivos
y negativos.

Lrsrnoo 10.9 lvrpn¡sróN DE Los pRrMERos NúMERos pARES y NoNES coN LA


OPCIÓN STEP

1: ' Impnimin los primenos números panes y nones


2= CLS
3:
4= PRINT "Númenos par"es del 2 aI 14i"
vl¡FOR numeno = 2 T0 15 STEP 2
6: PR I NT n ume f'o
7: NEXT numeno
8:
Qr PRINT " Números nones del 1 aI 1 5: "
1A= FOR numeno = 1 T0 15 STEP 2
11: PRINT numeno
12: NEXT numeno
13: END

La figura I0.3 muestra la salida de este programa.

Un ciclo FOR también sirve para salir antes de tiempo, gracias a la instrucción EXIT FOR. Ha-
brá veces en que se espere un ciclo repetido una cantidad fija de veces, como 1o especifica la
variable de control de FOR. Luego, gracias a una entrada especial del usuario, tendrá que salir
del ciclo FOR antes de tiempo. La instrucción EXIT FOR provoca la salida de un ciclo cuando
QBasic llega a ella. El listado 10.10 muestra el funcionamiento de EXIT FOR. Durante la hora
ll, 'Administración de datos y archivos en disco", aprenderá a usar EXIT FOR cuando quiera
pedir al usuario datos de üsco.
1e4 Hora 10
|

F¡cune 10.3
Impresión de algunos
números pares y nones.

LISTNOO 1O.f O LN INSTRUCCIÓN EXIT FOR TERMINA UN clcLo FOR DE MANERA


ANTIC¡PADA

1: ' Empleo de EXIT FOR para salin de un ciclo FOR


2: ' antes de su tenminación natunal.
3: CLS
4: FORi=1T0100 'Normalmente eI ciclo sucedená 1@O veces
5: PRINTi 'Impnimelos númenos del t hasta, cuando
mucho, eI 1A@
6: INPUT " óContinuan (S/N)"; resp$ ' Preguntar si eI usuanio desea
cont inuan
7= IF 1nesp$ = "N") THEN
8: EXIT FOR ' Tenminan antes, si así Io quiene eI usuanio
9: END IF
1@= NEXT i
11: PRINT .' iESo eS todo, amigos ! "
12= END

Éste es un ejemplo de la ejecución de este programa. Observe que el ciclo FOR se habría ejecuta-
do 100 veces, imprimiendo los números del I al 1ü), si el usuario no hubiese terminado el pro-
ceso anticipadamente al indicar una respuesta N a la solicitud, como se puede ver a continuación:
1

ácontinúa (s/N)? s
2
éContinúa (S/N)? S
3
écontinúa (s/N)? s
4
óContinúa (S/N)? N
iEso es todo, amigos!
El ciclo FOR proporciona mucho control sobre el ciclo, pero está diseñado para contar a fravés
de los valores del ciclo de control. No todos los ciclos se pueden determinar contando una va-
riable. A veces se requieren ciclos que se repitan mienfras una condición sea verdadera o has-
ta que se cumpla cierta condición.
Procesamiento de datos con QBasic 195

La variable después de NExr es opcional. Los dos ciclos FoR...NExr siguientes

9 son idénticos:
FORi=1T010
PRINT i
NEXT i

FORi=1T010
PRINT i
NEXT

Observe que la variable llamada i no aparece tras el último NExr, pero está
implícita.

Es posible anidar un ciclo dentro de otro. Tales constructores anidados pueden parecer avan-
zados para los novatos, pero es muy sencillo entenderlos si se considera lo que sucede cuando
hay que llevar a cabo un ciclo más de una vez. Puede escribilr el ciclo dos veces, uno en se-
guida del otro, o puede encerrar el ciclo dentro de otro, que ejecuta su cuerpo dos veces. La
hora lT, "Algoritmos de programación", explica a detalle los ciclos anidados.

EI ciclo 00. . .ltlIHILE


El ciclo D0. . .WHILE ofrece una manera de confrolar ciclos por medio de una prueba relacio-
nal. La prueba relacional del ciclo usa los mismos operadores relacionales que se us͡ron con
las instrucciones IF (vea en la tabla 10.1 la lista completa de los operadores relacionales).

Suponga que el profesor del programa de impresión de calificaciones desconoce la cantidad


de estudiantes que tomaron el examen y no quiere tomarse el tiempo de contarlos. Dado que
hay que especificar la cantidad total de pruebas para confrolar el ciclo FOR, es necesario offo
método. El listado 10.1 1 muestra el mismo programa, pero confrolado por un ciclo
00. . .WHILE. Observe que el ciclo D0. . .WHILE se repite mientras ciefa condición sea verda-
dera. La condición es la respuesta del maestro a la pregunta sobre más calificaciones.

Lrsnoo 10.1f Pueoe corumolAR LA ttvrpnesróru DE cALrFrcAcroNEs coN uN crcLo


DO...WHILE

' Pr^og nama de impnesión de calif icaciones que emplea DO...WHI LE


CLS

PRINT , " ** Pnognama de impnesión de calif icaciones ** rr

PRINT

LPRINT rr ** Calif icaciones de Ia pnueba ** rr

LPR I NT

coninúa
i 196 Hora 10

Lrsrnoo 1 0.1'l coNTrruunclóru

9: LPRINT "NombF0", , "CaIificación"


1@: D0
11: INPUT "áCuáI es el- nombne del siguiente estudiante"; nombneE$
12= PRINT " ócuál- es la carif icación de " ; nombneE$ i
1 3: INPUT calif
1 4: LPRINT nombno$ ¡ ¡ calif
1 5: INPUT " óHay más calificaciones (S/N) " ; nesp$
16: L00P WHILE (nesp$ = "S")
17: END

Este programa continúa repitiéndose hasta que el maestro indica que ya no hay más califica-
ciones. Observe que el cuerpo del ciclo está encerrado entre las instrucciones D0 y L00p
WHILE, y que WHILE va seguido por una prueba relacional, cuyo resultado (verdadero o falso)
determina si se repite o se termina el ciclo.

El ciclo D0. . .UNTIL


El ciclo D0. . . UNTIL es similar al ciclo DO. . .WHILE que presentamos en la sección anterior.
D0...WHILE se repite mienffas la condición relacional sea verdadera; DO. ..UNTIL lo hace
mientras la condición relacional sea falsa.

La selección entre D0. . .WHILE y D0. . .UNTIL depende de su aplicación. Los puede usar de
manera intercambiable en la mayor parte de los programas; sólo asegúrese de invertir la prue-
ba condicional. El siguiente es un ciclo D0. . .WHILE:
DO
PRINT 'A"
INPUT "¿otna vez"; resp$
L00P WHILE (resp$ = 'S")

Sigue el mismo código, pero con un ciclo D0. . . UNTIL:


DO
PRINT 'A"
INPUT "¿0tra vez?"; resp$
L00P UNTIL lresp$ = 'trl" )
Las pruebas que se llevan a cabo en ambos ciclos son opuestas. El primer programa se repite
mientras cierta condición sea verdadera; el segundo hasta que cierta condición sea verdadera.
La figura 10.4 muestra diagramas de flujo para ambos ciclos. La pregunta del símbolo de de-
cisión es distinta, pero la lógica es la misma.

El listado 10.12 muestra cómo usar el ciclo Do . . . UNTI L para controlar un juego de adivinan-
za de números. La computadora pide repetidamente al usuario un número hasta que éste es
igual al de ella.
Procesamiento de datos con QBasic 1e7
1

Lrsrnoo 10.12 Uru tuEco DE ADtvtNANzA DE NÚVITNOS SE PUEDE VALER DEL CICLO
DO. . . UNTIL PARA PEDIR Los VALoRES

1: ' Juego de adivinanza de númenos


2: CLS
3:
4= numenoComp = 47 ' EI númeno de Ia computadona
5:
6: PRINT " Estoy pensando en un númeno. . . "
7= PRINT "Tnatan de adivinarlo. "

8: PRINT
Qr

1A= DO
11: INPUT "áQué númeno (entne 1 y 100_) piensas que es"; numeno
12= L00P UNTIL (numeno = numenoComp)
13:
14: PRINT " iConnecto! "

15: END

F¡cunn 10.4
Diagramas de flujo de
los dos ciclos DO.
Cuerpo
del ciclo
DO.WHILE

Ciclo D0 - WH I LE

Cuerpo
del ciclo
DO-UNTIL

./ ¿Es \
falsa Ia prueba
relacional

Ciclo D0 - UNT I L
1e8 Hora 10
|

La figura 10.5 es un ejemplo de la ejecución de este progmma. Do.. .UNTTL es la instruc-


ción de contol perfecta, pues el programa debe repetirse, piüendo otro número, hasta
que el usuario indica el correcto.

Fre unl 10.5


Se requiere de suerte
para adivinar el
número de la
computadora.

El programa del listado 10.12 es bastante soso y no requiere habilidad, sino


intuición. En la hora 17, "Algoritmos de programac¡ón", dprenderá cómo
añadir algunos pasos de comprobación para convertir el programa en un
juego que comb¡ne la suerte con un poco de habilidad, volviendo intere-
santes las cosas.

QBasic de hecho maneja dos pares de ciclos D0. . .WHILE y 00. . .UNTIL. En lugar de poner
la prueba condicional al final de los ciclos, puede ponerla al inicio. Los siguientes son ejem-
plos de dichos ciclos:
D0 wHrLE (A < B)
INPUT "éCuántos años faltan"; B
LOOP

D0 UNTIL (A < B)
INPUT "¿Cuántos años faltan"; B
LOOP

La colocación de las pruebas condicionales determina si el cuerpo del ciclo se ejecuta cuando
menos una vez. Las versiones de los ciclos que aprendió antes en esta lección siempre ejecu-
tan sus cuerpos (el código a continuación de las instrucciones D0 y LOOP) cuando menos una
vez. Al poner la prueba condicional al inicio de los ciclos, como parte de la instrucción D0,
cambia la lógica, de manera que se pueda o no ejecutar el cuerpo cuando menos una vez. Si
Procesa m iento

los valores iniciales de la prueba condicional hacen que la lógica D0 falle, nunca se ejecuta el
ciclo y el programa continúa en la instrucción que sigue a la instrucción LOOp.

Los requerimientos de su programa determinarán si se pone la prueba con-


dicional al inicio o al final de un ciclo. Por ejemplo, en el listado 10.12 el
usuario debe indicar un número cuando menos una vez, o más, si no adivina
en la primera ocasión. Por tanto, la siguiente DO con la condicional al inicio
del ciclo no funcionará en ese programa en particular; pues no se le pregun-
taría a! usuario ni siquiera una vez:
D0 WHILE (numeno = numeno0omp)
INPUT "óQué númeno *entne 1 y 100 piensas que es"; numeno
LOOP

A medida que escriba más programas, entenderá mejor la colocación de las pruebas condicio-
nales de los ciclos. La colocación prácticamente se vuelve un acto reflejo. Lalógica del pro-
grama, dependiendo si el cuerpo del ciclo se debe ejecutar cuando menos una vez, o ninguna,
determinará la colocación de la prueba condicional.

Resumen
¡Felicidades! Ahora puede insertar datos en un programa QBasic y dar formato a la salida.
También ha dominado el verdadero poder de cualquier lenguaje de programación: los ciclos.
Los programas que vio en esta lección comienzan a ser poderosos. Sin embargo, se ha dado
cuenta que la programación es fácil. Ha aprendido a usar los operadores relacionales con la
instrucción IF para que sus programas QBasic puedan tomar decisiones con base en los da-
tos. Además, los constructores de ciclos permiten que secciones de los programas se repitan
mientras sea necesario.

La siguiente hora muestra la manera de almacenar datos en disco y de leer dichos datos desde
el disco. Los archivos en üsco almacenan datos permanentes generados por los programas
que escribe para procesarlos.

Preguntas y respuestas
P ¿Importa si selecciono instrucciones D0 o FOR cuando escribo ciclos?
R La selección no es únicamente entre ciclos FOR y D0, sino entre los diversos formatos
de cada uno de dichos ciclos. Por lo general, los ciclos FOR son úüles cuando se deben
contar valores o repetir el cuerpo del ciclo una cantidad de veces específica. El ciclo D0
es útil para repetir hasta que o mientras se cumpla cierta condición. Si se está contando
de manera ascendente o descendente, es más sencillo escribir un ciclo FOR, que, ade-
más, es ligeramente más eficiente que un ciclo D0 equivalente.
E00 Hora 10

P ¿Cómo se compara un ciclo IF con un ciclo FOR?


R Tanto la instrucción IF como la FOR, así como las instrucciones D0, dependen de valo-
res conücionales que determinan su trabajo. No obstante, una instrucción IF nunca se
considera como un ciclo. Siempre tenga presente que una instrucción IF ejecuta su
cue{po de cóügo cuando mucho una vez, y posiblemente ninguna, si la condición es
falsa desde un principio. Incluso si la condicional I F es verdadera, la instrucción I F
nunca ejecuta su cuerpo más de una vez, a diferencia de las instrucciones de ciclos, que
pueden repetir su cuerpo de código muchas veces.

Taller
Las preguntas del cuestionario se presentan para una mayor comprensión. Vea las respuestas
en el apéndice A.

Cuestionario
1. ¿Cuál es la diferencia entre un operador condicional y un operador matemático?
2. ¿Qué es un ciclo?
3. Verdadero o falso: el código dentro de una instrucción IF puede no ejecutarse nunca.
4. Verdadero o falso: el código denffo de los ciclos FOR siempre se ejecuta cuando menos
una vez.
5. ¿Cómo se puede abreviar la instrucción NEXT?
6. ¿Cuál es el propósito de la instrucción EXIT FOR?
7. ¿Qué ciclo, D0 o FOR. . . NEXT, es mejor cuando se quiere ejecutar el ciclo una cantidad
de veces predeterminada?
8. ¿Cuál es la diferencia enüe los ciclos DO. . .WHILE y D0. ..UNTIL?
9. ¿Cómo se determina el ciclo a usar, 00. . .WHILE o DO. . .UNTIL?
10. ¿Cómo afecta la colocación de WHILE u UNTIL, antes o después del cuerpo del ciclo, a
la ejecución del ciclo?
%%

ffiffiffi& 11
Administraci on de datos
y archivos en disco
¡Ya ha ayanzado bastante en su camino como programador de QBasic! Si estu-
viera inscrito en un curso de programación, el material que terminó en la lección
anterior signifi caría la primera mitad.

Al terminar esta lección,habrá tenido una gran exposición de la programación


en QBasic. La buena noticia es que todos los lenguajes de programación contie-
nen los mismos tipos de instrucciones que está aprendiendo aquí. Todos los len-
guajes hablados incluyen verbos y sustantivos; de igual manera, todos los
lenguajes de programación incluyen variables, ciclos e instrucciones de decisión.
La sintaxis de una instrucción en otro lenguaje podría ser algo diferente que en
QBasic, pero los tipos de comandos son idénticos. La similitud entre los lengua-
jes de programación es la principalruzónpor la que los programadores con fre-
cuencia conocen más de uno. Es muy fácll aprender un segundo o tercer
lenguaje tras dominar el primero.
1202
Hora 11

Los puntos relevantes de esta hora son:


. Qué es un areglo
. Cómo reservar memoriapara los areglos
. Qué es un subíndice
. Cuáles son las ventajas de los archivos en disco sobre las variables
. Por qué hay tres modos de acceder a los archivos
o Cuál es la diferencia entre registro y campo
. Cómo abrir y cerrar archivos en disco
. Cómo escribir y leer archivos en disco.

La importancia del almacenamiento en disco


y los arreglos
Esta lección le enseña algunas maneras avanzadas de almacenar sus datos. En las
lecciones anteriores, aprendió a trabajar con variables. Éstas son adecuadas para da-
tos sencillos, pero pflra aplicaciones más avanzadas es necesario entender un manejo avatrza-
do de las variables, llamado arreglo. Ut arreglo no es offa cosa que una üsta de variables que
se pueden tratar como un solo grupo. Tambiénverá algunos comandos para almacenar datos
.en su archivo en disco. A menos que pueda almacenar sus datos a largo plazo, los programas
no podrán llevar un registro de los datos a lo largo del üempo. Si almacena sus variables y
arreglos en disco, los puede procesar en el momento apropiado.

Con los archivos, inserta los datos una vez y los guarda en disco. Los datos

9 estarán disponibles de inmediato cuando algún programa qu¡era acceder a


ellos.

lntroducción a los arreglos


Con frecuencia debe llevar la pista de varios elementos de datos que son del mismo tipo. Por
ejemplo, un maestro podría tener que llevar el registro de 30 calificaciones, una compañía, de
150 productos o usted, del dinero que ha invertido mensualmente en su cuenta de retiro. Aun-
que podría hacerse, llevaría tiempo guardar datos similares en la clase de variables que ha
visto. Cada una tendría que tener un nombre distinto para poder llevar su control.

Por ejemplo, considere las calificaciones de un maestro. Si hay 30 alumnos, el maesfro podría
llamar a las variables con las calificaciones como calif 1 , caLif2, calif3, etc. El maestro
debe saber el nombre del estudiante la que corresponde cada calificación, por lo que también
Administración de datos y archivos en disco 203

tendría 30 variables de cadena, llamadas probablemente nombreEl$, nombreE2$, nombreE3$,


etc. Tales nombres de variables significan un procesamiento y una coüficación tediosos. El
listado 1 1.1 muestra un listado parcial de lo que comprende uno de tales programas.

Lrsraoo f f .f Le soucruo DE vARtos NoMBRES DE EsruDtANTEs y cALtFtcActoNEs


SIN EMPLEAR ARREGLOS SE PUEDE VOLVER ENGORROSA

1: ' Pr^ognama que pide a gritos anreglos en lugar de vaniables normales


2: CLS
3: INPUT "¿Nombre del siguiente estudiante?"; NombreEl$
4: INPUT "¿Calificación del estudiante?"; caIif1
vl¡ PRINT ' Imprime una lÍnea en blanco
6: INPUT "¿Nombre del siguiente estudiante?"; NombreE2$
7: INPUT "¿CalificacÍón del estudiante"; calif2
8: PRINT 'Imprime una línea en blanco
Qr
INPUT "¿Nombre del siguiente estudiante?"; NombreE3$
10: INPUT "¿Calificación del estudiante"; calif3
11: PRINT 'Imprime una Iínea en blanco
12: INPUT "¿Nombre deI siguiente estudiante?"; NombreE4$
13: INPUT "¿Calificación del estudiante"; calif4
14: PRINT 'Imprime una línea en blanco
15: rNPUT "¿Nombre del siguiente estudÍante?"; NombreE5$
16: INPUT "¿Calificación de1 estudiante?"; calÍf5
17= PRINT 'Impnime una línea en blanco
18: ' Este proceso continúa para 25 estudiantes más

Si se descubre escribiendo dos o más conjuntos de instrucciones y que la única diferencia es


el nombre de las variables, probablemente no estií aprovechando un mejor estilo de programa-
ción. El programa del listado 1 1. 1 pide a gritos usar variables de arreglo. No ha aprendido
usted 1o suficiente de programación que le permita emplear un método üstinto para guardar
en memoria las 30 variables para su uso posterior (tal vez para calcular un promedio general
de la clase o alguna estadística).

Otra desventaja del empleo de nombres distintos para las 30 variables es que

9 no se pueden aprovechar las poderosas ¡nstrucciones de ciclos que aprend¡ó


en los capítulos anteriores. EI objetivo de la programac¡ón es simplificar su
vida, no complicarla. Siempre que pueda poner un cód¡go repetitivo, como es
el caso del listado 11.1, eh un c¡clo, se ahorrará tiempo y esfuerzo escribiendo
un par de instrucciones INPUT dentro de un ciclo FOR o D0...WHILE.

Un arreglo es una lista de variables similares. Cada una de las variables similares se
llama elemento del arreglo. En lugar de que cada elemento del affeglo tenga un
nombre propio, el arreglo completo tiene un solo nombre. Los elementos de la iista se distin-
guen mediante subíndices.
1204
Hora 11

La parte superior de la figura 11.1 muestra cómo se ven cinco de las primeras variables
de califlcaciones en la memoria. Cada variable tiene un n«rmbre distinto. La parte infe-
rior de la figura 11.1 muesüa cómo se ve el mismo conjunto de variables almacenado en un arre-
glo. Aun hay cinco vmiables y cada una es independiente y distinta. A diferencia de las variables
con nombres distintos, cada una de las variables del arreglo tiene el mismo nombre. Se distin-
guen no por su nombre, sino por st subíndice, que es el número dentro del paréntesis que sigue
al nombre del arreglo. Cada elemento de cada arreglo tiene un subíndice. De esta manera se sabe
a qué elemento de la lista se hmá referencia cuando se necesite distinguir un valor de ofto.

Flcunn 11.1 calificaciones 1 I-l


Variables
catificaciones z-
independientes
guardadas como carj-f icaciones 3 [-l
un arreglo.
calif icaciones 4 [-l

calif icaciones S [-l

calificacionet
(1) (2) (3) (4) (5)

Ahora que almacena las variables en 30 elementos de un arreglo llamados calificaciones,


para verlos, el maestro puede valerse de un ciclo. La capacidad de crear ciclos a través de los
elementos de los arreglos, para inicializarlos o imprimirlos, los hace muy poderosos y fáciles
de programar. Vea la sección de código del listado 11.2. Observe cómo el progrrrma solicita el
nombre del estudiante y su calificación una sola vez; dicha solicitud se repite dentro del ciclo.

Ltsrnoo 11.2 Sr puEDE MEJoRAR EL pRoGRAMA DE cALtFtcAcroNEs EMpLEANDo


ARREGLOS

1: ' cnear cicros a tnavés de ras pneguntas mediante subíndices de arreglo


2: CLS
3:FORi=1T030
4i INPUT "¿Nombre del siguiente estudiante?,,; nombreE$(i)
5: INPUT "¿Callficación del estudiante?,,; calificaciones(i)
6: PRINT ' Imprime una 1ínea en blanco
7: NEXT i
8: ' Sigue el resto deI programa

La primera vez que sucede el ciclo FOR, i es 1. El maestro insefa el valor de nombreE$(i)
(que en realidad es nombr^eE$(i)) y carificaciones(i) (que es calificacÍones(1 ));
luego el ciclo se encarga de aumentar i a 2. Esto continúa hasta que el maestro inserta los 30
nombres y calificaciones. El subíndice pasa por todos los datos y simplifica mucho el código.
Administración de datos archivos en disco 205

QBasic deja en ceros todos los elernentos de los arreglos numéricos y pone
cadenas nulas en todos los elementos de !os arreglos de cadena antes de
que usted los use.

Reservación de espacio para arreglos


Con frecuencia debe indicar de antemano a QBasic la cantidad de espacio requerido
para los arreglos. QBasic permite únicamente 10 elementos de arreglo antes de que
sea necesario solicitar más mediante una instrucción DIM. DIM significa dimensión; es la ins-
trucción que reserva espacio para los arreglos en los programas.

Es necesario que incluya la instrucción DIM apropiada al inicio de los programas que utilicen
elementos de arreglo para que funcionen correctamente. La siguiente es la instrucción que di-
mensiona 30 nombres y calificaciones:

DIM nombneE$(30), calificacÍones(3@) ' Reservar espacio para 30 elementos


en cada uno

El iistado 11.3 muestra un progralna completo que almacena nombres y calificaciones de es-
tudiantes. Dimensiona memoria de arreglos, pide los nombres y calificaciones e imprime los
valores en la impresora. Sin arreglos, no hay ninguna manera sencilla de duplicar este progra-
ma (excepto teniendo 30 pares de variables con nombres diferentes y cargiándolas mediante
30 conjuntos de instrucciones).
Administración de datos y archivos en disco 205

QBasic deja en ceros todos los elementos de los arreglos numéricos y pone
cadenas nulas en todos los elementos de los arreglos de cadena antes de
que usted los use.

Reservación de espacio para arreglos


Con frecuencia debe indicar de antemano a QBasic la cantidad de espacio requerido
para los arreglos. QBasic permite únicamente 10 elementos de arreglo antes de que
sea necesario solicitar más meüante una instrucción DIM. DIM significa dimensión; es la ins-
trucción que reserva espacio para los arreglos en los programas.

Es necesario que incluya la instrucción DIM apropiada al inicio de los programas que utilicen
elementos de arreglo para que funcionen correctamente. La siguiente es la instrucción que di-
mensiona 30 nombres y caliñcaciones:

DIM nombneE$(30), calificaciones(3@) ' Reservar espacio pana 30 elementos


en cada uno

q§*}i i*¡icia los elementos ¿el arregte:qp:;'!¡;nes1r4;,_U1'frmqf¡+SirnAicc;¡Mip¡reg*oq¡¡ft:


i*.iffi ffi §rsi :*1ffiffi3*§ffi
c al if ic ac i"tl{i§,s&ffi##t§lf*§HffiÍ#,ffi
$r*iffi#
i,!;f,ffiffi:ui¡m fqffiffis,{fe:lffi:i¡q;,iffiel,4látr,;
eesr r arm¿ft.ál'itfili1ffiffi&
¡.*,!, ffiI'ariroarso, t,."r,ti*$&,'$ '-t${#Hff*l¡'t;itfffili
ffi#crl,." r**:

El listado 1 1.3 muestra un programa completo que almacena nombres y calificaciones de es-
fudiantes. Dimensiona memoria de arreglos, pide los nombres y calificaciones e imprime los
valores en la impresora. Sin arreglos, no hay ninguna manera sencilla de duplicar este progra-
ma (excepto teniendo 30 pares de variables con nombres diferentes y cargrándolas mediante
30 conjuntos de instrucciones).
)
I
206 Hora 11

Lsrnoo 11.3 Esr¡ pRoGRAMA DE cALtFtcActoNEs ALMAcENA DATos EN ARREGLos


PARA su rrupResróru PosrERtoR

1: ' Pnograma que lista los nombnes y calificaciones de estudiantes


2t DIM nombneE$ ( 30 ) , calif icaciones ( 30 )
3:
4= CLS
h.
9¡ FORi=1T03@
6: INPUT " óNombne del siguiente estudiante? " ; nombneE$ ( i )
7: INPUT " óCalificación del estudiant e?" i calificaciones (i)
8: PRINT ' Impnime una línea en blanco
o. NEXT i
1@= ' Ahona que se han insentado todos los datos, impniminlos
11: LPRINT , " ** Inf onme de calif icaciones ** rr

12= LPRINT "Nombpe", "CaLificación " ' En cabezado de las columnas


13: FORi=1T03A
14= LPRINT nombneE$(i), calificaciones(i)
15: NEXT i
16: END

Para que el programa del listado 11.3 seaútil en cualquier situación, hay que hacer que dimen-
sione los 30 elementos (suponiendo que dicha cantidad es el total de estudiantes) y pregunte al
maesho cuántos estudiantes hicieron el examen. El ciclo FOR puede rcalizar la cantidad de ci-
clos correspondiente a la cantidad de estudianúes que tomaron el examen. Si toda la clase tomó
el examen, se llenan los 30 elementos de los arreglos. Si fueron menos, el ciclo FOR sólo efec-
túa la cantidad de ciclos correspondiente a la cantidad de estudiantes que tienen calificaciones.

Arreglos paralelos
La lista de nombres de estudiantes y calificaciones demuestra un uso común de los
arreglos. Los arreglos nombreE$( ) y calificaciones( ) se conocen como arreglos
paralelos. Es decir, ambos arreglos tienen la misma cantidad de elementos y cada elemento
de uno corresponde a un elemento del ofro.

Con los aneglos paralelos puede almacenar arreglos con cualquier tipo de datos. Aunque un
arreglo sólo puede contener un tipo de datos, es posible tener varios arreglos paralelos corres-
pondientes enfre ellos, con una relación uno a uno. Mediante arreglos paralelos lleva el con-
trol de conjuntos completos de nombres, direcciones, números telefónicos y salarios en un
programa de nómina.

Borrado de arreglos
Hay una manera nápida para borrar el contenido de cualquier arreglo numérico o de cadena.
La instrucción ERASE permite borrar el contenido de cualquier arreglo. Esto lo devuelve a su
estado inicial. Si desea volver a utilizar un arreglo en la última parte de un programa para un
conjunto de datos distinto, tendrá que borrarlo de modo que quede listo para los nuevos
valores.
Administración de datos y archivos en disco za7

Para borrar dos arreglos llamados cantidad O y cte$ O, escriba:


ERASE cantidad, Cte$
El programa del listado 11.4 llena un arreglo con los números 1 a 10 y lo imprime. Luego lo
borra e imprime su nuevo contenido.

L¡sraoo 11.4 Esre pRoGRAMA sE vALE DE ERASE pARA BoRRAR Los ELEMENTos DE
UN ARREGLO

1: ' Bonf'a un anneglo


2: DIM nums (10 )
3:
4:FORi=1T010
5: nums(i) = i ' Pone de 1 a 1A en los elementos
6: NEXT i
7:
8: CLS
9:
PRINT " EI anneglo antes de bonranlo: "

1@=FORi=1T014
11 : PRINT nums (i) ,
12= NEXT i
13:
14: ERASE nums
15: PRINT " EI arneglo tras bonranlo: "
16: FOR i = 1 T0 1A
17 PRINT nums ( i)
8:= NEXT i
,
1

1 9: END

Los números se imprimen a lo ancho de la página debido a las comas a! final

9 de cada PRINT.

En la siguiente salida puede ver que la instrucción ERASE borra el arreglo con una sola ins-
trucción:
1 : EI anneglo antes de bonnar'1o:
2= 1 2 3 4 5
3: 6 7 I I 10
4: EI anneglo t r^as bor"r^anlo:
5: A A A a a
6: @ 0 0 o 0
|
208 Hora 11

lntroducción a los archivos en disco


Los arreglos son magníficos para almacenar los datos de un progrÍrma, pero se almacenan en
la memoria de la computadora, que se borra al apagar la máquina. Para un almacenamiento
permanente, es necesario guardar los datos en un archivo en disco.

La computadora actúa como un archivero electrónico que almacena los archivos


creados por los progr¿rmas. Los archivos en disco no son voldtile§; esto es, permane-
cen en el üsco al apagar la computadora. Cada archivo del disco tiene un nombre único, que
es parecido a los archivos de un archivero, que tienen etiquetas particulares. El nombre del ar-
chivo es la manera como designa el archivo a leer o escribir desde los programas.

Evite caracteres especiales, con excepción de letras y números, en los nombres de archivos.
Aunque se permiten algunos caracteres especiales en el nombre, ofros no. Es más seguro de-
jar fuera los caracteres especiales de los nombres de archivos. Estos son algunos nombres de
archivos váüdos

VENTAS.DAT EMPLEADO NOMINA.99 MICALIF.TXT

Un archivo puede contener cualquier tipo de datos. Por lo regular son datos repetitivos que
tienen patrones similares, como los nombres y direcciones de empleados, las listas de clien-
tes, los balances de facturación y demás.

Registros y campos
Un archivo en disco se divide en registros. La definición libre de registro es una línea
en eI archi¡¡o. Aunque los registros pueden abarcar físicamente más de una Hnea en
un archivo, un registro es un conjunto de datos relacionados que, por lo general, se escriben
en una sola lÍnea. Para aclarar este concepto, vea la tabla 11.1. Muestra un archivo de clientes.
Hay cinco registros en la tabla; el archivo contiene más registros, pero no se muesfian.
Administración de datos y archivos en disco 249

TnaLn11.1 Ancurvo DE DATos DE cLtENTEs


Número de cliente Nombre del cliente Balance del cliente Código de cuenta del cliente
30432 Smith, Julie 2t3.42 88432
93845 Johnson, Tom 9434.34 BG895

3020t Kerry, Kim 3432.67 YT009


t0392 Jensen, Judy 4t1.59 8W431
90323 Post, Paul 2883.45 TW326

Cada registro en un archivo se divide en campos. Un campo es una columna de da-


tos. La tabla 11.1 contiene un archivo con cuatro campos. Si hubiese 20 000 regis-
tros en el archivo, seguiría habiendo cuatro columnas de datos; por tanto, contendría cuatro
campos.

Si el archivo de la tabla 11.1 tuviese muchos más datos que esos cuatro campos, podría ver
cómo un mismo registro puede abarcar más de una línea en el archivo, y seguirse consideran-
do como un solo registro de datos.

Considere que Ios registros de un archivo son un conjunto de tarjetas. Cada

9 tarjeta es un registro de información individual en el archivo de tarjetas. En


cada tarjeta se tienen varios campos de datos.

Tipos de acceso
Las siguientes son las tres cosas que puede hacer con un archivo de datos:
. Crear uno escribiéndolo
. Leer de uno
. Añadfu al final de uno

Esto es lo mismo que puede hacer con un archivero de oñcina. Puede crear un archivo nuevo
llenando la etiqueta de la carpeta y poniendo cosas en ella, añadir a un archivo ya existente
poniendo elementos nuevos en él y leer el contenido de un archivo.

En un archivero de oficina, tiene que abrir la carpeta apropiada antes de poder leer el archi-
vo. En QBasic, debe abrir los archivos mediante la instrucción OPEN. La instrucción OPEN le
dice a QBasic cómo desea acceder al archivo.
Hora 11
1210

La maneru máts sencilla de aprender acerca de la instrucción OPEN es ver algunos


ejemplos. Suponga que quiere abrir y leer un archivo llamado VENTAS. DAT que resi-
de en la unidad de disco D. Al modo de lectura de OPEN se le llama modo de entrada
(INPUT). La insffucción 0PEN que se usaría es la siguiente:

OPEN ,,D:VENTAS.DAT, FOR INPUT AS #1

El #1 es el identificador del archivo. Si QBasic encuentra el archivo en la unidad D, le asigna-


rá el identificador de archivo #1. Las instrucciones de E/S (enrada/salida) a disco subsiguien-
tes usarán #1 en lugar del nombre del archivo. Puede indicar el nombre de la unidad de disco
y del archivo con cualquier combinación de caracteres en maÉsculas o minúsculas, como es
el caso de cualquier nombre de archivo DOS.

Si el archivo reside en la unidad de disco predeterminada (la unidad que es-

9 taba activa cuando se inició QBasic, que generalmente es C:), no es necesar¡o


espec¡ficar la unidad antes del nombre de! archivo.

Si desea tener abiertos varios archivos en el mismo progr¿rma, debe asignar a cada uno un
identificador üferente. Esto permite a QBasic saber qué archivo de disco se está leyendo o
escribiendo con los comandos de E/S subsecuentes.

Si intenta abrir para entrada un archivo que no ex¡ste, QBasic emite e! men-
saje de error Anchivo no encontnado. Sólo es pos¡ble leer un archivo que ya
ex¡ste.

La siguiente instrucción OPEN abre un archivo en modo de salida (OUTPUT). El mo-


do de salida significa que quiere escribir en el archivo. El modo de salida supone que
el archivo no existe o, si existe, que se desea sobreescribirlo. Es importante tener cuidado al
Administración de datos y archivos en disco 211

abrir archivos en modo de salida pues, de abrir inadvertidamente un archivo ya existente,


QBasic lo destruye para dejar los nuevos datos. QBasic no avisa que el archivo será sustituido
por uno nuevo. El modo de salida siempre supone que se desea crear un archivo nuevo:

OPEN ,,Nomina.98.. FOR OUTPUT AS #3

Los comandos de escritura posteriores usarán el identificador de archivo #3 para enviar datos
al archivo llamado Nomina.98 en la unidad de disco predeterminada.

Habrá ocasiones en que querrá añadir datos al final de un archivo. Tal vez esté agre-
gando clientes, estadísticas de ingeniería o registros de inventario. La adición al ñnal
de un archivo se conoce como modo de agregar (APPEND). La siguiente es una instrucción
OPEN que asigna a un archivo el identificador #2 y asegura que las escrituras subsecuentes se
añadirán al final del archivo sin destruir su contenido original:

OPEN 'STATS.NUM' FOR APPEND AS #2

abre un archivo en modo de agregado y dicho archivo no existe, QBasic se

9
Si
encarga de crearlo por usted.

Cierre de archivos abiertos


Antes de entrar en los comandos de E/S de archivo, es importante ver el comando CLOSE. De-
be cerrar siempre los archivos abiertos por un programa QBasic. (Si no cierra un archivero, es
posible que se lastime al golpearse con él o perder información importante que puede caer.)
Aunque tanto DOS como Windows cierran los archivos una vez que terminan un programa en
QBasic, se considera una práctica desordenada si no cierra específicamente todos los archivos
abiertos. Aún más importante, el suministro eléctrico podría fallar mientras algún archivo está
abiefo. Inclusive si ya no se está leyendo o escribiendo el archivo, existe la posibilidad de
que se pierdan datos e, incluso, el archivo completo.

El comando CL0SE es sencillo. Para cerrar el archivo asociado con el identificador de archivo
#1 puede hacer lo siguiente:

cLosE 1

CLOSE #1

Como puede ver, el signo de número es opcional. Pueden cerrar varios archivos con una mis-
ma instrucción CLOSE, como se aprecia a continuación:

cLosE 1, 2, 3
Hora 11
1212

Ademiás, se pueden cerra¡ todos los archivos abiertos indicando CL0SE sin opciones, como sigue:

CLOSE

Creación de archivos de salida


Tras abrir un archivo de salida, puede escribir en él mediante el comando WRITE #. Como
muestralafigurall.2,WRITE #esaunarchivodedatosloquePRINTesalapantalla;WRITE
# envía datos al archivo. El identificador del archivo aparecerá a continuación de WRITE # (el
signo de número precede al identificador del archivo).

Frcunn 11.2
El comando WRITE #
escribe datos en un
archivo.

WRITE # escribe datos separados por comas en un archivo en disco. A diferencia


de pRINT, que imprime los datos tal cual se escribieron, WRITE #hace más que
sólo enviar datos a un archivo. WRITE # separa con comas los campos del archivo de da-
tos. Para ayudarle a leer los datos después (con el comando INPUT que se explica en la
siguiente sección), wRITE # encierra también las cadenas de datos entre comillas, en lu-
gar de añadir todas las cadenas en un registro largo.

Para ver los efectos de WRITE #, observe el programa del listado 11.5. Las primeras instruc-
ciones asignan valores a variables y la riLltima escribe en üsco dichos datos. El programa es
corto; sólo se escribe un registro en el archivo. En una aplicación real se escribiían más re-
gistros. No obstante, el programa muestra cómo WRITE # da formato a la línea de datos. Es-
tudie el programa y observe los datos al ser escritos en el archivo.

L¡srnoo 11.5 Coru VVRITE # ¡scnrBE REGtsrRos EN Los ARCHtvos

1 : ' Pnime n pf'og nama de esc nÍtu na en disco


2= CLS
3:
4: ' IniciaLizar algunas vaniables que se escribinán en disco
Administración de datos y archivos en disco 213

nombreC$ = "Jim Smith"


6: Edad = 4@
7= Din$ = "146 E. ,ak"
8:
o. EStadO$ = rr
FL rr

1@= cP$ = '34029"


11:
12: OPEN " p rime r' . dat " FOR OUTPUT AS #1 'Abnin el anchivo par.a sal-ida
13: WRITE #1 , nombne0$, Edad, Din$, Ciudad$, Estado$, CP$
14= CLOSE #1
15:
16: END

Así se ve el archivo que se acaba de crear, primer.dat:

"Jim Smith",40, " 146 E. oak", "Miam , '34029'


Observe que QBasic insertó comas entre los valores y comillas para encerrar las cadenas. La
siguiente sección muestra cómo leer dicho archivo.

Con el editor Bloc de notas de Windows puede ver los archivos de datos

9 creados por los programas QBasic.

El listado I 1.6 es un ejemplo más común de la creación de archivos de datos. En este progra-
ma, el usuario controla la cantidad de registros escritos en el archivo. El programa usa tanto
arreglos como disco para llevar el control de los datos insertados. Primero carga todos los da-
tos (hasta 100 valores) en arreglos paralelos. La última parte del programa almacena dichos
arreglos en el archivo primer.dat.

Ltsraoo 11,6 Ln TNTRADA DEL usuARro AyUDA A ESCR¡BIR Los ARcHtvos

1 ' Programa de escritura en disco que se basa en Ia entrada del usuario


2 DIM nombre0$(100), Edad(100), Dir$(100), Ciudad$(100), Estado$ (1@O),
cP$(1oo)
3:
4: CLS
5:
6: PRINT, "** Programa que obtiene datos para un archivo en disco **"
Jt
t.

8: ' Ciclo que obtiene los datos a escribir en disco


o. FORi=1T0100
1@= PRINT
11: INPUT "¿Nombre del cliente?"; nombrec$(i)
12= INPUT "¿Edad del cliente?"; Edad(i)

continúa

También podría gustarte