AnteriorPosterior

4. Condiciones (2: else)

Por: Nacho Cabanes
Actualizado: 13-05-2019 15:15
Tiempo de lectura estimado: 10 min.

 

Versión en video (16:53 min):

Pascal

4. Condiciones (2: else)

4.1. El caso contrario: "else"

En el último programa habíamos planteado dos condiciones opuestas:

if n > 0 then writeln('Es mayor que cero');
if n <= 0 then writeln('Es menor o igual que cero');

Es muy frecuente encontrarnos con programas en los que ocurra lo mismo que en ese: tener que realizar dos acciones distintas según se dé una cierta condición o no sea así.

Para esos casos, existe una construcción alternativa, que hace que el programa sea más compacto, más legible y menos propenso a errores: en vez de expresarlo como dos condiciones opuestas, podemos reemplazar la segunda condición por la palabra "else" ("en caso contrario"):

if n > 0 then writeln('Es mayor que cero')
else writeln('Es mayor que cero');

El comportamiento no es exactamente el mismo: antes se comprobaba la segunda condición aunque la primera sea cierta. En cambio, a un bloque "else" sólo se entrará cuando no se cumpla la condición inicial, por lo que el programa ejecutable resultante es ligeramente más rápido.

Un detalle importante que conviene tener en cuenta es que antes del "else" no debe haber un punto y coma, porque eso indicaría el final de la sentencia "if...", y el compilador nos avisaría con un error.

El programa completo quedaría así:

program mayorQueCero3;

var
  n: integer;

begin
  write('Dime un numero: ');
  readln(n);
  if n > 0 then writeln('Es mayor que cero')
  else writeln('Es menor o igual que cero');
end.

4.2. El "formato libre"

En Pascal (y en la mayoría de lenguajes modernos), se puede dejar tantas líneas en blanco o espacios intermedios como queramos. Por ejemplo, da igual escribir

var n:integer;

que

var
n:
integer;

o que

var
  n: integer;

Esa posibilidad es lo que se conoce como "formato libre". El formato más habitual en la práctica coincide con el último ejemplo: los detalles de cada nuevo bloque se escribirán un poco más a la derecha que lo que los delimita. Por ejemplo, en una declaración de variables con "var", es habitual indicar todas las variables en líneas distintas de la de la palabra "var", y tabuladas un poco a la derecha.

Lo mismo se hace con los bloques que están entre "begin" y "end", o dentro de un "if" o "else", así:

program mayorQueCero4;

var
    n: integer;

begin
    write('Dime un numero: ');
    readln(n);
    if n > 0 then 
        writeln('Es mayor que cero');
    else 
        writeln('Es menor o igual que cero');
end.

El tamaño habitual de cada nuevo "sangrado" es de 2 o (preferiblemente) 4 espacios. También se puede usar la tecla del tabulador, pero esto es recomendable en los editores que convierten esos saltos de tabulación a 4 espacios (o a una cantidad especificada por el usuario), y no tanto en los editores que usan el "carácter de tabulación", por dos posibles problemas:

  • En muchos casos, esos saltos de tabulación se mostrarán como 8 espacios, lo que puede hacer que un programa mediano resulte "demasiado ancho" y difícil de leer.

  • En el caso de que se mezclen zonas que estén tabuladas con espacios y otras tabuladas con el carácter de tabulación, es posible que se vea "descolocado" en otros editores y, nuevamente, resulte difícil de leer.

Además, el lenguaje Pascal no distingue entre mayúsculas y minúsculas, así que en vez de "writeln" también es posible escribir "WriteLn" o "WRITELN", y todas ellas son válidas. De hecho, hace años era habitual escribir las órdenes de Pascal en mayúsculas (y, según el programador, las variables en minúsculas). Hay quien dice que leer mucho en mayúsculas cansa más que si está en minúsculas, por lo que ese estilo está en desuso. Usando ese estilo (anticuado), el programa anterior podría quedar:

PROGRAM mayorQueCero5;

VAR
    n: INTEGER;

BEGIN
    WRITE('Dime un numero: ');
    READLN(n);
    IF n > 0 THEN 
        WRITELN('Es mayor que cero');
    ELSE 
        WRITELN('Es menor o igual que cero');
END.

4.3. Sentencias compuestas

En ocasiones no querremos dar un único paso cuando se cumpla (o no) una condición, sino varios pasos. Cuando eso ocurra, deberemos encerrar los distintos pasos entre "begin" y "end", como en este ejemplo:

program mayorQueCero6;

var
  n: integer;

begin
    write('Dime un numero: ');
    readln(n);
    if n >= 0 then
    begin
        writeln('Es mayor que cero');
        writeln('o quiza sea igual a cero')
    end
    else
        writeln('Es menor que cero');
    readln;
end.     

4.4. If encadenados

Si queremos comprobar tres o más valores posibles, podemos "encadenar" varias órdenes "if-else":

program mayorQueCero7;

var
  n: integer;

begin
    write('Dime un numero: ');
    readln(n);
    if n < 0 then
        writeln('Es negativo')
    else if n > 0 then
        writeLn('Es positivo')
    else
        writeLn('Es cero.')
    readln;
end.

4.5. Varias condiciones simultáneas.

Si se deben cumplir varias condiciones a la vez, podemos enlazarlas con "and" (y). Si se pueden cumplir varias, usaremos "or" (o). Para detallar que una condición NO debe cumplirse, utilizaremos "not" (no):

program AndOrNot;

var
  n1, n2: integer;

begin
    write('Dime un numero: ');
    readln(n1);
    write('Dime otro numero: ');
    readln(n2);

    if n1 > 20 then
        writeln('El primero es mayor que 20');

    if n1 > 0 and n2 > 0 then
        writeln('Los dos son positivos');

    if n1 < 0 or n2 < 0 then
        writeln('Uno es negativo');

    if n1 <> 0 then
        writeln('n1 no es cero');

    if not (n1 = 0) then
        writeln('n1 no es cero');

    readln;
end.

Ejercicios propuestos

Ej.04.01: Crea un programa que pida al usuario su identificador (un número entero). Sólo si ese identificador es "2001", deberá entonces pedirle una contraseña (otro número entero), y en caso de que la contraseña sea "1234", le responderá diciendo "Bienvenido!"

Ej.04.02: Pide al usuario dos números enteros. Si el segundo es cero, deberás mostrar el texto "No se puede dividir entre cero", y en caso contrario, se calculará el valor de la división en una nueva variable y después se mostrará el valor de dicha variable

Ej.04.03: Crea un programa que pida al usuario un número entero y diga si es mayor de 10, es menor de 10 o es exactamente 10

Ej.04.04: Crea un programa que pida al usuario un número entero y diga si es par y a la vez múltiplo de 3.

885 visitas desde el 10-05-2019

AnteriorPosterior