jueves, 26 de abril de 2012

Introducción a la programación usando BASIC (III): IF

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


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

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:

     IF numero > 5 THEN PRINT “Mayor” ELSE PRINT “Menor”

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

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.

Jose Antonio Vaqué Urbaneja, podéis contactar conmigo en mi mail o ver más cosas en mi blog

No hay comentarios:

Publicar un comentario