Foros del Web » Programación para mayores de 30 ;) » Programación General »

Comenzando a programar: 6b - Condiciones booleanas y selección simple

Estas en el tema de Comenzando a programar: 6b - Condiciones booleanas y selección simple en el foro de Programación General en Foros del Web. Instrucción IF...THEN...ELSE: Esta instrucción funciona casi igual que la IF...THEN, pero con una diferencia crucial. La sentencia @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Pascal: Ver original If condicion ...
  #1 (permalink)  
Antiguo 03/11/2011, 09:46
 
Fecha de Ingreso: enero-2011
Mensajes: 51
Antigüedad: 12 años
Puntos: 21
Comenzando a programar: 6b - Condiciones booleanas y selección simple

Instrucción IF...THEN...ELSE:

Esta instrucción funciona casi igual que la IF...THEN, pero con una diferencia crucial. La sentencia

Código Pascal:
Ver original
  1. If condicion then
  2.    instruccion;
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í

Código Pascal:
Ver original
  1. If condicion then
  2.    instruccion1
  3. Else
  4.    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:
Ver original
  1. If letra1<=letra2 then
  2.    writeln('La primera letra es menor o igual que la segunda')
  3. Else
  4.    writeln('La primera letra es mayor que la segunda');
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:

Código Pascal:
Ver original
  1. PROGRAM viejo;
  2.  
  3. Var
  4.    edad: integer; //Variable para guardar la edad.
  5.  
  6. BEGIN
  7.    //Mostramos mensaje y leemos la edad.
  8.    write('Ingrese su edad: ');
  9.    readln(edad);
  10.  
  11.   //Mostramos lo mismo que ya ingresó.
  12.   writeln('Usted tiene ',edad,' años.');
  13.  
  14.   //Si tiene más de 50 años le decimos viejo.
  15.   If edad>50 then
  16.       writeln('Usted es un viejo');
  17.  
  18.   //Si tiene menos de 50 o 50 justito, le decimos joven.
  19.   If edad<=50 then
  20.      writeln('Usted es joven');
  21.  
  22. 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
  1. If edad>50 then
  2.    writeln('Usted es un viejo')
  3. Else
  4.    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
  1. PROGRAM anidacion;
  2.  
  3. Var
  4.    edad1, edad2: integer;
  5.  
  6. BEGIN
  7.    Write(‘Ingresa tu edad:);
  8.    Readln(edad1);
  9.    Write(‘Ingresa tu edad nuevamente:);
  10.    Readln(edad2);
  11.  
  12.    If edad1>50 then
  13.      If edad2<50 then
  14.         Writeln(‘Eres un viejo joven’);
  15.  
  16. 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
  1. PROGRAM anidacion2;
  2.  
  3. Var
  4.    edad1, edad2: integer;
  5.  
  6. BEGIN
  7.    Write(‘Ingresa tu edad:);
  8.    Readln(edad1);
  9.    Write(‘Ingresa nuevamente tu edad:);
  10.    Readln(edad2);
  11.  
  12.    If edad1>50 then
  13.      If edad1=edad2 then
  14.         Writeln(‘Eres un viejo’)
  15.    else
  16.       Writeln(‘Eres joven’);
  17.  
  18. 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:
Ver original
  1. If edad1>50 then
  2.    If edad1=edad2 then
  3.       Wirteln(‘Eres un viejo’)
  4.    else
  5.       Writeln(‘Eres un joven’);
Como ven, solo se ejecutará esto si edad1>50 resulta ser true.
La forma correcta de escribir esta instrucción para obtener el resultado que interpretábamos anteriormente sería:

Código Pascal:
Ver original
  1. If edad1>50 then
  2. begin
  3.    If edad1=edad2 then
  4.       Wirteln(‘Eres un viejo’);
  5. end
  6.    else
  7.       Writeln(‘Eres un joven’);
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.

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
  1. If condicion then
  2. begin
  3.    Instruccion1;
  4.    Instruccion2;
  5.    .
  6.    .
  7.    .
  8.    InstruccionN;
  9. end
  10. else
  11. begin
  12.    Instruccion1;
  13.    Instruccion2;
  14.    .
  15.    .
  16.    .
  17.    InstruccionN;
  18. 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
  1. PROGRAM anidacion2;
  2.  
  3. Var
  4.     edad1, edad2: integer;
  5.  
  6. BEGIN
  7.     Write(‘Ingresa tu edad:);
  8.     Readln(edad1);
  9.     Write(‘Ingresa nuevamente tu edad:);
  10.     Readln(edad2);
  11.  
  12.     If (edad1>50) and (edad1=edad2) then
  13.        Writeln(‘Eres un viejo’)
  14.     else
  15.        Writeln(‘O eres joven o mentiroso’);
  16.  
  17. 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.

Última edición por Kyshuo; 17/11/2011 a las 10:35 Razón: Mejorar las vistas de código fuente

Etiquetas: condiciones, ide, programa, simple, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:05.