Control Basico Condicional

Los programas tienen que tomar decisiones. Al fin y al cabo, esto es lo que hace particulares a los ordenadores, lo que los diferencia del resto de las máquinas.

If..then..else

Con estas tres palabras claves, se pueden tomar decisiones en tiempo de ejecución sobre prácticamente cualquier condición posible. Veamos un ejemplo:

program leccion6;

var
    radio : Integer;
    entrada : char;

begin
    write('Escribe el radio: '); readln(radio);
    write('¿Necesitas calcular la circunferencia? [S/N]:'); readln(entrada);
    if (entrada='s') or (entrada='S') then
    begin
        write('La circunferencia es ');
        writeln(2*PI*radio);
    end
    else writeln ('No se ha calculado la circunferencia.');
end.

De este pequeño programa se pueden aprender muchas cosas. Lo primero que llama la atención es:

if (entrada='s') or (entrada='S') then

Lo que hay entre el if y el then es la condición. Si lo lees en español literalmente, significa lo mismo que lo que hay escrito, es decir: Si entrada es igual a s minúscula o entrada es igual a S mayúscula entonces…. Entonces estas aprendiendo también que, en Pascal, la palabra or significa lo mismo que en nuestro lenguaje humano, es una forma de unir dos condiciones.

Como ves, las condiciones están puestas entre paréntesis. Esto es necesario para no confundir al compilador con la instrucción or, ya que no tiene porqué saber si lo que quieres es hacer un or de toda la expresión, de la 's', de la variable entrada, etc. Al igual que en las matemáticas, en programación el uso de paréntesis determina la forma correcta de realizar las operaciones.

Y por último, lo más interesante de todo, la condición: entrada='s' significa ¿es entrada igual a s?. Fíjate que, para las condiciones, NO usamos :=, sino = a secas. Esto es porque una condición no es lo mismo que una asignación. Ahora no estamos asignando a entrada el valor 's', sino que estamos verificándolo. Es una diferenciación muy importante.

Por supuesto, en Pascal los caracteres y los strings hay que rodearlos siempre con los caracteres ' '. Y las mayúsculas, en los strings y caracteres, no son iguales a las minúsculas (fuera de los strings da igual).

Inmediatamente después tenemos otra sorpresa. ¡Hay un bloque, compuesto por begin y end dentro del bloque principal! Lo que hace este bloque, como estarás suponiendo, es ejecutar lo que hay en su interior si la condición antes propuesta es verdadera. Lo que hay dentro del bloque ya sabes lo que significa.

Inmediatamente después del bloque está esto:

end
    else writeln ('No se ha calculado la circunferencia.');
end.

Fíjate en dos cosas muy importantes: el end no tiene un punto y coma al final, e inmediatamente después hay un else. ¿Por qué?

Porque el else pertenece todavía a la instrucción if anterior. else significa y si no. Si pusieras un punto y coma detrás del end, obtendrías un error. Siempre ten en cuenta, y para esto sirven los puntos y comas, a que instrucción pertenecen unas y otras cosas. Tener esto claro te evitará muchos fallos en el futuro.

Detrás del else no tenemos un bloque de begin…end. Esto es debido no a que no podamos, sino a que como solo ejecutamos una sola instrucción, no es necesario. Podíamos haber escrito esto y el resultado es el mismo:

end
    else begin
        writeln ('No se ha calculado la circunferencia.');
    end;
end.

Como siempre, da igual el espaciado, si pones el begin en una nueva linea, o no, etc. Solo hay que respetar el ;.
Recuerda: Aprender a manejar correctamente los begin…end y los ; es imprescindible para entender perfectamente como escribir condiciones.

Operaciones lógicas

Ya hemos visto, en el ejemplo anterior, dos operaciones lógicas. Una es la igualdad, mediante el símbolo =, y la otra es un or lógico representado por la palabra or. Veamos todas las operaciones lógicas que se pueden usar, y algunos ejemplos:

Operación Significado Ejemplo Descripción del ejemplo
and y lógico (a=1) and (b=1) a=1 y b=1
not no lógico not (a=1) a no es igual a 1
xor o exclusivo (a=1) xor (b=1) a=1 *o* b=1 solo si alguno es falso
or o lógico (a=1) or (b=1) a=1 o b=1
<> distinto a<>1 a no es igual a 1
< menor a<1 a es menor de 1
> mayor a>1 a es mayor de 1
<= menor o igual a<=1 a es menor o igual que 1
>= mayor o igual a>=1 a es mayor o igual que 1
in pertenece a a in [1..10] a pertenece al conjunto [1..10]

Veamos un simple ejemplo:

program logica;

var
    a : Integer;
    st : String;

begin
    write('Escribe un numero: '); readln(a);
    if a>0 then
        writeln('Es un número postivo.');
    if a<>0 then
        write('100 partido de '); write(a); write(' es '); writeln(100 div a);
    if (a>=1) and (a<=10) then
        writeln('Se puede contar con las manos');
end.
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License