Esta instrucción funciona casi igual que la IF...THEN, pero con una diferencia crucial. La sentencia
Código Pascal:
la instruccion se ejecutaba solo si la condicion era verdadera, o sea TRUE. En caso contrario no se ejecuta nada y el programa continúa su curso. Sin embargo, la instrucción IF...THEN...ELSE se ejutará siempre. Veamos, su sintaxis es asíVer original
If condicion then instruccion;
Código Pascal:
Ver original
If condicion then instruccion1 Else instruccion2;
Esto significa SI pasa tal cosa HAS esta instruccion, SINO HAS esta otra. O sea, si la condicion es verdadera se ejecuta la instruccion1 tal y como ya han visto, y se omitirá la instrucción luego del ELSE. Si la condición es falsa no se hará la instruccion1 y se hará automáticamente la instruccion2.
O sea, le estamos diciendo al IF lo que debe hacer si su condicion es falsa. Antes solo le decíamos que hacer si era verdadera, ahora tiene las dos opciones, por lo tanto, algo se ejecutará sí o sí.
Noten que la instruccion1 no termina en punto y coma (;). Nunca antes de un ELSE que forma parte de un IF debe ir un punto y coma porque el compilador creerá que es un IF común como el que vimos al principio.
Para el ejemplo anterior, teniendo las variables letra1 y letra2 puedo escribir esto
Código Pascal:
Veamos un ejemplo, primero solo con IF...THEN, donde se le pedirá al usuario que ingrese su edad, asumiremos que se ingresarán números enteros. Si la edad es mayor a 50 años le decimos que es un viejo, en caso contrario le decimos que es joven:Ver original
If letra1<=letra2 then writeln('La primera letra es menor o igual que la segunda') Else writeln('La primera letra es mayor que la segunda');
Código Pascal:
Ver original
PROGRAM viejo; Var edad: integer; //Variable para guardar la edad. BEGIN //Mostramos mensaje y leemos la edad. write('Ingrese su edad: '); readln(edad); //Mostramos lo mismo que ya ingresó. writeln('Usted tiene ',edad,' años.'); //Si tiene más de 50 años le decimos viejo. If edad>50 then writeln('Usted es un viejo'); //Si tiene menos de 50 o 50 justito, le decimos joven. If edad<=50 then writeln('Usted es joven'); END.
Hemos usado dos sentencias IF, una contempla lo que la otra no, o sea que o se ejecuta una o la otra. Sin embargo, aunque esto se puede hacer, no es lo correcto porque en futuros programas mucho mas complejos se complicará, además hace que el código sea menos comprensible. Los dos If anteriores se resumen en este
Código Pascal:
Ver original
If edad>50 then writeln('Usted es un viejo') Else writeln('Usted es joven');
Anidación de la instrucción If…then:
Es posible colocar un if dentro de otro if. A esto se lo conoce como anidación y se usa a muy menudo. Sin embargo hay que tener mucho cuidado de hacerlo bien o podría darse que nosotros creemos que el programa tomará cierto camino cuando en realidad no lo hará. Veremos un ejemplo de eso luego del de a continuación:
Veamos un ejemplo en el que se nos pedirá la edad dos veces. Si ingresamos una edad mayor a 50 y otra menor nos dirá que somos viejos jóvenes.
Código Pascal:
Ver original
PROGRAM anidacion; Var edad1, edad2: integer; BEGIN Write(‘Ingresa tu edad: ‘); Readln(edad1); Write(‘Ingresa tu edad nuevamente: ‘); Readln(edad2); If edad1>50 then If edad2<50 then Writeln(‘Eres un viejo joven’); END.
Como vemos, nuestro programa nos pide el ingreso de números enteros que corresponden a nuestra edad. En la línea 12 decimos si el valor en edad1 es mayor a 50 entonces si el valor en edad2 es menor a 50 escribe ‘Eres un viejo joven’.
Ahora bien, si edad1 es menor a 50 entonces no pasa nada, porque el segundo If está dentro del primero y por ende, si la condición de este no se cumple no entraremos en él.
Anidación de un if…then con un if…then…else:
Es posible hacer todas las anidaciones que se quieran, sin embargo como ya dije antes, debemos tener cuidado. Aquí daré un ejemplo de una anidación que nosotros podríamos interpretar de forma errónea.
Código Pascal:
Ver original
PROGRAM anidacion2; Var edad1, edad2: integer; BEGIN Write(‘Ingresa tu edad: ’); Readln(edad1); Write(‘Ingresa nuevamente tu edad: ‘); Readln(edad2); If edad1>50 then If edad1=edad2 then Writeln(‘Eres un viejo’) else Writeln(‘Eres joven’); END.
En este ejemplo uno podría interpretar que si tenemos más de 50 años y además ingresamos las dos veces la misma edad aparecerá el mensaje ‘Eres un viejo’, y si edad1 era menor a 50 nos aparecerá el mensaje ‘Eres joven’. Sin embargo no es así, esa instrucción se fijará si nuestra edad es mayor a 50 y solo si eso es cierto luego verá si ambas edades eran iguales, si es así aparecerá el mensaje ‘Eres un viejo’ y si no aparecerá el mensaje ‘Eres joven’. La correcta indentación de esa instrucción es la siguiente:
Código Pascal:
Como ven, solo se ejecutará esto si edad1>50 resulta ser true.Ver original
If edad1>50 then If edad1=edad2 then Wirteln(‘Eres un viejo’) else Writeln(‘Eres un joven’);
La forma correcta de escribir esta instrucción para obtener el resultado que interpretábamos anteriormente sería:
Código Pascal:
Como ven, hemos encerrado entre begin y end la segunda instrucción if. Esto hace que todo lo que esté dentro del área abarcada por esas dos palabras sea como una sola instrucción para el programa, a pesar de que allí dentro podemos poner todas las que queramos. De no hacer esto, el else formaría parte del segundo if y no del primero. Debemos recordar que un else cierra siempre al if que se encuentre más próximo a él. Para quebrar esto debemos usar beginy end.Ver original
If edad1>50 then begin If edad1=edad2 then Wirteln(‘Eres un viejo’); end else Writeln(‘Eres un joven’);
Los delimitantes begin y end se usan para indicar que al tomar cierto flujo de ejecución dada una condición el programa debe efectuar muchas instrucciones. No serviría de mucho que por cada if que usemos solo podamos dictar una instrucción. La sintaxis genérica sería la siguiente:
Código Pascal:
Ver original
If condicion then begin Instruccion1; Instruccion2; . . . InstruccionN; end else begin Instruccion1; Instruccion2; . . . InstruccionN; end;
Vean que también es posible usar los delimitadores begin y end para la instrucción else del if. Estos begin y end forman lo que llamamos bloques de instrucciones y difieren del begin y end principales ya que estos forman un único bloque que es el programa completo. Luego de un end va enseguida un punto y coma que indica el final del bloque y no un punto como en el caso del end principal.
Notar que el end anterior al else no finaliza con punto y coma. Esto se debe a lo que ya expliqué antes. Recordar que nunca, antes de una instrucción else que forma parte de un if debe ir colocado un punto y coma.
Condiciones compuestas:
Hasta ahora hemos visto como dada una condición específica el programa tomará un camino u otro para realizar sus tareas. Sin embargo normalmente deben cumplirse varias condiciones para que un programa tome un camino u otro. Aquí entramos a componer condiciones, o sea, a decir cosas como: Si pasa tal cosa y tal otra has esta tarea o si pasa tal otra cosa has esta.
Aprenderemos a usar los operadores booleanos para componer condiciones.
Veamos un ejemplo parecido al anterior:
Código Pascal:
Ver original
PROGRAM anidacion2; Var edad1, edad2: integer; BEGIN Write(‘Ingresa tu edad: ’); Readln(edad1); Write(‘Ingresa nuevamente tu edad: ‘); Readln(edad2); If (edad1>50) and (edad1=edad2) then Writeln(‘Eres un viejo’) else Writeln(‘O eres joven o mentiroso’); END.
Aquí vemos que en la instrucción IF hay dos condiciones entre paréntesis unidas por la palabra reservada AND. Esto significa que se ejecutará la instrucción del IF si ambas condiciones son verdaderas, o sea, si se cumple a la vez que edad1>50 y que edad1=edad2. Basta con que una de ellas sea falsa para que no se ejecute la instrucción del IF y se pase a la del ELSE. En ese caso no sabremos si sucedió porque el usuario era joven o si era un mentiroso que ingresó dos edades diferentes.
Esta es una composición de condiciones que forman una condición total. El AND forma esta condición evaluando las dos pequeñas, entonces si ambas son verdaderas a la vez la condición AND devuelve TRUE.
Estas composiciones son evaluadas por Free Pascal con el método conocido como circuito corto. Esto es que, si la primera condición del AND es falsa, ya no se evaluará la segunda porque aunque esta fuera verdadera la condición total resulta falsa. Así nacen las tablas de verdad. AND en inglés significa Y.
Si nosotros quisiéramos haber dicho que se ejecute el IF si la primera condición ó la otra eran verdaderas deberíamos haber usado el operador OR. Este es verdadero si al menos una de las condiciones es verdadera. También se evalúa por circuito corto, o sea, si la primera condición es verdadera ya no se evaluará la segunda porque aunque resulte falsa la condición total OR será verdadera.
En la parte c podrán ver las tablas de verdad para comprender mejor esto.