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.