estructuras condicionales

Estructuras de Control Condicionales o Sentencias Condicionales en C y C++ (if – else if – else)

En los ejercicios realizados en artículos anteriores, los algoritmos que se desarrollaron fueron muy básicos y sus instrucciones se iban ejecutando una tras otra de forma secuencial, sin saltarse ninguna o escoger entre ellas, sin embargo lo mas normal es ejecutar una u otra orden en algún momento de la ejecución del programa, es para ello que se utilizan las Sentencias Condicionales o Bifurcaciones en la programación. Las estructuras condicionales, las cuales en lenguaje C y C++ se componen de las sentencias if, else if y else, son muy importantes pues los programas informáticos deban tomar muchas decisiones durante su ejecución, para según sean los datos de entrada, realizar diferentes procedimiento y arrojar salidas más adecuadas.

En esa clase de programas, en los que la programación posee una estructura secuencial, como los que hemos realizado hasta ahora, siempre el procedimiento que se desarrolla al correr el programa será el mismo, imprimir “hola Mundo” en la pantalla o calcular la edad de una persona en función a su año de nacimiento, siempre termina arrojando, sino el mismo resultado, uno muy similar, pero en la mayoría de los casos necesitáramos que el programa por sí mismo, decidiera que ordenes realizar y cuales otras no. Por ejemplo un programa que solicite al usuario la hora del día y posteriormente, según sea la hora indicada por el usuario, el programa disponga si mostrará en pantalla el saludo “Buenos días”, “Buenas tardes” o “Buenas noches”.


Ese tipo de programas son los que requieren del empleo de estructuras de control de flujo de datos o sentencias condicionales, y para ello como ya mencione anteriormente, en el lenguaje C y en C++ (así como en la amplia mayoría de lenguajes de programación), se utiliza la palabra inglesa “if” que significa ¿Si? Para evaluar condiciones y ejecutar agrupaciones de sentencias solo si la condición evaluada resulta ser verdadera.

La Sentencia Condicional if

La sintaxis de C y C++ establece que la palabra “if” debe colocarse justo antes de una expresión condicional a la que se coloca entre paréntesis, en algunos casos dicha expresión puede estar compuesta solo por un elemento, siempre y cuando este contenga un valor lógico booleano, es decir que ese valor corresponda a Verdadero o Falso, lo que equivaldría en ingles a “True” y “False” o a los dígitos binarios 0 y 1. Luego de los paréntesis que contienen a la condición, bebe ubicarse un conjunto de sentencias o instrucciones de código agrupadas mediante llaves ({}), que constituirán el procedimiento a realizar en caso de ser cierta la condición evaluada.

En los casos en que solo es necesario realizar una acción si se cumple una condición, pero no se ejerce ninguna tarea si la condición resulta ser falsa, a ese tipo de estructura de control se le conoce como condicional simple. El siguiente, es un ejemplo sencillo de estos casos.

La sentencia condicional if

Enunciado: Desarrollar el código fuente para un programa que reciba mediante el teclado un número entero y muestre en pantalla su correspondiente raíz cuadrada, además en el caso de que el número leído sea negativo, deberá mostrar un mensaje indicando que el resultado es un número imaginario, ya que los números negativos no poseen una raíz cuadrada real.

Análisis: En lenguaje C y C++ se utiliza una función para calcular raíces cuadradas, esta función es sqrt() y se encuentra definida en el archivo de cabecera math.h, sabiendo esto podemos utilizarla para calcular nuestro resultado y para la parte del mensaje que solo debe mostrarse en caso de ser negativo el número que haya escrito el usuario, se utilizara una estructura condicional simple que se encargara de convertir el numero en positivo e imprimir el mensaje que solicita el enunciado.

Estructura condicional if-else

Un segundo tipo de estructura condicional es el que se da cuando se requiere realizar una acción diferente para cada uno de los resultados de la condición, es decir que tanto en el caso en que se evalúa como verdadera la expresión condicional como en el que se evalúa como falsa, se debe ejecutar algún tipo de procedimiento particular. A este tipo de estructura de control se le conoce como condicional doble o bifurcación, ya que el flujo de trabajo del algoritmo debe seguir solo uno de los dos caminos posibles.

En esta estructura de control interviene otra palabra reservada por el lenguaje, que es “else”, la cual significa en ingles “sino” y por lo tanto complementa a la palabra “if” en caso de que la condición no se cumple. Es decir que la parte de la estructura encabezada por la palabra “if”, indica el procedimiento a realizar si se cumple la condición y la parte que se inicia con la palabra “else” corresponde al procedimiento que se debe realizar sino se cumple.

La palabra “else” no necesita estar seguida de una expresión condicional como en el caso de “if”, ya que si función es negar a la condición ubicada entre los paréntesis de “if”. Un ejemplo práctico es él les dejo a continuación.

Enunciado: Realizar el código fuente para un programa solicite un número entero al usuario y determine si se trata de un número positivo o negativo.

Análisis: Para saber si un número es positivo o negativo simplemente se debe comparar con el número 0 y determinar si es menor o mayor que él, si el numero leído es igual que cero, se considera también un valor positivo.

Estructura condicional múltiple if – if else – else

Las estructuras condicionales complejas o múltiples, son aquellas en las que se evalúan varias expresiones condicionales y se establecen procedimientos distintos a realizar para cada uno de los valores posibles, que resulten de la evaluación de cada interrogante.

