Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


2. Condiciones

2.1. Si... entonces...

2.1.1. Condiciones básicas

Vamos a ver cómo podemos evaluar condiciones desde Pascal. La primera construcción que trataremos es if ... then, que en español se podría traducir como "si ... entonces", algo que expresa bastante bien lo que podemos hacer con ella:

(* IF1.PAS, primera prueba de "if"    *)
(* Parte de CUPAS5, por Nacho Cabanes *)

program if1;

var numero: integer;

begin
    writeLn('Escriba un numero');
    readLn(numero);
    if numero > 0 then writeLn('El numero es positivo');
end. 

(* Ejemplo de ejecucion:
Escriba un numero
26
El numero es positivo
*)

Es decir, tras "if" se una indica "condición", que debe dar como resultado "verdadero" o "falso". La "sentencia" que indiquemos tras la palabra "then" se ejecutará si esa condición es "verdadera".

A partir de ahora, el comentario de la cabecera de nuestro fuente será como éste, un poco más detallado para indicar un "nombre del fuente" y la versión del curso a la que pertenece, de modo que sea más fácil saber de qué fuente se está hablando en caso de preguntar dudas en algún foro, como los de AprendeAProgramar.com. Además, los fuentes no usarán acentos ni eñe, para que no se conviertan en "caracteres extraños" si se llevan a un sistema operativo distinto.

En nuestro caso, veíamos si el número era mayor que cero (positivo). Los "operadores de comparación" que podemos emplear son:

OperadorSignificado
>Mayor que
>=Mayor o igual que
<Menor que
<=Menor o igual que
=Igual que
<>Distinto de
Ejercicio propuesto 2.1.1.1: Crea un programa que pida al usuario un número real y diga si es mayor de 10.
Ejercicio propuesto 2.1.1.2: Crea un programa que pida al usuario un número entero y diga si es par (pista: habrá que comprobar el resto de la división entre 2).
Ejercicio propuesto 2.1.1.3: Crea un programa que pida al usuario un número entero y diga si ha tecleado el número 5 o ha tecleado un número distinto.

2.1.2. Si no se cumple la condición

También podemos indicar lo que queremos que se haga si no se cumple la condición. Para ello tenemos la construcción "if condición then sentencia1 else sentencia2":

(* IF2.PAS, uso de "if" con "else"    *)
(* Parte de CUPAS5, por Nacho Cabanes *)

program if2;

var
    numero: integer;

begin
    writeLn('Escriba un numero');
    readLn(numero);
    if numero<0 then
        writeLn('El numero es negativo.')
    else
        writeLn('El numero es positivo o cero.')
end. 
 
(* Ejemplo de ejecucion:
Escriba un numero
26
El numero es positivo o cero.
*)

El comportamiento no es exactamente el mismo que si escribimos dos "if", con condiciones opuestas, como en este ejemplo:

(* IF2B.PAS, Dos "if" alternativos, sin "else" *)
(* Parte de CUPAS5, por Nacho Cabanes          *)

program if2b;

var
    numero: integer;

begin
    writeLn('Escriba un numero');
    readLn(numero);
    if numero < 0 then
        writeLn('El numero es negativo.')
    if numero >= 0 then
        writeLn('El numero es positivo o cero.')
end. 
 
(* Ejemplo de ejecucion:
Escriba un numero
26
El numero es positivo o cero.
*)

En este segundo fuente se analizará la segunda condición, incluso en caso de que se haya cumplido la primera; en caso de usar "else", por el contrario, no se analiza la segunda parte cuando se cumple la condición inicial.

En ambos fuentes hemos vuelto a emplear escritura indentada: las líneas que "dependen" de la anterior (como la orden que sigue a un "if" o a un "else") están un poco más a la derecha. La recomendación más habitual para esta "sangría" adicional en el texto es no usar el símbolo de tabulación, sino espacios en blanco, y la cantidad de espacios que se suele emplear es 4 (casi cualquier editor de texto moderno se podrá configurar para escribir espacios al pulsar la tecla de tabulación, y para que esa cantidad de espacios sea la que nosotros indiquemos).

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.

