AnteriorPosterior

7. Comprobación básica de condiciones: IF

Por: Nacho Cabanes
Actualizado: 19-04-2019 22:35
Tiempo de lectura estimado: 10 min.

 

BASIC

7. Comprobación básica de condiciones: IF

La forma básica de comprobar condiciones es con la construcción "IF condición THEN orden". Un ejemplo de su uso podría ser:

10 PRINT "Introduzca un numero" 
20 INPUT x 
30 IF x > 10 THEN PRINT "Es mayor que 10" 

(Fuente "0701.bas". Probado en GwBasic 2.02, Locomotive Basic de Amstrad CPC, Commodore 64 Basic V2, Msx Basic 2.1)

Su equivalente en Basic256 sería casi idéntico, pero sin números de línea:

PRINT "Introduzca un numero" 
INPUT x 
IF x > 10 THEN PRINT "Es mayor que 10"

(Fuente "0702.bas". Probado en Basic256)

Ejercicio propuesto 7.1: Crea una programa que te pida un número y diga si es positivo.

Alguna versión de BASIC antigua puede ser un poco más restrictiva y permitir sólo la sintaxis "IF condición THEN GOTO linea", que veremos en el siguiente apartado. De momento vamos a suponer que no es el caso, y profundizar más en el uso de IF.

La mayoría de las versiones de BASIC permiten indicar qué hacer si no se cumple la condición, con la orden ELSE:

10 PRINT "Introduzca un numero" 
20 INPUT x 
30 IF x > 10 THEN PRINT "Mayor que 10" ELSE PRINT "Menor o igual que 10"

(Fuente "0703.bas". Probado en GwBasic 2.02, Locomotive Basic de Amstrad CPC, Msx Basic 2.1; Commodore 64 Basic V2 no aceeta "ELSE")

Ejercicio propuesto 7.2: Crea una programa que te pida un número y diga si es positivo o no lo es, usando IF y ELSE.

De hecho, normalmente podremos enlazar varias condiciones (aunque debemos recordar que en muchas versiones de BASIC antiguas no podremos superar los 255 caracteres por línea). Por ejemplo, podemos comprobar si un número es mayor que 10, menor que 10 o exactamente igual a 10 con:

10 PRINT "Introduzca un numero" 
20 INPUT x 
30 IF x > 10 THEN PRINT "Mayor que 10" ELSE IF x < 10 THEN PRINT "Menor que 10" ELSE PRINT "Exactamente 10"

(Fuente "0704.bas". Probado en GwBasic 2.02, Locomotive Basic de Amstrad CPC, Msx Basic 2.1)

Ejercicio propuesto 7.3: Crea una programa que te pida un número y diga si es negativo, es cero o es positivo, usando dos IF encadenados.

Nuevamente, en Basic256 sería muy parecido, pero sin números de línea. Esta sería la primera versión, con una única condición:

PRINT "Introduzca un numero" 
INPUT x 
IF x > 10 THEN PRINT "Mayor que 10" ELSE PRINT "Menor o igual que 10"

(Fuente "0705.bas". Probado en Basic256)

Pero la segunda versión, con dos condiciones encadenadas, sería válida en QBasic y (con ligeras modificaciones que veremos pronto) FreeBasic, pero no en Basic256:

PRINT "Introduzca un numero" 
INPUT x 
IF x > 10 THEN PRINT "Mayor que 10" ELSE IF x < 10 THEN PRINT "Menor que 10" ELSE PRINT "Exactamente 10"

(Fuente "0706.bas". Probado en QBasic 1.1)

Los BASIC modernos, que trabajan sin números de línea, suelen permitir otra forma ampliada de escribir la orden IF, que permite dar varios pasos si se cumple la condición o si no se cumple, y que termina con ENDIF:

IF condición THEN 
lista_de_ordenes_1 
ELSE 
lista_de_ordenes_2 
ENDIF

De modo que, en Basic256 la primera versión del programa anterior se podría escribir también así:

PRINT "Introduzca un numero" 
INPUT x 
IF x > 10 THEN 
    PRINT "Mayor de 10"
ELSE
    PRINT "Menor o igual que 10"
ENDIF

(Fuente "0707.bas". Probado en Basic256)

Y la segunda podría ser:

PRINT "Introduzca un numero" 
INPUT x 
IF x > 10 THEN 
    PRINT "Mayor que 10"
ELSE
    IF x < 10 THEN 
        PRINT "Menor que 10"
    ELSE
        PRINT "Exactamente 10"
    ENDIF
ENDIF

(Fuente "0708.bas". Probado en Basic256)

Ejercicio propuesto 7.4: Crea una programa que te pida un número y diga si es negativo, es cero o es positivo, usando dos IF-ENDIF encadenados.