En este caso se agrega un nuevo escalafón o tramo intermedio a la estructura, es decir que en esa situación de múltiples condiciones, no solo se utilizan las palabras “if” y “else” por separado, sino que ahora se emplea la combinación “else if”, que tendría un significado equivalente a “de lo contario sí”, para evaluar nuevas expresiones condicionales, que se unen a la condición que acompaña a la palabra “if” al comienzo de la estructura.

Sentencia condicional múltiple Switch

Existe en lenguaje C/C++ otra forma o método para realizar condicionales multiples, el cual emplea otras palabras reservadas como lo son “switch” y “case”, pero en esta ocasión solo estudiaremos las condicionales en las que interviene la palabra “if”. Seguramente todo esto ya está sonando a trabalenguas, pero para solventar eso tenemos el ejemplo siguiente, el cual podrá ilustrar mucho mejor todo lo que he expresado en el párrafo anterior.

Enunciado: Diseñar un algoritmo, expresándolo en código fuente, con el cual se genere un programa que sea capaz de leer la edad de una persona y determinar si se trata de un niño (menos de 13 años), un adolescente (de 13 a 17 años), un adulto (de 18 a 60 años) o un anciano (más de 60 años).

Análisis: Existe la posibilidad de que la edad introducida por el usuario sea menor que cero pero esto lo obviaremos, solo nos centraremos en los valores dados en el enunciado, para lo cual será necesaria una variable en la que se almacenara la edad y esa variable será comparada con los distintos valores que corresponden a cada una de las opciones dadas, las cuales son 4 y por lo tanto se requiere una estructura condicional múltiple.

Varias estructuras condicionales juntas

Luego de haber realizado el ejemplo anterior que corresponde a una estructura de control múltiple, me parece necesario aclarar que pueden agruparse varias estructuras condicionales simples o dobles, pero eso no constituiría una estructura condicional múltiple, sino como ya lo he dicho, la utilización consecutiva de varias estructuras individuales, para ejemplificar esto les aporto el siguiente ejercicio.

Enunciado: Codificar un programa informático que luego de leer un numero desde el teclado, indique si este número es par o impar, si posee tercera parte entera y si es la raíz cuadrada de un numero entero.

Análisis: A un mismo número leído, se le deben determina varias propiedades diferentes, la primera si el número es divisible por 2 (si es par o impar), la segunda si es divisible por 3 (si posee tercera parte entera) y por ultimo si el resultado de multiplicarlo por sí mismo es otro número entero (si es raíz cuadrada de otro número entero). Cada una de estas propiedades es indiferente de la otra, por lo tanto no es útil emplear una estructura condicional múltiple, sino más bien tres estructuras condicionales que no tendrán nada que ver una con la otra, así se encuentren juntas y aplicadas a una misma variable.

En lenguaje C/C++ existe un operador que se emplea para obtener el residuo de una división entre dos número, ese operador es el conocido como modulo y representado por el símbolo de porcentaje (%), con el podemos determinar si un número es entero o no, ya que todo numero entero al dividirlo por 2, da como resultado un cociente entero y por lo tanto el residuo es 0. Si tomamos el residuo de la división entre un número entero cualquiera entre 2 y lo comparamos con el valor 0, el resultado lógico debe ser verdadero, de ser falso el número no sería entero.

Estructuras condicionales anidadas

Para concluir este largo artículo, tenemos lo que son las estructuras condicionales anidadas, es decir estructuras de control que se encuentran dentro de otras estructuras de control. Debemos tener claro que no existe un límite para la cantidad de niveles de anidación, en otras palabras podemos poner un “if” dentro de otro y de otro, tantas veces como seamos capaces de controlar lógicamente.

Para explicarlo un poco más, antes de entrar con el siguiente ejemplo, a lo que me refiero es que entre las instrucciones que se realizan dentro de las llaves ({}) de un “if”, un “else” o un “else if”, también podemos colocar otro “if” y dentro de este otro y otro, sin un límite establecido, aunque por supuesto no es recomendable que sean demasiadas veces, por lo complejo que puede volverse el algoritmo.

Enunciado: Desarrollar el código fuente de un programa que lea un carácter desde el teclado y solo de este carácter ser una letra, determine si esa letra es mayúscula o minúscula y si es una vocal o una consonante. De lo contrario que imprima un mensaje en el que indique que el carácter no es una letra.

Análisis: Los valores alfanuméricos que se almacenan en las variables tipo char, son realmente números que corresponden al código ASCII del carácter almacenado, por lo tanto si sabemos a cuales números corresponden las letras, a cuales corresponden las mayúsculas y a cuales las vocales, entonces podemos realizar las comparaciones necesarias para responder cada una de las preguntas que este ejercicio nos plantea. Además estos valores se pueden comparar incluso con otras letras sabiendo que las mayúscula son menores en su numeración que las minúsculas y por lo tanto ‘A’ es menor que ‘a’ y ‘z’ es mayor que ‘Z’. Revisar la tabla de equivalencias ASCII.

Nota: En los casos en que dentro de las estructuras condicióneles (if), solo se implemente una única orden, es decir que entre de las llaves ({}) solo exista una instrucción o sentencia, entonces las llaves pueden ser omitidas, aunque es recomendable utilizarlas siempre o al menos cuando se es novato en la programación, para evitar errores. Si existe más de una instrucción entre las llaves entonces es obligatoria su utilización para agrupar a estas líneas de código.

Califica este artículo...
[Total: 0 Average: 0]

Autor: Néstor Gómez

Académicamente: Ingeniero de Sistemas y TSU en Informática. Empíricamente: Profesor Universitario, Desarrollador de Software, Webmaster/Blogger, Diseñador Digital, Generalista 3D, Freelancer y Emprendedor Online.