Ejercicio propuesto 2.1.2.1: Crea un programa que pida al usuario un número real y diga si ha tecleado el número 5 o ha tecleado un número distinto, usando "else".
Ejercicio propuesto 2.1.2.2: Crea un programa que pida al usuario un número entero y diga si es par o es impar.
Ejercicio propuesto 2.1.2.3: Crea un programa que pida al usuario dos números enteros y diga el resultado de dividir el primero entre el segundo si el segundo no es cero, o que escriba "no se puede dividir" en caso contrario.
Ejercicio propuesto 2.1.2.4: Crea un programa que pida al usuario un número real y muestre su valor absoluto (si es positivo, lo mostrará tal cual; si es negativo, le cambiará el signo).

2.1.3. Condiciones y sentencias compuestas

Si queremos hacer varias cosas cuando se cumpla una cierta condición, deberemos encerrar todas ellas entre "begin" y "end", para formar una "sentencia compuesta":

(* IF3.PAS, "if" y sentencias compuestas *)
(* Parte de CUPAS5, por Nacho Cabanes    *)

program if3;

var
    numero: integer;

begin
    writeLn('Escriba un numero');
    readLn(numero);
    if numero < 0 then
    begin
        writeLn('El numero es negativo.  Pulse INTRO para seguir.');
        readLn
    end;
end. 
 
(* Ejemplo de ejecucion:
Escriba un numero
-10
El numero es negativo.  Pulse INTRO para seguir.

*)

En este ejemplo, si el número es negativo, se ejecutan dos acciones: escribir un mensaje en pantalla y esperar a que el usuario pulse INTRO (o ENTER, o RETURN, o ↵, según sea nuestro teclado), lo que podemos conseguir usando "readln" pero sin indicar ninguna variable en la que queremos almacenar lo que el usuario teclee.

Nota: nuevamente, hemos empleado la escritura indentada para intentar que el programa resulte más legible: los pasos que forman parte de cada "sentencia compuesta" están tabulados una posición más a la derecha, para que sea fácil ver dónde empieza y dónde termina el bloque.

Como se puede observar en la última orden "readln", no es necesario punto y coma antes de un "end", pero tampoco se considera un error si se conserva el punto y coma.

Ejercicio propuesto 2.1.3.1: 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!"
Ejercicio propuesto 2.1.3.2: 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"

2.1.4. Sentencias "If" encadenadas

Si unas condiciones dependen de otras anteriores, podemos encadenar varias sentencias "if...then...else":

(* IF4.PAS, "if" encadenados             *)
(* Parte de CUPAS5, por Nacho Cabanes    *)

program if4;

var
    numero: integer;

begin
    writeLn('Escriba un numero');
    readLn(numero);
    if numero<0 then
        writeLn('El numero es negativo.')
    else if numero>0 then
        writeLn('El numero es positivo.')
    else
        writeLn('El numero es cero.')
end. 

(* Ejemplo de ejecucion:
Escriba un numero
0
El numero es cero.
*)

Ejercicio propuesto 2.1.4.1: 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.
Ejercicio propuesto 2.1.4.2: Crea un programa que pida al usuario dos números reales y que diga si son iguales, o, en caso contrario, diga cual es el mayor de los dos.

2.1.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):

if ( opcion = 1 ) and ( puntos > 500 ) then [...]

if ( opcion = 3 ) or ( enemigos = 0 ) then [...]

if not ( vidas > 0 ) then [...]

if ( opcion = 2 ) and not ( nivelDeAcceso < 40 ) then [...]

Ejercicio propuesto 2.1.5.1: Crea un programa que pida al usuario un número entero y diga si es par y a la vez múltiplo de 3.
Ejercicio propuesto 2.1.5.2: Crea un programa que pida al usuario dos números reales y diga si ambos son positivos.