En el concepto Expresiones Booleanas (AND) vimos un programa que mostraba un 1 por pantalla si un número real leído por teclado estaba entre 0 y 1. El programa funcionaba pero el mensaje que salía por la pantalla era muy pobre. Ha llegado el momento de arreglar eso.
En realidad, si en el momento de ejecutar el programa el usuario entra el número 0.5, nos interesa mostrar un mensaje como
El numero 0.5 esta en el intervalo
Si el usuario pone 5.0, habría que mostrar
El numero 5.0 NO esta en el intervalo
Al poner el NO en mayúsculas estamos enfatizando las diferencias con la otra frase para destacar ese caso [1].
La cuestión es que un programa es una lista de instrucciones que se ejecutan una tras otra, pero si nuestro programa debe mostrar un la palabra NO en función del valor de x, está claro que no siempre se ejecutarán todas las intrucciones que hayamos puesto en el programa.
Eso sugiere la idea de ejecutar instrucciones condicionalmente, es decir, solamente ejecutarlas si se cumple cierta condición. En C++, la sintaxis que permite la ejecución condicional es el if (el condicional en inglés). Veamos el programa primero y luego añadimos el if:
int main() { double x; cin >> x; cout << "El numero " << x << " "; // si x < 0 || x > 1 mostrar "NO " cout << "esta en el intervalo" << endl; }
La instrucción que muestra el mensaje está dividida en 2 partes justo en el punto donde habría que plantearse mostrar un NO (como dice el comentario). Para ejecutar la instrucción cout << "NO "; cuando la expresión x < 0 || x > 1 es cierta, se escribe lo siguiente:
if (x < 0 || x > 1) { cout << "NO "; }
Hay que fijarse en los siguientes detalles:
Con respecto al bloque, hasta ahora hemos escrito todos los programas dentro de una función main que tiene un bloque que cumple lo mismo: abrir y cerrar con { y }, lista de instrucciones dentro y indentación a la derecha.
El programa entero es este:
int main() { double x; cin >> x; cout << "El numero " << x << " "; if (x < 0 || x > 1) { cout << "NO "; } cout << "esta en el intervalo" << endl; }
Ejecutemos el programa mentalmente. Las 3 instrucciones primeras hacen lo que hemos visto hasta ahora. Cuando se llega al if se evalúa la expresión de dentro de los paréntesis y si es cierta, se ejecuta el bloque asociado al if (continuando después en la siguiente instrucción). Si la expresión da false, se salta el bloque y se continua con la instrucción de después.
Para comprender mejor cómo procede el ordenador al ejecutar el programa, se puede hacer un diagrama como el siguiente:
El "flujo" del programa va de arriba a bajo, como en el código fuente, y va circulando por las flechas. Al principio se empieza por arriba y se ejecutan las 3 primeras instrucciones y luego se llega al rombo. El rombo simboliza el if, donde nos hacemos una pregunta (x < 0 || x > 1?). Es una bifurcación en el camino. Si la respuesta es afirmativa cogemos el camino marcado con true y si es negativa el marcado con false. En el diagrama se aprecia que el camino con true conduce a la instrucción cout << "NO "; y luego nos devuelve al cauce normal. El camino false nos lleva directamente a la siguiente instrucción.
[1] | Por otro lado, no hemos puesto acentos porque en Windows éstos se ven mal en el terminal. |
[2] | Eso explica nuestra obsesión previa con este tipo de expresiones. |
Haz un programa que pide un número y muestra por la pantalla par o impar en función del número entrado.
Haz un programa que pide un número real y luego muestra el valor absoluto de ese número por pantalla. Para calcular el valor absoluto de un número hay que cambiar el signo al número solamente cuando éste es negativo.
Haz un programa que pide tu estatura en centímetros y luego te dice
Eres alto
si tu estatura es menor que 200cm o
Eres super-alto
si tu estatura supera los 200cm.
Modifica el programa anterior para que muestre
Eres super-mega-alto
si tu altura supera los 220cm.
Cuando leemos un entero, si ponemos ceros a la izquierda, éstos se leen normalmente pero el entero leído no los conserva, de manera que si leemos el número
007
luego al volverlo a mostrar por pantalla sale
7
porque los ceros se han descartado.
Sabiendo esto, haz un programa que te pide tres enteros que representan horas minutos y segundos y muestra un reloj digital. La tabla siguiente muestra qué debe salir por pantalla para diversos ejemplos de los 3 enteros de entrada:
Entrada |
Salida |
---|---|
14 25 30 |
14:25:30 |
5 5 5 |
05:05:05 |
0 0 0 |
00:00:00 |
23 0 0 |
23:00:00 |
En preparación