Artículo publicado en el número 3 de RetroWiki Magazine
CONTROL DEL PROGRAMA. EJEMPLO: CALCULADORA SIMPLE
NOTA: Los programas los verifico en un Spectrum y en GWBasic, pero al
usar solo instrucciones estándar del BASIC, deben funcionar en cualquier máquina,
si tenéis cualquier problema, contactar conmigo y os pasaré las correcciones
necesarias para vuestra máquina.
En la entrada anterior presentamos la entrada/salida, con las instrucciones
INPUT y PRINT, y el uso general de variables, pero el programa se iba ejecutando
siempre linealmente, siguiendo lo que se denomina su flujo. Cualquier alteración
en el recorrido del programa se denomina un control del flujo, y es lo que veremos
en este artículo.
La instrucción de control de flujo más sencilla es el IF, que tiene una pregunta,
y en función de si se cumple o no hace una u otra cosa. La sintaxis de esta
instrucción es IF condición THEN acción:
- Condición es una pregunta, si el resultado de la pregunta se cumple (es cierto), entonces se ejecuta la acción, si no se cumple (es falso), entonces se pasa directamente a la siguiente línea del programa. Por ejemplo la pregunta puede ser si el contenido de variable es igual a un valor o al contenido de otra variable, si es diferente, si es mayor o menor.
- Acción es una instrucción que se ejecutará solo si se cumple la condición. Hay versiones del BASIC que permiten ejecutar varias instrucciones, como el Spectrum.
Vamos con un ejemplo, que es lo más sencillo para aclarar las cosas, pediremos
dos números y una operación, y en función de ella sacaremos el resultado:
100 REM ---------------------------
110 REM Calculadora. J.A.Vaque 2011
120 REM ---------------------------
130 REM
140 REM Preparar la pantalla
150 CLS
160 PRINT "Calculadora simple. Version 2.0"
170 PRINT"*******************************"
180 PRINT
190 REM Introducir valores
200 PRINT "Introduzca el primer valor: ";
210 INPUT valor1
220 PRINT
230 PRINT "Introduzca el segundo valor: ";
240 INPUT valor2
250 PRINT
260 PRINT "Que operacion desea (1=+, 2=-, 3=*, 4=/): ";
270 INPUT operacion
280 PRINT
290 PRINT
300 REM Presentar el resultado
310 IF operacion=1 THEN PRINT "Suma: "; valor1+valor2
320 IF operacion=2 THEN PRINT "Resta: "; valor1-valor2
330 IF operacion=3 THEN PRINT"Producto: "; valor1*valor2
340 IF operacion=4 THEN PRINT "Division: “; valor1/valor2
110 REM Calculadora. J.A.Vaque 2011
120 REM ---------------------------
130 REM
140 REM Preparar la pantalla
150 CLS
160 PRINT "Calculadora simple. Version 2.0"
170 PRINT"*******************************"
180 PRINT
190 REM Introducir valores
200 PRINT "Introduzca el primer valor: ";
210 INPUT valor1
220 PRINT
230 PRINT "Introduzca el segundo valor: ";
240 INPUT valor2
250 PRINT
260 PRINT "Que operacion desea (1=+, 2=-, 3=*, 4=/): ";
270 INPUT operacion
280 PRINT
290 PRINT
300 REM Presentar el resultado
310 IF operacion=1 THEN PRINT "Suma: "; valor1+valor2
320 IF operacion=2 THEN PRINT "Resta: "; valor1-valor2
330 IF operacion=3 THEN PRINT"Producto: "; valor1*valor2
340 IF operacion=4 THEN PRINT "Division: “; valor1/valor2
En la línea 260 pedimos un número, que representa la operación a ejecutar, y
luego en las líneas 310 a 340 preguntamos si la operación introducida es la
que espero, entonces imprimo el resultado, si no es la que espero no hago nada.
Podemos hacer lo mismo con resultados alfabético, solo cambia esto (recordar
que en el Spectrum hay que poner o$ en lugar de operacion$):
260 PRINT "Que operacion desea (+ - * /): ";
270 INPUT o$
280 PRINT
290 PRINT
300 REM Presentar el resultado
310 IF o$=”+” THEN PRINT "Suma: "; valor1+valor2
320 IF o$=”-“ THEN PRINT "Resta: "; valor1-valor2
330 IF o$=”*” THEN PRINT "Producto: "; valor1*valor2
340 IF o$=”/” THEN PRINT "Division: valor1/valor2
270 INPUT o$
280 PRINT
290 PRINT
300 REM Presentar el resultado
310 IF o$=”+” THEN PRINT "Suma: "; valor1+valor2
320 IF o$=”-“ THEN PRINT "Resta: "; valor1-valor2
330 IF o$=”*” THEN PRINT "Producto: "; valor1*valor2
340 IF o$=”/” THEN PRINT "Division: valor1/valor2
La instrucción tiene una variante, IF condición THEN acción1 ELSE acción2, se
ejecuta la acción1 si se cumple la condición, o la acción 2 si no se cumple.
Por ejemplo podemos usar:
Hasta ahora el programa se ejecuta una vez, y luego hay que dar otro RUN para
volver a empezar, podemos usar otra instrucción de control de flujo para hacer
que el programa vuelva a empezar, que es GOTO línea, en donde línea es una de
las líneas del programa, esto hace que el flujo se desvíe hasta la línea indicada
y siga la ejecución por esa línea. Hagamos algo sencillo, tras la operación
preguntará si deseamos seguir o terminar, si queremos seguir, mediante un GOTO
“saltaremos” al inicio de nuevo:
100 REM ---------------------------
110 REM Calculadora. J.A.Vaque 2011
120 REM ---------------------------
130 REM
140 REM Preparar la pantalla
150 CLS
160 PRINT "Calculadora simple. Version 2.0"
170 PRINT "*******************************"
180 PRINT
190 REM Introducir valores
200 PRINT "Introduzca el primer valor: ";
210 INPUT valor1
220 PRINT
230 PRINT "Introduzca el segundo valor: ";
240 INPUT valor2
250 PRINT
260 PRINT "Que operación desea (+ - * /): ";
270 INPUT o$
280 PRINT
290 PRINT
300 REM Presentar el resultado
310 IF o$=”+” THEN PRINT "Suma: "; valor1+valor2
320 IF o$=”-“ THEN PRINT "Resta: "; valor1-valor2
330 IF o$=”*” THEN PRINT "Producto: "; valor1*valor2
340 IF o$=”/” THEN PRINT "Division: “; valor1/valor2
350 REM Preguntar si seguir o acabar
360 PRINT
370 PRINT
380 PRINT “Desea continuar (S/N)?: “;
390 INPUT s$
400 IF s$=”S” THEN GOTO 180
410 PRINT
420 PRINT “Fin del programa”
430 STOP
110 REM Calculadora. J.A.Vaque 2011
120 REM ---------------------------
130 REM
140 REM Preparar la pantalla
150 CLS
160 PRINT "Calculadora simple. Version 2.0"
170 PRINT "*******************************"
180 PRINT
190 REM Introducir valores
200 PRINT "Introduzca el primer valor: ";
210 INPUT valor1
220 PRINT
230 PRINT "Introduzca el segundo valor: ";
240 INPUT valor2
250 PRINT
260 PRINT "Que operación desea (+ - * /): ";
270 INPUT o$
280 PRINT
290 PRINT
300 REM Presentar el resultado
310 IF o$=”+” THEN PRINT "Suma: "; valor1+valor2
320 IF o$=”-“ THEN PRINT "Resta: "; valor1-valor2
330 IF o$=”*” THEN PRINT "Producto: "; valor1*valor2
340 IF o$=”/” THEN PRINT "Division: “; valor1/valor2
350 REM Preguntar si seguir o acabar
360 PRINT
370 PRINT
380 PRINT “Desea continuar (S/N)?: “;
390 INPUT s$
400 IF s$=”S” THEN GOTO 180
410 PRINT
420 PRINT “Fin del programa”
430 STOP
Esto es lo que se denomina un bucle, el programa se repite hasta que algo le
hace salir del bucle, un bucle se puede ejecutar una vez, varias veces, o indefinidamente,
lo único que hay que controlar es que los bucles tengan una salida, si no puede
que se queden ejecutando algo indefinidamente, y el programa no acabe nunca,
es lo que se denomina un bucle infinito.
Una forma de salir de un bucle es terminar el programa. En este ejemplo he terminado
el programa con una instrucción STOP en la última línea, esta instrucción hace
que el programa finalice, no es necesaria ponerla si el programa finaliza cuando
terminan las líneas, como en este caso, pero más adelante la usaremos para terminar
el programa a mitad. Y siempre es bueno tener una disciplina de programación.
En la próxima entrada seguiré con el control de flujo mediante el IF, explotaremos
más el GOTO, hablaré del control de errores, y haremos nuestra calculadora un
poco más funcional.
No hay comentarios:
Publicar un comentario