Sentencias condicionales IF/ELSE anidamiento

En este artículo quiero mostrarte la anidación de sentencias condicionales. Este concepto es importante dado que para la resolución de problemas vas a tener que utilizarlas a menudo.

 

Existen las sentencias condicionales simples, que son aquellas que sólo se forman con un if, las condicionales compuestas, formadas con un if y un else asociado a ese if, y las anidadas que consisten en que dentro de una sentencia if podemos colocar otra sentencia if. Estas anidaciones se utilizan para crear programas donde se evalúan expresiones complejas.

Para que veas como funcionan los if anidados voy a ponerte varios ejemplos empezando desde lo más simple hasta lo más complejo y voy a marcarte cómo el compilador evalúa dichos ejemplos.

Comenzamos con las sentencias condicionales simples, que son las que sólo utiliza un if:

1  if (num==5){
2 sentencia1;
3 sentencia 2;
4 }

En esta condición el compilador actúa de la siguiente manera, el compilador llega a la línea 1, y evalúa la expresión num==5; si es cierta entra y realiza las sentencia1 y la sentencia 2, si es falsa se salta las lineas 2,3 y 4 y continua con el programa.

Continuamos con las sentencias condicionales compuestas, que son las que añaden al if un else:

1 if(num==5){
2 sentencia1;
3 sentencia2;
4 }
5 else {
6 sentencia3;
7 sentencia4;
8 }

En este caso el compilador actúa de la siguiente manera; llega a la línea 1, evalúa la condición num==5. Si esta condición es cierta realiza lo que hay dentro del if , es decir, las sentencia1 y la sentencia2  e ignora todo lo que hay dentro del else, continuando el programa en la línea 8. En el caso de que num==5 sea falso el compilador ignora todo lo que hay dentro del if y se va a la línea 5 compilando lo que hay dentro del else, es decir, la sentencia3 y la sentencia4. Luego continua el programa a partir de la línea 8. Hay que tener claro que un else siempre está asociado a un if y lo que determina a cual va asociado depende de la disposición de las {}, vamos a verlo a continuación con los anidamientos.

Los if-else anidados son sentencias condicionales simples y compuestas, las cuales, consisten en dentro de una sentencia if se incluye otra sentencia if. Vamos a ver un ejemplo:

1 if(num==5){
2             sentencia1
3             sentencia2
4 }
5 else{
6              if(num<5){
7                           sentencia3;
8                           sentencia 4;
9               }
10             else{
11                          sentencia5;
12                          sentencia6;
13              }
14 }

Vamos a analizar este ejemplo, el compilador llegará a la línea 1 y evaluará la expresión condicional num==5, si es verdadera, entrará en el if y realizará la sentencia1 y la sentencia2, e ignorará todo el else posterior yendo a la línea 14 y continuando con el programa. En el caso de que num==5 sea falso, el compilador ignorará el if y entrará en el else de la línea 5. Dentro de este else el compilador evaluará la condición de la línea 6  num<5, según la veracidad o falsedad de esta condición,el compilador ejecutará lo que hay dentro del if líneas 7 y 8 o por el contrario ejecutará lo que hay dentro del else líneas 11 y 12, a continuación el compilador continuará con la ejecución a partir de la línea 14.

Después de esta explicación, te voy a demostrar que anidar if tiene sus ventajas y su motivo de eficiencia. Viendo el código del último ejemplo y analizándolo podemos decir que es lo mismo que poner lo siguiente:

1 if(num==5){
2                 sentencia1;
3                 sentencia2;
4}
5 if(num<5){
6                 sentencia3;
7                 sentencia4;
8}
9if(num>5){
10               sentencia5;
11                sentencia6;
12 }

¿Que diferencia hay entre un código anidado y otro no anidado?. Pues esa es la cuestión en el no anidado el compilador evaluará las tres condiciones if, sin embargo, en el anidado como mucho evaluará sólo 2 condiciones if, por tanto el anidamiento es más eficiente. Este es el motivo del uso de los anidamientos.

Me gustaría que intentaras el ejercicio que te propuse en artículos anteriores sobre las notas de un alumno. Intenta ese ejercicio con if anidados.

