7 - Estructuras condicionales simples y compuestas

No todos los problemas pueden resolverse empleando estructuras secuenciales. Cuando hay que tomar una decisión aparecen las estructuras condicionales.
En nuestra vida diaria se nos presentan situaciones donde debemos decidir.
¿Elijo la carrera A o la carrera B?
¿Estudio el lenguaje Object Pascal o el lenguaje Java?
¿Me pongo este pantalón?
Para ir al trabajo, ¿elijo el camino A o el camino B?
Al cursar una carrera, ¿elijo el turno mañana o noche?

Por supuesto que en un problema se combinan estructuras secuenciales y condicionales.

Estructura condicional simple.

Cuando se presenta la elección tenemos la opción de realizar una actividad o no realizar ninguna.
Representación gráfica:
estructura condicional simple

Podemos observar: El rombo representa la condición. Hay dos opciones que se pueden tomar. Si la condición da verdadera se sigue el camino del verdadero, o sea el de la derecha, si la condición da falsa se sigue el camino de la izquierda.
Se trata de una estructura CONDICIONAL SIMPLE porque por el camino del verdadero hay actividades y por el camino del falso no hay actividades.
Por el camino del verdadero pueden existir varias operaciones, entradas y salidas, inclusive ya veremos que puede haber otras estructuras condicionales.

Problema:

Ingresar el sueldo de una persona, si supera los 3000 pesos mostrar un mensaje en pantalla indicando que debe abonar impuestos.

Diagrama de flujo:

problema estructura condicional simple

Podemos observar lo siguiente: Siempre se hace la carga del sueldo, pero si el sueldo que ingresamos supera 3000 pesos se mostrará por pantalla el mensaje "Esta persona debe abonar impuestos", en caso que la persona cobre 3000 o menos no aparece nada por pantalla.

Proyecto9

program Proyecto9;

{$APPTYPE CONSOLE}

var
  sueldo: Double;

begin
  Write('Ingrese el sueldo:');
  ReadLn(sueldo);
  if sueldo > 3000 then
  begin
    Write('Esta persona debe abonar impuestos');
  end;
  ReadLn;
end.

El lenguaje Pascal tiene la INSTRUCCIÓN "if" para codificar las estructuras condicionales.
Estructura condicional simple.

if Condición then
begin
  Instrucción(es)
end;
La palabra clave "If" indica que estamos en presencia de una estructura condicional; seguidamente disponemos la condición y la palabra clave "then". Por último encerrada entre un bloque begin y end las instrucciones de la rama del verdadero.

Es indispensable que las instrucciones a ejecutar en caso que la condición sea verdadera estén encerradas entre las palabras claves "begin" y "end", con ellas marcamos el comienzo y el fin del bloque del verdadero.

Ejecutando el programa e ingresando un sueldo superior a 3000. Podemos observar como aparece en pantalla el mensaje 'Esta persona debe abonar impuestos', ya que la condición del if es verdadera:

problema estructura condicional simple en pascal delphi

Volvamos a ejecutar el programa y carguemos un sueldo menor o igual a 3000. No debe aparecer mensaje en pantalla.

Estructura condicional compuesta.

Cuando se presenta la elección tenemos la opción de realizar una actividad u otra. Es decir tenemos actividades por el verdadero y por el falso de la condición. Lo más importante que hay que tener en cuenta que se realizan las actividades de la rama del verdadero o las del falso, NUNCA se realizan las actividades de las dos ramas.

Representación gráfica:
estructura condicional compuesta

En una estructura condicional compuesta tenemos entradas, salidas, operaciones, tanto por la rama del verdadero como por la rama del falso.

Problema:

Realizar un programa que solicite al operador ingresar dos números y muestre por pantalla el mayor de ellos.

Diagrama de flujo:

problema estructura condicional compuesta

Se hace la entrada de num1 y num2 por teclado. Para saber cual variable tiene un valor mayor preguntamos si el contenido de num1 es mayor (>) que el contenido de num2, si la respuesta es verdadera vamos por la rama de la derecha e imprimimos num1, en caso que la condición sea falsa vamos por la rama de la izquierda (Falsa) e imprimimos num2.
Como podemos observar nunca se imprimen num1 y num2 simultáneamente.

Estamos en presencia de una ESTRUCTURA CONDICIONAL COMPUESTA ya que tenemos actividades por la rama del verdadero y del falso.

Proyecto10

program Proyecto10;

{$APPTYPE CONSOLE}

var
  num1, num2: Integer;

