La instrucción while actúa de forma similar a la instrucción for porque permite ejecutar una instrucción o conjunto de instrucciones repetidamente hasta que se cumpla una condición ( y devuelve falso). La forma más fácil de comprender la declaración while es: "mientras la condición permanezca verdadera, ejecuta el ciclo".
// Sintaxis de while
while(condicion) { intrucciones; }
La instrucción while comienza con la palabra clave while, entre paréntesis la condición de prueba. Si la condición devuelve verdadero, se ejecutarán las instrucciones incluidas en las llaves. Cuando la condición devuelve falso, la ejecución cae en la línea de código después de la llave de cierre de la declaración.
int Valor = 0;
while (Valor < 10)
{
Console.WriteLine(Valor);
Valor++;
}
El código anterior establece la variable valor a 0. El ciclo while prueba la condición para ver si valor es menor que 10. En este caso, 0 es menor que 10, por lo que el ciclo while se ejecuta y muestra el valor de valor en la ventana de la consola. Después incrementa en 1 la condición de bucle y verifica nuevamente, el ciclo se ejecuta de nuevo porque valor es igual a 1, que es aún inferior a 10.
Una vez que el valor de condición supera 10, la condición se hace false y la ejecución continúa después de la llave de cierre del ciclo while. El valor 10 no se imprime debido a que condición de retorno se hace falsa. Se puede pensar que se mostrarán los valores hasta 10 incluido, pero esto no sucederá.
Hay que tener en cuenta las diferencias entre los ciclos while y for. El bucle for establece una variable, una condición, y un incremento dentro del paréntesis. El ciclo while se basa en variables previamente establecidas y requiere que el incremento tenga lugar dentro del ciclo. La falta de incremento dentro del ciclo puede crear un bucle infinito.
Instrucciones do-while
Esta estructura de bucle opera de una forma similar al ciclo while con la excepción de que, el ciclo do-while ejecuta el bloque de instrucción al menos una vez independientemente de la condición. Esto sucede porque la condición de evaluación se encuentra al final del bucle en vez de al principio.
// sintaxis de bucles do-while: do { instruccion; } while (condicion);
Como se puede ver en la sintaxis precedente, se ejecutan primero las instrucciones del bucle y luego se comprueba la condición. También es importante tener en cuenta el uso del punto y coma al final del while además de la llave de cierre. Olvidar este punto y coma da como resultado que el compilador genera un error.
int AlgunValor = 0;
do { Console.WriteLine(AlgunValor);
AlgunValor++;
}
while (AlgunValor < 10);
El ejemplo de código anterior produce el mismo resultado que el enunciado while anterior. 0,1,2,3,4,5,6,8,9. Pero en realidad estos dos bucles se comportan de manera diferente, por lo que modificando un poco el código:
int AlgunValor = 10;
do { Console.WriteLine(AlgunValor);
AlgunValor++;
} while (AlgunValor < 10);
Lo que cambia en este código es el valor inicial de la variable. Ahora se establece en 10. Como resultado, el do-while se ejecutará al menos una vez, y como resultado: 10.
El resultado muestra solo un valor único, 10. Este fue el valor inicial establecido en la variable, y es la salida por pantalla que muestra que do-while ejecuta el bloque de instrucción al menos una vez. Cuando la condición se verifica al final del ciclo, devuelve falso porque AlgunValor es menor que 10, y el ciclo ya no se ejecuta.
Entonces, ¿por qué elegir un do-while frente a un While? Hay varias razones para elegir uno frente el otro, pero un escenario típico es cuando esperamos una entrada del usuario y necesitamos asegurarnos de pasar al menos una vez.
do
{
AlgunValor = (char)Console.Read();
Console.WriteLine(AlgunValor);
} while (AlgunValor != 'q');
Este ejemplo muestra un código con el que la declaración de variables que declara que AlgunValor de tipo char, representa un solo carácter. Dentro del bucle do, establece un valor igual a un carácter introducido por el usuario cuando se ejecuta el programa. La línea Console.Read () es un método de la clase Console que lee un carácter de la consola de entrada. (char) es un molde explícito que convierte la entrada a un valor de char para usar en el programa.
La entrada que introduce el usuario se repite en la pantalla con el método Console.WriteLine.
La condición while comprueba si el valor ingresado por el usuario es la letra q. Si es así, cierra el ciclo; en caso contrario, continúa hasta que se ingrese q en la consola. Este tipo de control de bucle se conoce como centinela.
El valor centinela, es el que hace que el ciclo se detenga. La
Salida será de este tipo: rr hh tt qq.
Trabajando con bucles
Iniciamos una nueva aplicación llamada Bucles, ponemos un botón y un listBox y pegamos este código en la función del botón:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnBucles_Click(object sender, EventArgs e)
{
// utilizar un bucle para contar uno a uno
listBox1.Items.Add("Cuenta una
a uno");
for (int i = 0; i < 10; i++)
{
listBox1.Items.Add(i);
}
listBox1.Items.Add("");
// utilizar un bucle para contar hacia abajo de uno en uno
listBox1.Items.Add("Cuenta
hacia abajo de uno en uno");
for (int i = 10; i > 0; i--)
{
listBox1.Items.Add(i);
}
listBox1.Items.Add("");
// utilizar un bucle para contar de dos en dos
listBox1.Items.Add("Cuenta de dos
en dos");
for (int i = 0; i < 10; i += 2)
{
listBox1.Items.Add(i);
}
listBox1.Items.Add("");
// utilizar un bucle para contar con multiplos de 5
listBox1.Items.Add("Cuenta con
multiplos de 5");
for (int i = 5; i < 1000; i *= 5)
{
listBox1.Items.Add(i);
}
listBox1.Items.Add("");
// utilizar un foeach sobre un array de enteros
listBox1.Items.Add("foeach
sobre un array de enteros");
int[] arrEnteros = new int[] { 1, 2, 3, 4, 5 };
foreach (int numero in arrEnteros)
{
listBox1.Items.Add(numero);
}
listBox1.Items.Add("");
//utilizar un bucle
foreach con cadenas
listBox1.Items.Add("foreach
sobre un array con cadenas");
string[] arrStrings = new string[] { "Primero" , "Segundo", "Tercero", "Cuarto" , "Quinto" };
foreach (string texto in arrStrings)
{
listBox1.Items.Add(texto);
}
listBox1.Items.Add("");
// utilizar un bucle while
int whileContador = 0;
listBox1.Items.Add("Contando
uno a uno con un bucle while");
while (whileContador < 10)
{
listBox1.Items.Add(whileContador);
whileContador++;
}
listBox1.Items.Add(""); Console.WriteLine();
//
utilizar un bucle do-while
int doContador = 0;
listBox1.Items.Add("Contando
con un bucle do-while");
do
{
listBox1.Items.Add(doContador);
doContador++;
} while (doContador < 10);
listBox1.Items.Add("");
}
}
}
El resultado será de este estilo
No hay comentarios:
Publicar un comentario