Manual de Basic Spectrum 48k.

Capítulo 13

Condiciones

Resumen

  • AND, OR
  • NOT

Vimos en el capítulo 3 cómo una sentencia IF adopta la forma

IF condición THEN

Las condiciones, entonces, eran las relaciones (= , < , > , <= , >= y <>), que comparan dos números o dos cadenas. También pueden combinar varias de ellas, con el empleo de las operaciones lógicas AND, OR y NOT.

Una relación AND y otra relación es verdadera siempre que ambas relaciones sean verdaderas, por lo que podría tener una línea como:

IF a$ = "sí" AND x > 0 THEN PRINT x

en la que x solamente se consigue imprimir si a$ = "sí" y x > 0. El BASIC es, en este caso, tan próximo al inglés que parece ser que no vale la pena entrar en detalles. Como en inglés, puede unir muchas relaciones con AND y, entonces, el conjunto es verdadero si lo son todas las relaciones individuales.

Una relación OR (O) otra relación es verdadera siempre que una de las dos relaciones, por lo menos, sea verdadera (recuerde que sigue siendo verdadera si ambas relaciones son verdaderas; esto es algo que no siempre se implica en inglés).

La relación NOT vuelve todo al revés. La relación NOT es verdadera siempre que la relación sea falsa y falsa siempre que sea verdadera.

Las expresiones lógicas pueden constituirse con relaciones y las funciones AND, OR y NOT, lo mismo que las expresiones numéricas pueden formarse con números y los signos +, -, etc.; incluso puede ponerles entre paréntesis, en caso de necesidad. Tienen prioridades en la misma forma que las operaciones habituales +, -, *, / y , esto es: OR tiene la más baja prioridad, luego AND, luego NOT, luego las relaciones y las operaciones habituales.

NOT es realmente una función, con un argumento y un resultado, pero su prioridad es mucho más baja que la de otras funciones. Por consiguiente, su argumento no precisa paréntesis a no ser que contenga AND u OR (o ambas funciones). NOT a = b significa lo mismo que NOT (a = b) (y lo mismo que a <> b, por supuesto).

<> es la negación de = en el sentido de que es verdadera si, y solamente, si, = es falsa. Dicho de otro modo:

a <> b es lo mismo que NOT a = b

y también:

NOT a <> b es lo mismo que a = b

Persuádase a sí mismo que >= y <= son las negaciones de < y de > respectivamente; por consiguiente, siempre puede prescindir de NOT en una relación cambiando la relación.

Además:

NOT (una primera expresión lógica AND una segunda)

es lo mismo que

NOT (la primera) OR NOT (la segunda)

y

NOT (una primera expresión lógica OR una segunda)

es lo mismo que

NOT (la primera) AND NOT (la segunda)

Con el empleo de lo anterior, puede efectuar las funciones NOT a través de paréntesis hasta que, a la larga, estén aplicadas todas a las relaciones y, luego, puede prescindir de ellas. Hablando en términos lógicos, NOT es innecesaria, aunque pueda seguir considerando que su empleo hace más claro un programa.

La siguiente sección es bastante complicada y puede pasarse por alto por los "pusilánimes".

Pruebe:

PRINT 1 = 2,1 <> 2

que podría esperar que diera un error de sintaxis. De hecho, en lo que respecta al ordenador, no hay nada como un valor lógico; en cambio, emplea números ordinarios, con observancia de unas pocas reglas:

  1. = , < , > , <= , =< y <> todos ellos dan resultados numéricos: 1 para verdadero y 0 para falso. Por consiguiente, el comando PRINT anterior imprimió 0 para '1 = 2', que es falso y 1 para '1 <> 2' que es verdadero.

  2. En:
    IF condición THEN ...

    la condición puede ser realmente cualquier expresión numérica. Si su valor es 0, entonces, cuenta como falso y cualquier otro valor (incluyendo el valor de 1 que da una relación verdadera) cuenta como verdadero. Así, la sentencia IF significa exactamente lo mismo que:

    IF condición <> 0 THEN ...

  3. AND, OR y NOT son también operaciones con valoración numérica.
    x AND y tiene el x, si y es verdadera (no cero)
    valor 0 (falsa), si y es falsa (cero)
    x OR y tiene el valor 1 (verdadera), si y es verdadera (no cero)
    x, si y es falsa (cero)
    NOT x tiene el valor 1 (verdadera), si y es verdadera (no cero)
    x, si y es falsa (cero)

    (observe que "verdadera" significa "no cero" cuando estamos comprobando un valor determinado, pero significa '1' cuando estamos obteniendo uno nuevo).

Lea detenidamente el capítulo de nuevo teniendo presente lo anteriormente expuesto, cerciorándose de que todo va bien.

En las expresiones x AND y, x OR y y NOT x, x e y tomarán normalmente los valores 0 y 1 para falso y verdadero. Realice las diez combinaciones diferentes (cuatro para AND, cuatro para OR y dos para NOT) y compruebe que hacen lo que el capítulo le indica que ha de esperar que hagan.

Pruebe este programa:

10 INPUT a
20 INPUT b
30 PRINT(a AND a >=b ) + (b AND a < b)
40 GO TO 10

Cada vez, imprime el más grande de los dos números a y b.

Convénzase a sí mismo de que puede acordarse de

x AND y

como teniendo el significado de

x si y (si no, el resultado es 0)

y de

x OR y

con el significado de

x a no ser que y (en cuyo caso, el resultado es 1)

Una expresión con el empleo de AND o de OR como la anterior se denomina una expresión condicional. Un ejemplo con el empleo de OR podría ser:

LET precio total = precio menos impuesto * (1.15 OR v$ = "calculado zero")

Observe cómo AND tiende a ir con la adición (porque su valor por defecto es 0) y OR tiende a ir con la multiplicación (porque su valor por defecto es 1).

También puede elaborar expresiones condicionales valoradas de cadenas, pero solamente utilizando AND

x$ AND y tiene el valor x$ si y no es cero
"" si y es cero

por lo que significa x$ si y (si no, la cadena vacía).

Pruebe este programa, que introduce dos cadenas y las pone en orden alfabético.

10 INPUT "introducir dos cadenas" 'a$,b$
20 I F a$ > b$ THEN LET c$ = a$: LET a$ = b$: LET b$ = c$
30 PRINT a$;" ";("<" AND a$ < b$) + ("=" AND a$ = b$);" "; b$
40 GO TO 10

Ejercicio

  1. El lenguaje BASIC opera, a veces, de forma distinta al inglés. Considere, por ejemplo, la cláusula inglesa 'si a no es igual a b o c'. ¿Cómo podría escribirla en BASIC? La respuesta no es

    IF A <> B OR C

    ni tampoco

    IF A <> B OR A <> C

Manual de Basic Spectrum 48k.