{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Primera prueba de }
{ "if" }
{ IF1.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Free Pascal 2.2.0w }
{ - Turbo Pascal 7.0 }
{ - Turbo Pascal 5.0 }
{ - Surpas 1.00 }
{--------------------------}
program if1;
var numero: integer;
begin
writeln('Escriba un número');
readln(numero);
if numero>0 then writeln('El número es positivo');
end.
Todo claro, ¿verdad? La "condición" debe ser una expresión que devuelva un valor del tipo "boolean" (verdadero/falso). La "sentencia" se ejecutará si ese valor es "cierto" (TRUE). Este valor puede ser tanto el resultado de una comparación (como hemos hecho en el ejemplo anterior), como una propia variable booleana (forma que veremos a continuación).
Ejercicio propuesto: 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.
Ejercicio propuesto: Crea un programa que pida al usuario un número real y diga si es mayor de 10.
Ejercicio propuesto: 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).
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Segunda prueba de }
{ "if" }
{ IF2.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Free Pascal 2.2.0w }
{ - Turbo Pascal 7.0 }
{ - Turbo Pascal 5.0 }
{ - Surpas 1.00 }
{--------------------------}
program if2;
var
numero: integer;
esPositivo: boolean;
begin
writeln('Escriba un número');
readln(numero);
esPositivo := (numero>0);
if esPositivo then writeln('El número es positivo');
end.
Cuando veamos en el próximo tema las órdenes para controlar el flujo del programa, seguiremos descubriendo aplicaciones de las variables booleanas, que muchas veces uno considera "poco útiles" cuando está aprendiendo.
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Tercera prueba de }
{ "if" }
{ IF3.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Free Pascal 2.2.0w }
{ - Turbo Pascal 7.0 }
{ - Turbo Pascal 5.0 }
{ - Surpas 1.00 }
{--------------------------}
program if3;
var
numero: integer;
begin
writeln('Escriba un número');
readln(numero);
if numero<0 then
begin
writeln('El número es negativo. Pulse INTRO para seguir.');
readln
end;
end.
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 se dan si se cumple la condición aparecen más a la derecha que el resto, para que resulten más fáciles de identificar.
Ejercicio propuesto: Crea un programa que pida al usuario un su nombre. Sólo si ese nombre es "Juan", deberá entonces pedirle una contraseña, y en caso de que la contraseña sea "1234", le responderá diciendo "Bienvenido!"
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Cuarta prueba de }
{ "if" }
{ IF4.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Free Pascal 2.2.0w }
{ - Turbo Pascal 7.0 }
{ - Turbo Pascal 5.0 }
{ - Surpas 1.00 }
{--------------------------}
program if4;
var
numero: integer;
begin
writeln('Escriba un número');
readln(numero);
if numero<0 then
writeln('El número es negativo.')
else
writeln('El número es positivo o cero.')
end.
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: 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: Crea un programa que pida al usuario un número entero y diga si es par o es impar.
Ejercicio propuesto: 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: 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).
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Quinta prueba de }
{ "if" }
{ IF5.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Free Pascal 2.2.0w }
{ - Turbo Pascal 7.0 }
{ - Turbo Pascal 5.0 }
{ - Surpas 1.00 }
{--------------------------}
program if5;
var
numero: integer;
begin
writeln('Escriba un número');
readln(numero);
if numero<0 then
writeln('El número es negativo.')
else if numero>0 then
writeln('El número es positivo.')
else
writeln('El número es cero.')
end.
Ejercicio propuesto: 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: 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.
Si se deben cumplir varias condiciones a la vez, podemos enlazarlas con "and" (y). Si se pueden cumplir varias, usaremos "or" (o). Para negar, "not" (no):
if ( opcion = 1 ) and ( terminado = true ) then [...]
if ( opcion = 3 ) or ( teclaPulsada = true ) then [...]
if not ( preparado ) then [...]
if ( opcion = 2 ) and not ( nivelDeAcceso < 40 ) then [...]
Ejercicio propuesto: 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: Crea un programa que pida al usuario dos números reales y diga si ambos positivos.
Pero cuando queremos comprobar entre varios posibles valores, sería muy pesado tener que hacerlo con muchos "if" seguidos o encadenar muchos con "and" u "or".. Hay una alternativa que resulta mucho más cómoda: la orden case. Su sintaxis es
case expresión of
caso1: sentencia1;
caso2: sentencia2;
...
casoN: sentenciaN;
end;
o bien, si queremos indicar lo que se debe hacer si no coincide con ninguno de los valores que hemos enumerado, usamos else:
case expresión of
caso1: sentencia1;
caso2: sentencia2;
...
casoN: sentenciaN;
else
otraSentencia;
end;
En Pascal estándar, esta construcción se empleaba con otherwise en lugar de "else" para significar "en caso contrario", así que si alguien de los que me lee no usa TP/BP, sino un compilador que protesta con el "else" (es el caso de Surpas), ya sabe dónde probar... ;-)
Con un ejemplito se verá más claro cómo usar "case":
{--------------------------}
{ Ejemplo en Pascal: }
{ }
{ Condiciones múltiples }
{ con "case" }
{ CASE1.PAS }
{ }
{ Este fuente procede de }
{ CUPAS, curso de Pascal }
{ por Nacho Cabanes }
{ }
{ Comprobado con: }
{ - Free Pascal 2.2.0w }
{ - Turbo Pascal 7.0 }
{ - Turbo Pascal 5.0 }
{ - Surpas 1.00 }
{ - Tmt Pascal Lt 1.20 }
{--------------------------}
program case1;
var
letra: char;
begin
WriteLn('Escriba un símbolo');
ReadLn(letra);
case letra of
' ': WriteLn('Un espacio');
'A'..'Z', 'a'..'z': WriteLn('Una letra');
'0'..'9': WriteLn('Un dígito');
'+', '-', '*', '/': WriteLn('Un operador');
else { otherwise en SURPAS }
WriteLn('No es espacio, ni letra, ni dígito, ni operador');
end;
end.
Como último comentario: la "expresión" debe pertenecer a un tipo de datos con un número finito de elementos, como "integer" o "char", pero no "real".
Y como se ve en el ejemplo, los "casos" posibles pueden ser valores únicos, varios valores separados por comas, o un rango de valores separados por .. (como los puntos suspensivos, pero sólo dos, al igual que en los "arrays").Ejercicio propuesto: Crea un programa que pida al usuario un número entero del 1 al 3, y escriba en pantalla "Uno", "Dos", "Tres" o "Número incorrecto" según corresponda.
Ejercicio propuesto: Crea un programa que pida al usuario un número, una operación (+, -, * o /) y otro número, y muestre el resultado de aplicar esa operación a esos dos números.