Bucle While en C++

Hasta ahora hemos visto instrucciones lineales, es decir el flujo de las mismas sigue una secuencia desde un punto de entrada a un punto de salida, lo más que podemos lograr con if / else es realizar una desición, pero siempre “hacia adelante”.

Con frecuencia necesitaremos repetir cíclicamente un conjunto de instrucciones hasta que se cumpla una condición deseada. Este tipo de estructuras se conocen en términos de programación como Bucles.

While

Estructura while en C++
Estructura while en C++

El bucle while se puede leer como “haz”, esta estructura se encarga de repetir de forma cíclica un conjunto de instrucciones que se encuentren dentro del bucle, esta repetición se realizará hasta que se cumpla la condición de parada que definamos de forma previa.

Es importante observar 2 detalles fundamentales

  1. La condición de inicio se evalúa antes de ejecutar el código del ciclo, lo que abre la posibilidad de que el ciclo nunca se ejecute, si la condición es falsa.
  2. Dentro del código del ciclo debemos establecer un mecanismo para que el ciclo se deje de ejecutar, sino se hace, el ciclo se repetirá de forma infinita. Esto se realiza con lo que se denomina “Condición de parada”

Sintaxis del ciclo while

while (condicion de parada)
{
   // Instrucciones del ciclo.
{

en donde,

while, palabra reservada que define el ciclo.

(condición de parada), es una condición lógica que se evalúa por la instrucción while, en caso de ser verdadera, se ejecutarán las instrucciones dentro del ciclo while, en caso de ser falsa, se ignora este código.

{}, Todas las instrucciones dentro de las llaves se ejecutarán como una instrucción dentro del ciclo while, como parte del código debemos generar la instrucción de paro de modo que podamos salir de forma limpia del ciclo.

La mejor forma de comprender esta instrucción, como siempre, es con ejemplos.

// eb25_while01.cpp
// Uso de while
// Este programa ilustra el uso del bucle While
// 2017, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.onlinegdb.com/online_c++_compiler

#include <iostream>

using namespace std;

int main()
 {
 int num;
 cout <<"Este programa solicitará números hasta que el usuario escriba 0" << endl;
 cout << endl;
 cout<< "Escribe número enteros, cuando desees terminar, escribe cero" << endl;
 
 num = 1;
 
 while (num != 0)
 {
 cin >> num;
 cout<<"Escribiste: " << num << endl << "escribe 0 para terminar" << endl;
 }
 
 cout<<"Escribiste 0, el ciclo while ha terminado" << endl;

return 0;
 }

Al ejecutar este programa obtendremos una salida similar a la siguiente:

Salida del ciclo While en C++
Salida del ciclo While en C++

Como puedes observar mientras no escribas 0, el sistema solicitará números de forma permanente, aunque el programa no hace mucho, ilustra claramente la función del ciclo while, puedes observar claramente como el valor que recibe la variable num sirve para determinar el fin del ciclo cuando se vuelve verdadero con un valor 0.

Sin embargo tal vez hayas pasado por alto una instrucción fundamental en el programa, esta línea es:

num = 1;

Inicialización de variables.

Como se mencionó anteriormente, resulta oportuno realizar la inicialización de variables.

La inicialización de variables consiste en asignar un valor a una variable antes de utilizarla.

En el uso de bucles y estructuras de control esto se vuelve particularmente importante, en el programa anterior comenta la instrucción con doble barra:

// num = 1;

ejecuta nuevamente el programa y observa el comportamiento del mismo, a continuación te presentamos una posible salida al ejecutarlo.

Efectos de una variable sin inicializar
Efectos de una variable sin inicializar

En nuestro caso y utilizando el compilador https://www.onlinegdb.com/online_c++_compiler el bucle while nunca se ejecutará debido a que la variable num toma un valor de 0 al momento de ejecutar el programa, haciendo que la condición sea verdadera desde el principio, por lo que el ciclo while ni siquiera se ejecuta una sola vez.

En tu caso pueden producirse otros resultados, dependerá de la plataforma y el compilador que utilices, pero en nuestro caso num al inicio del programa toma un valor, 0, en tu caso puede tomar otro valor.

Como se mencionó anteriormente, en programación no nos podemos dar el lujo de hacer suposiciones, debemos asegurar todas las posibilidades, por tal motivo inicializamos explícitamente num = 1 de este modo aseguramos que al menos se ejecute una vez el bucle.

Recuerda, es muy importante inicializar la variable de control utilizada en un bucle (el que sea), no debes dejarla al azar.

El siguiente es un ejemplo más útil que ejemplifica el uso del ciclo while.

// eb26_while02.cpp
// Uso de while02
// Este programa ilustra el uso del bucle While realizando la suma de enteros
// 2017, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.onlinegdb.com/online_c++_compiler

#include <iostream>
using namespace std;

int main()
 {
 int num, suma;
 cout <<"Este programa sumará todos los números enteros que introduzcas" << endl;
 cout << endl;
 cout<< "Escribe número enteros, cuando desees terminar, escribe cero" << endl;
 
 num = 1;
 suma = 0;
 
 while (num != 0)
 {
 cout << "Escribe el número a sumar (0 para terminar): " << endl;
 cin >> num;
 suma = suma + num; // acumulador
 }
 
 cout << "La suma total es: " << suma << endl;

 return 0;
 }

Aunque este programa solo es una variación del primer ejemplo es importante que comprendas completamente la instrucción en donde se almacena la suma,

suma = suma + num; // acumulador

Éste tipo de sentencias se denomina acumulador y lo debes interpretar del siguiente modo: la variable (suma) toma el valor de sí misma (Por esto mismo es fundamental inicializarla a 0) y le añade el valor de la otra variable utilizando el operador indicado.

Termino con un ejemplo adicional, en este caso retomaremos el programa de cálculo de índice de masa corporal y añadiremos la funcionalidad de repetición cíclica hasta que el usuario presione la tecla ‘n’ o ‘N’, para ello utilizaremos un bucle while.

// eb27_while03.cpp
// Uso de while03
// Variación del programa de cálculo de índice de masa corporal, utilizando
// while se habilita la opción de ejecuciones múltiples hasta que el usuario 
// pulsa la tecla 'n' o 'N'
// 2017, Por http://about.me/carlosgbr
// Versión 1
// Compilado en https://www.onlinegdb.com/online_c++_compiler

#include <iostream>
using namespace std;

int main()
{
 const float BajoPeso = 18.5; //Hasta 18.5
 const float SobrePeso = 25.00; //A partir de 25.00
 const float Obesidad = 30.00; //A partir de 30.00
 const float ObesidadMorbida = 40.00; //A partir de 40.00

 string nombre, estatusIMC;
 float peso, estatura, imc;
 char respuesta; 
 bool continuar = true;
 
 while (continuar)
 {
 cout << "Después de escribir el dato que se te pide, pulsa la tecla ENTER ó ACEPTAR" << endl << endl;
 cout << "Este programa te permitirá conocer tu índice de masa corporal (IMC)" << endl << endl;
 cout << "Cuál es tu nombre?:" << endl;
 cin >> nombre; //Se lee y almacena el nombre
 cout << "Mucho gusto " << nombre << ", por favor, dime tu peso en kilogramos: " << endl;
 cin >> peso; //Se lee y almacena el peso
 cout << "Muy bien, ahora por favor, dime tu estatura en metros: " << endl;
 cin >> estatura; //Se lee y almacena la estatura

//cálculo del IMC
 imc = peso / (estatura*estatura);

//Determinamos el grado de obesidad dependiendo del IMC

//bajo peso menor a 18.5
 if (imc <= BajoPeso) {
 estatusIMC = "Bajo peso";
 }

//Peso normal superior 18.5 menor a 25.0
if ((imc > BajoPeso) and (imc <= SobrePeso)) {

estatusIMC = "Peso normal";
 }

//SobrePeso arriba de 25.0
 if ((imc > SobrePeso) and (imc < Obesidad)) {
 estatusIMC = "Obesidad";
 }
//Obesidad arriba de 30.0 menor a 40.0
 if ((imc >= Obesidad) and (imc <= ObesidadMorbida)) {
 estatusIMC = "Obesidad";
 }
 //Obesidad Mórbida arriba 40.0
 if (imc > ObesidadMorbida) {
 estatusIMC = "Obesidad Mórbida";
 }

cout << "Muy bien " << nombre << ", Te informo que tu Índice de Masa Corporal es: "
 << imc << endl;
 cout << "De acuerdo a la OMS, tu IMC está dentro del rango: "
 << estatusIMC << endl;
 
 cout << "¿Deseas realizar otro cálculo? Escribe cualquier letra para sí o N para terminar" << endl;
 cin >> respuesta;
 
 //Si el usuario pulsa 'n' o 'N' establecemos condición de paro
 if (respuesta == 'n' or respuesta == 'N') //Evaluamos la respuesta del usuario
 {
 continuar = false; //Establecemos condición para terminar.
 }
 
 }

return 0;
 }

Es buena idea que realices todas las variaciones que consideres necesarias para identificar que hace cada línea de código, también es buena idea que comentes líneas de código para que analices el resultado.


¿Deseas aprender BIEN Seguridad Informática “desde el principio”? 

Aplicación de medidas para la implantación de la L.O.P.D. en las empresas

Obtendrás información ampliada y más recursos en comparación con el material que ofrecemos de forma gratuita, y material adicional, visita https://ehack.mx/portfolio-view/material-de-estudio-ceh-online/ para más información o ecríbenos a ceh@ehack.mx

Ethical hack
Ethical hack

 Fuente Imágenes:

“Todas las demás imágenes de esta sección”: by Nala Systems

Código fuente:

el código fuente de toda la serie lo puedes descargar en nuestro repositorio en github busca los programas con el nombre del encabezado de cada programa.

 

Licencia Creative Commons
Bucle While en C++ por Roberto C. González se distribuye bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional.
Basada en una obra en http://ehack.info/cpp01/.
Permisos que vayan más allá de lo cubierto por esta licencia pueden encontrarse en https://about.me/carlosgbr.

 

Comentarios de Facebook

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *