La estructura de selección if / else

Recordemos que la estructura de selección if ejecuta una acción indicada sólo cuando la condición es verdadera; de lo contrario la acción es pasada por alto, en cambio la estructura de selección if / else permite que el programador especifique que se ejecuten acciones distintas cuando la condición sea verdadera y cuando la condición sea falsa. Por ejemplo, el enunciado en seudocódigo

If la nota del estudiante es mayor que o igual a 60 
    Print "Aprobo"
else
    Print "Fracaso"

imprime Aprobo, si la calificación del alumno es mayor que o igual a 60 e imprime Fracaso si la calificación del alumno es menor de 60. En cualquiera de los casos, después de haber terminado la impresión, se ejecutará el siguiente enunciado del seudocódigo. Advierta que el cuerpo de else también queda con sangría.

Consejo

Haga sangrías en ambos cuerpos de los enunciados de una estructura if / else.


Cualquier regla convencional de sangrías que escoja deberá aplicarse con cuidado a lo largo de sus programas. Un programa que no siga reglas de espaciamiento uniformes es difícil leer. 

Consejo

Si existen varios niveles de sangría, cada nivel deberá tener sangría con una cantidad igual de espacio.

El seudocódigo anterior correspondiente a la estructura if/else puede ser escrito en C para calculadoras CASIO fx-9860G Series como

if (nota >= 60)
    Print((unsigned char*)"Aprobo");
else
    Print((unsigned char*)"Fracaso");

El diagrama de flujo mostrado a continuación ilustra muy bien el flujo de control de la estructura if / else.

Otra vez, advierta que (además de los pequeños círculos y flechas) los únicos símbolos en el diagrama de flujo son rectángulos (para las acciones) y un diamante (para una toma de decisiones). Continuamos enfatizando este modelo de computación de acción/decisión. Imagínese otra vez un contenedor profundo, que contenga tantas estructuras de doble selección vacías como sean necesarias, para elaborar cualquier programa en C. Otra vez la tarea del programador es ensamblar estas estructuras de selección (mediante apilamiento y anidación), con cualesquiera otras estructuras de control requeridas por el algoritmo, y rellenar los rectángulos y diamantes vacíos con acciones y decisiones, apropiadas al algoritmo que se está implantando.

Las estructuras if / else anidadas (pruebas para muchos casos), se realizan colocando estructuras if / else dentro de estructuras if / else.

Por ejemplo, el siguiente enunciado en seudocódigo imprimirá A para calificaciones de examen mayores que o iguales a 90, B para calificaciones mayores que o iguales a 80, C para calificaciones mayores que o iguales a 70, D para calificaciones mayores que o iguales a 60, y F para todas las demás calificaciones.

if la nota del estudiante es mayor que o igual a 90
   Print "A " 
else
   if la nota del estudiante es mayor que o igual a 80
      Print "B " 
   else
      if la nota del estudiante es mayor qué o igual a 70
         Print "C " 
      else
         if Si la nota del estudiante es mayor que o igual a 60
            Print "D" 
         else de lo contrario Imprima "F"

Este seudocódigo puede ser escrito en C para calculadoras fx-9860G Series como

   if (nota >= 90)
Print((unsigned char*) "A");
    else
         if (nota >= 80)
   Print((unsigned char*) "B");  
        else
            if (nota >= 70)
                Print((unsigned char*) "C");
            else
                if (nota >= 60)
                    Print((unsigned char*) "D");
                else
                    Print((unsigned char*) "F");

Si la variable nota es mayor que o igual a 90, las primeras cuatro condiciones resultarán ciertas, pero sólo se ejecutará el enunciado Print después de la primera prueba. Después de que se haya ejecutado ese Print, la parte else del enunciado "exterior" if / else será pasado por alto. Muchos programadores de C prefieren escribir la estructura if anterior, como sigue:

if (nota >= 90)
   Print((unsigned char*) "A");
else if (nota >= 80)
   Print((unsigned char*) "B");  
else if (nota >= 70)
   Print((unsigned char*) "C");
else if (nota >= 60)
   Print((unsigned char*) "D");
else
   Print((unsigned char*) "F");

Esta última forma es popular porque evita las profundas sangrías del código hacia la derecha. A menudo dichas sangrías dejan poco espacio sobre la línea, obligando a la división de líneas y, por lo tanto, reduciendo la legibilidad del programa.

La estructura de selección if espera un enunciado dentro de su cuerpo. Para incluir varios enunciados en el cuerpo de un if, encierre el conjunto de enunciados entre llaves ( { y } ). Un conjunto de enunciados contenidos dentro de un par de llaves se conoce como un enunciado compuesto.

Note que

Un enunciado compuesto puede ser colocado en cualquier parte de un programa, donde pueda ser colocado un enunciado sencillo.

El siguiente ejemplo incluye un enunciado compuesto en la parte else de una estructura if / else.

if (nota >= 60)
    Print((unsigned char*) "Aprobo");
else{
    Print((unsigned char*) "Fracaso. ");
    Print((unsigned char*) "Usted debera tomar este curso de nuevo.");
}

En este caso, si la calificación es menor que 60, el programa ejecutará los dos enunciados Print existentes en el cuerpo de else e imprimirá

Fracaso. Usted debera tomar este curso de nuevo.

Advierta las llaves que rodean ambos enunciados en la cláusula else. Estas llaves son importantes. Sin ellas, el enunciado

Print((unsigned char*) "Usted debera tomar este curso de nuevo.");

quedaría fuera del cuerpo de la parte else del if, y sería ejecutada, independientemente de si la nota es menor que 60.

Error

Olvidar una o ambas de las llaves que delimitan un enunciado compuesto.

Un error de sintaxis será detectado por el compilador. Un error lógico hará su efecto durante la ejecución. Un error lógico fatal hará que un programa falle y que termine de forma prematura. Un error lógico no fatal permitirá que continúe el programa, pero produciendo resultados incorrectos.

Error

Colocar en una estructura if un punto y coma después de la condición, llevará a un error lógico en estructuras if de una sola selección y a un error de sintaxis en estructuras if de doble selección.

Consejo

Algunos programadores prefieren escribir las llaves de principio y de terminación de los enunciados compuestos antes de escribir en el interior de dichas llaves los enunciados individuales. Esto les ayuda a evitar la omisión de una o ambas de las llaves.

Note que

Igual que un enunciado compuesto puede ser colocado en cualquier lugar donde pudiera colocarse un enunciado sencillo, también es posible que no haya ningún enunciado de ningún tipo, es decir, un enunciado vacío. El enunciado vacío se representa colocando un punto y coma (;) donde por lo regular debería estar el enunciado


No hay comentarios:

Publicar un comentario