4. Bucles (1: while, do-while)
C++
4. Bucles
Hemos visto cómo comprobar condiciones , pero no cómo hacer que una cierta parte de un programa se repita un cierto número de veces o mientras se cumpla una condición (lo que llamaremos un “bucle”). En C y en C++ tenemos varias formas de conseguirlo.
4.1. while
Si queremos hacer que una sección de nuestro programa se repita mientras se cumpla una cierta condición, usaremos la orden “while”. Esta orden tiene dos formatos distintos, según comprobemos la condición al principio o al final.
En el primer caso, su sintaxis es
while (condición)
sentencia;
Es decir, la sentencia se repetirá mientras la condición sea cierta. Si la condición es falsa ya desde un principio, la sentencia no se ejecuta nunca. Si queremos que se repita más de una sentencia, basta agruparlas entre { y }. Como ocurria con "if", puede ser recomendable incluir siempre las llaves, aunque sea una única sentencia, para evitar errores posteriores difíciles de localizar.
Un ejemplo que nos diga si cada número que tecleemos es positivo o negativo, y que pare cuando tecleemos el número 0, podría ser:
// Introducción a C++, Nacho Cabanes
// Ejemplo 04.01:
// La orden "while"
#include <iostream>
using namespace std;
int main()
{
int numero;
cout << "Teclea un numero (0 para salir): ";
cin >> numero;
while (numero!=0)
{
if (numero > 0)
cout << "Es positivo" << endl;
else
cout << "Es negativo" << endl;
cout << "Teclea otro numero (0 para salir): ";
cin >> numero;
}
return 0;
}
En este ejemplo, si se introduce 0 la primera vez, la condición es falsa y ni siquiera se entra al bloque del “while”, terminando el programa inmediatamente.
Nota: si recordamos que una condición falsa se evalúa como el valor 0 y una condición verdadera como una valor distinto de cero, veremos que ese “while (numero != 0)” se podría abreviar como “while (numero)”.
Ejercicios propuestos:
- (4.1.1) Crear un programa que pida al usuario su contraseña (numérica). Deberá terminar cuando introduzca como contraseña el número 4567, pero volvérsela a pedir tantas veces como sea necesario.
- (4.1.2) Crea un programa que escriba en pantalla los números del 1 al 10, usando “while”.
- (4.1.3) Crea un programa que escriba en pantalla los números pares del 26 al 10 (descendiendo), usando “while”.
- (4.1.4) Crear un programa calcule cuantas cifras tiene un número entero positivo (pista: se puede hacer dividiendo varias veces entre 10).
4.2. do ... while
Este es el otro formato que puede tener la orden “while”: la condición se comprueba al final. El punto en que comienza a repetirse se indica con la orden “do”, así:
do sentencia; while (condición);
Al igual que en el caso anterior, si queremos que se repitan varias órdenes (es lo habitual), deberemos encerrarlas entre llaves. Nuevamente, puede ser recomendable incluir siempre las llaves, como costumbre.
Como ejemplo, vamos a ver cómo sería el típico programa que nos pide una clave de acceso y nos nos deja entrar hasta que tecleemos la clave correcta. Eso sí, como todavía no sabemos manejar cadenas de texto, la clave será un número:
// Introducción a C++, Nacho Cabanes
// Ejemplo 04.02:
// La orden "do..while"
#include <iostream>
using namespace std;
int main()
{
int valida = 711;
int clave;
do
{
cout << "Introduzca su clave numérica: ";
cin >> clave;
if (clave != valida)
cout << "No válida!" << endl;
}
while (clave != valida);
cout << "Aceptada." << endl;
return 0;
}
En este caso, se comprueba la condición al final, de modo que se nos preguntará la clave al menos una vez. Mientras que la respuesta que demos no sea la correcta, se nos vuelve a preguntar. Finalmente, cuando tecleamos la clave correcta, el ordenador escribe “Aceptada” y termina el programa.
Ejercicios propuestos:
- (4.2.1) Crear un programa que pida números positivos al usuario, y vaya calculando la suma de todos ellos (terminará cuando se teclea un número negativo o cero).
- (4.2.2) Crea un programa que escriba en pantalla los números del 1 al 10, usando "do..while".
- (4.2.3) Crea un programa que escriba en pantalla los números pares del 26 al 10 (descendiendo), usando "do..while".
- (4.2.4) Crea un programa que pida al usuario su código de usuario (un número entero) y su contraseña numérica (otro número entero), y no le permita seguir hasta que introduzca como código 1024 y como contraseña 4567.