begin
  Write('Ingrese primer valor:');
  ReadLn(num1);
  Write('Ingrese segundo valor:');
  ReadLn(num2);
  if num1 > num2 then
  begin
    Write(num1);
  end
  else
  begin
    Write(num2);
  end;
  ReadLn;
end.

Estructura condicional compuesta.

if Condición then
begin
  Instruccion(es)
end
else
begin
  Instruccion(es)
end;

Es igual que la estructura condicional simple salvo que aparece la palabra clave "else" y posteriormente un bloque begin end con una o varias instrucciones.

Si la condición del if es verdadera se ejecuta el bloque begin y end que aparece después del then, en caso que la condición resulte falsa se ejecuta la instrucción o bloque de instrucciones que indicamos después del else.

Después de la palabra clave "then" no debe haber punto y coma. Tampoco disponemos un punto y coma antes de la palabra clave "else".

Compilemos el programa, si hubo errores sintácticos corrijamos y carguemos dos valores, como por ejemplo:

Ingrese el primer valor: 10
Ingrese el segundo valor: 4
10

Si ingresamos los valores 10 y 4 la condición del if retorna verdadero y ejecuta el primer bloque.
Un programa se controla y corrige probando todos sus posibles resultados.
Ejecutemos nuevamente el programa e ingresemos:

Ingrese el primer valor: 10
Ingrese el segundo valor: 54
54

Cuando a un programa le corregimos todos los errores sintácticos y lógicos ha terminado nuestra tarea y podemos entregar el mismo al USUARIO que nos lo solicitó.

Operadores

En una condición deben disponerse únicamente variables, valores constantes y operadores relacionales.

Operadores Relacionales:

>  (mayor)	
<  (menor)
>= (mayor o igual)
<= (menor o igual)
= (igual)
<> (distinto)

Operadores Matemáticos

+ (más)
- (menos)
* (producto)
div (división para variables Integer)
/ (división para variables Double)
mod (resto de una división)  Ej.:  x := 13 mod 5;  {se guarda 3}

Hay que tener en cuenta que al disponer una condición debemos seleccionar que operador relacional se adapta a la pregunta.

Ejemplos:

	Se ingresa un número multiplicarlo por 10 si es distinto a 0.   (<>)
	Se ingresan dos números mostrar una advertencia si son iguales.  (=)

Los problemas que se pueden presentar son infinitos y la correcta elección del operador sólo se alcanza con la práctica intensiva en la resolución de problemas.

Problemas propuestos

  • Realizar un programa que solicite la carga por teclado de dos números enteros, si el primero es mayor al segundo informar su suma y diferencia, en caso contrario informar el producto y la división del primero respecto al segundo.
  • Se ingresan tres notas de un alumno, si el promedio es mayor o igual a siete mostrar un mensaje "Promocionado".
  • Se ingresa por teclado un número positivo de uno o dos dígitos (1..99) mostrar un mensaje indicando si el número tiene uno o dos dígitos.
    (Tener en cuenta que condición debe cumplirse para tener dos dígitos un número entero)
Solución

program Proyecto11;

{$APPTYPE CONSOLE}

var
 num1, num2: Integer;
 suma, diferencia: Integer;
 producto, division: Integer;

begin
  Write('Ingrese primer valor:');
  ReadLn(num1);
  Write('Ingrese segundo valor:');
  ReadLn(num2);
  if num1 > num2 then
  begin
    suma := num1 + num2;
    diferencia := num1 - num2;
    WriteLn('La suma de los dos valores es:', suma);
    WriteLn('La diferencia de los dos valores es:', diferencia);
  end
  else
  begin
    producto := num1 * num2;
    division := num1 div num2;
    WriteLn('El producto de los dos valores es:', producto);
    WriteLn('La division de los dos valores es:', division);
  end;
  ReadLn;
end.




program Proyecto12;

{$APPTYPE CONSOLE}

var
  nota1, nota2, nota3, promedio: Integer;

begin
  Write('Ingrese primer nota:');
  ReadLn(nota1);
  Write('Ingrese segunda nota:');
  ReadLn(nota2);
  Write('Ingrese tercer nota:');
  ReadLn(nota3);
  promedio := (nota1 + nota2 + nota3) div 3;
  if promedio >= 7 then
  begin
    Write('Promocionado');
  end;
  ReadLn;
end.




program Proyecto13;

{$APPTYPE CONSOLE}

var
  num: Integer;

begin
  Write('Ingrese un valor entero de 1 o 2 digitos:');
  ReadLn(num);
  if num < 10 then
  begin
    Write('Tiene un dígito');
  end
  else
  begin
    Write('Tiene dos dígitos');
  end;
  ReadLn;
end.