Decimos que una estructura condicional es anidada cuando por la rama del verdadero o el falso de una estructura condicional hay otra estructura condicional.
El diagrama de flujo que se presenta contiene dos estructuras condicionales. La principal se trata de una estructura condicional compuesta y la segunda es una estructura condicional simple y está contenida por la rama del falso de la primer estructura.
Es común que se presenten estructuras condicionales anidadas aún más complejas.
Confeccionar un programa que pida por teclado tres notas de un alumno, calcule el promedio e imprima alguno de estos mensajes:
Si el promedio es >=7 mostrar "Promocionado".
Si el promedio es >=4 y <7 mostrar "Regular".
Si el promedio es <4 mostrar "Reprobado".
Analicemos el siguiente diagrama. Se ingresan tres valores por teclado que representan las notas de un alumno, se obtiene el promedio sumando los tres valores y dividiendo por 3 dicho resultado.
Tener en cuenta que si el resultado es un valor Double debemos emplear el operador "/".
program Proyecto14; {$APPTYPE CONSOLE} var nota1, nota2, nota3: Integer; promedio: Double; begin Write('Ingrese primer nota:'); ReadLn(nota1); Write('Ingrese segunda nota:'); ReadLn(nota2); Write('Ingrese tercer nota:'); ReadLn(nota3); promedio := (nota1 + nota2 + nota3) / 3; if promedio >= 7 then begin Write('Promocionado'); end else begin if promedio >= 4 then begin Write('Regular'); end else begin Write('Reprobado'); end; end; ReadLn; end.
Codifiquemos y ejecutemos este programa. Al correr el programa deberá solicitar por teclado la carga de tres notas y mostrarnos un mensaje según el promedio de las mismas.
A la codificación del if anidado podemos observarla por el else del primer if.
Para no tener problemas (olvidarnos) con los begin y end podemos ver la siguiente regla:
Cada vértice representa un begin y un end:
Nivel máximo: Porcentaje>=90%. Nivel medio: Porcentaje>=75% y <90%. Nivel regular: Porcentaje>=50% y <75%. Fuera de nivel: Porcentaje<50%.
program Proyecto15; {$APPTYPE CONSOLE} var num1, num2, num3: Integer; begin Write('Ingrese primer valor:'); ReadLn(num1); Write('Ingrese segundo valor:'); ReadLn(num2); Write('Ingrese tercer valor:'); ReadLn(num3); if num1 > num2 then begin if num1 > num3 then begin Write(num1); end else begin Write(num3); end; end else begin if num2 > num3 then begin Write(num2); end else begin Write(num3); end; end; ReadLn; end. program proyecto16; {$APPTYPE CONSOLE} var num: Integer; begin Write('Ingrese un valor:'); ReadLn(num); if num = 0 then begin Write('Se ingresó el cero'); end else begin if num > 0 then begin Write('Se ingresó un valor positivo'); end else begin Write('Se ingresó un valor negativo'); end; end; ReadLn; end. program Proyecto17; {$APPTYPE CONSOLE} var num: Integer; begin Write('Ingrese un valor positivo de hasta tres digitos:'); ReadLn(num); if num < 10 then begin Write('Tiene un dígito'); end else begin if num < 100 then begin Write('Tiene dos dígitos'); end else begin if num < 1000 then begin Write('Tiene tres dígitos'); end else begin Write('Error en la entrada de datos.'); end; end; end; ReadLn; end. program Proyecto18; {$APPTYPE CONSOLE} var totalPreguntas, totalCorrectas: Integer; porcentaje: Double; begin Write('Ingrese la cantidad total de preguntas del examen:'); ReadLn(totalPreguntas); Write('Ingrese la cantidad total de preguntas contestadas correctamente:'); ReadLn(totalCorrectas); porcentaje := totalCorrectas * 100 / totalPreguntas; if porcentaje >= 90 then begin Write('Nivel máximo'); end else begin if porcentaje >= 75 then begin Write('Nivel medio'); end else begin if porcentaje >= 50 then begin Write('Nivel regular'); end else begin Write('Fuera de nivel'); end; end; end; ReadLn; end.