También me gustaría que me dejaras un comentario, indicarme si realmente has comprendido los anidamientos y si has realizado el ejercicio  YO mismo contestare personalmente. Practica y practica mucho, es la clave para la adquisición de destreza en programación.

Saludos,

Javi Pizarro

Acerca de Javi Pizarro

Ingeniero informático dedicado a la docencia, con experiencia en creación de programas de gestión y desarrollo de aplicaciones web.
Esta entrada fue publicada en Programacion, Uncategorized y etiquetada , , , , , , , , , , , , . Guarda el enlace permanente.

6 respuestas a Sentencias condicionales IF/ELSE anidamiento

  1. morena dijo:

    MUCHAS GRACIAS !!!

  2. Jorge dijo:

    hola Javi, la verdad que estoy confundido, con respecto a if-else, ya que he hecho el programa siguiendo el esquema anidado pero no se que pasa que me presenta la linea de la ultima llave sombreada. el programa que he realizado es este:
    # include
    # include
    # include
    using namespace std;

    int main () {
    double Nota;
    cout<>Nota;

    if (Nota<5){
    cout<<"SUSPENSO";
    }
    else {
    if(Nota==5&&Nota==6) {
    cout<6&&Nota==9) {
    cout<<"NOTABLE";
    }
    else {
    cout<<"SOBRESALIENTE";
    }
    }
    getch()
    }
    por favor si fueras tam amable me puedes explicar que pasa…Gracias y muchas Felicidades
    Jorge…

    • Javi Pizarro dijo:

      Hola jorge,
      A ver el inicio esta bien “Si la nota es menor que 5 sacamos por pantalla SUSPENSO”. A partir de aquí pones un else “En otro caso” y vas comprobando, Si la nota está entre 5 y 6 sacas por pantalla BIEN. Creo que tu fallo está en como expresas eso. La expresión sería si
      (Nota>5 && Nota<6) creo que en tu código lo pones con el operador == por tanto no reflejas lo que quieres expresar. A partir de aquí tienes que seguir con el anidamiento e ir comprobando en qué rango de números está la nota.
      Si sigues teniendo problemas no dudes en seguir preguntando ok?. Saludos

  3. Jorge dijo:

    HOLA JAVI…
    Caso resuelto…Gracias. Seguimos adelante…

  4. Ariel dijo:

    hola sera que me pueden ayudar con este programa que sirve para calcular si 3 numeros son equidistantes, decirme la falla que tengo porfa se los agradeceria
    #include
    #include
    #include
    void main()
    {
    int n1,n2,n3,dist,dist1;
    cout<<"ingrese los 3 números en un orden de menor a mayor:"<>n1>>n2>>n3;
    clrscr();
    getch();
    if(n1>0){
    if(n2>0&&n3>0){dist=n2-n1;
    dist1=n2-n3;
    if(dist==dist1||-dist==dist1&&dist==-dist1)puts(“son equidistantes”);
    else puts(“no son equidistantes”);
    }
    else if(n2<0&&n3<0){
    n2=-n2;
    n3=-n3;
    dist=n2-n1;
    dist1=n2-n3;
    if(dist==dist1)puts("son equidistantes");
    else puts("no son equidistantes");
    }
    else if(n20){n2=-n2;
    dist=n2-n1;
    dist1=n2-n3;
    if(dist==dist1)puts(“son equidistantes”);
    else puts(“no son equidistantes”);
    }
    else if(n2>0&&n3<0){n3=-n3;
    dist=n2-n1;
    dist1=n2-n3;
    if(dist==dist1)puts("son equidistantes");
    else puts("no son equidistantes");
    }
    }

    else if(n1<0){

    n1=-n1;

    if(n2<0&&n30&&n3>0){

    dist=n2-n1;
    dist1=n2-n3;
    if(dist==dist1)puts(“son equidistantes”);
    else puts(“no son equidistantes”);
    }

    else if(n20){
    n2=-n2;

    dist=n2-n1;
    dist1=n2-n3;
    if(dist==dist1)puts(“son equidistantes”);
    else puts(“no son equidistantes”);
    }
    else if(n2>0&&n3<0){
    n3=-n3;
    dist=n2-n1;
    dist1=n2-n3;
    if(dist==dist1)puts("son equidistantes");
    else puts("no son equidistantes");
    }
    }

    }

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s