Hemos empleado el signo ">" para ver si una variable es mayor que un cierto valor y el signo "<&" para ver si es menor. Veamos cómo se indican las otras comparaciones posibles:

> Mayor que  
>= Mayor o igual que  
< Menor que  
<= Menor o igual que  
= Igual a  
<> Distinto de  
```basic

**Las condiciones se pueden enlazar** con **AND** ( y ), **OR** ( ó ), **NOT** ( no ), pero entonces puede ser interesante emplear paréntesis, para que el resultado sea más legible (y para evitar problemas de precedencia de operadores, que no trataremos todavía), por ejemplo:

```basic
IF ((a>2) AND (b<>3)) OR (NOT (c>3)) THEN PRINT "Es valido"

Un programa que comprobase si el usuario teclea 3 o 5 podría ser

10 REM Comprobar dos posibles valores
20 PRINT "Introduzca 3 o 5" 
30 INPUT x 
40 IF x = 3 OR x = 5 THEN PRINT "Correcto!" ELSE PRINT "No!"

(Fuente "0709.bas". Probado en GwBasic 2.02, Locomotive Basic de Amstrad CPC, Msx Basic 2.1)

Nota: un error frecuente es "abreviar demasiado", sin indicar el nombre de la variable en todas las comparaciones, como veremos en el siguiente ejemplo. Algunas versiones de BASIC marcarán esa línea como incorrecta, mientras que otras pueden creer que es correcta, pero dar un resultado incorrecto, porque "OR" puede tener otros significados, que veremos más adelante:

10 REM Comprobacion incorrecta dos posibles valores
20 PRINT "Introduzca 3 o 5" 
30 INPUT x 
40 IF x = 3 OR 5 THEN PRINT "Correcto!" ELSE PRINT "No!": REM Incorrecto!

(Fuente "0710.bas". Probado en GwBasic 2.02, Locomotive Basic de Amstrad CPC, Msx Basic 2.1)

(Este programa, cuya línea 40 está mal escrita, responderá "Correcto!" con otros valores que no son el 3 ni el 5. Más adelante veremos los motivos.

Ejercicio propuesto 7.5: Crea una programa que te pida dos número y diga si los dos son positivos o si, por el contrario, al menos uno es negativo o cero.

Obviamente, se pueden "mezclar" los "if" y los "for" en un mismo programa. Por ejemplo, podríamos saludar varias veces a un usuario si su respuesta es correcta:

10 PRINT "Dime tu nombre" 
20 INPUT nombre$ 
30 IF nombre$="Nacho" THEN FOR i = 1 TO 5:PRINT"HOLA":NEXT i

(Fuente "0711.bas". Probado en GwBasic 2.02, Locomotive Basic de Amstrad CPC, Commodore 64 Basic V2, Msx Basic 2.1)

Que en Basic256 sería casi idéntico:

PRINT "Dime tu nombre" 
INPUT nombre$ 
IF nombre$="Nacho" THEN FOR i = 1 TO 5:PRINT"HOLA":NEXT i

(Fuente "0712.bas". Probado en Basic256)

O bien, desglosando en líneas separadas

PRINT "Dime tu nombre" 
INPUT nombre$ 
IF nombre$="Nacho" THEN 
    FOR i = 1 TO 5
        PRINT"HOLA"
    NEXT i
END IF

(Fuente "0713.bas". Probado en Basic256)

Y también podemos comprobar condiciones dentro de un "for". Por ejemplo, podemos tratar de encontrar los múltiplos de 7 que hay entre 1 y 100, si recorremos los números del 1 al 100, mirando para cada uno de ellos si la división entre 7 es exacta:

10 REM Multiplos de 7
20 FOR i = 1 TO 100
30   IF i/7 = INT(i/7) THEN PRINT i
40 NEXT i

(Fuente "0714.bas". Probado en GwBasic 2.02, Locomotive Basic de Amstrad CPC, Commodore 64 Basic V2, Msx Basic 2.1)

Ejercicio propuesto 7.6: Crea un programa que te pida un número (entero) y muestre sus divisores.

Ejercicio propuesto 7.7: Crea un programa que te pida un número (entero) y diga si es primo.

Ejercicio propuesto 7.8: Crea un programa que muestre los números primos entre 1 y 100.

Ejercicio propuesto 7.9: Crea un programa que muestre los números primos entre 1 y el número que escoja el usuario.

Ejercicio propuesto 7.10: Crea un programa que muestre los números entre 1 y 100 que sean múltiplos de 2 y de 3 pero no de 12.

6465 visitas desde el 19-04-2019

AnteriorPosterior