Una vez acabados los bucles for, nos centraremos en los bucles While.
6.3.1. Concepto del bucle While.
El bucle While se utiliza cuando realmente no sabemos el número de iteraciones que se van a realizar en el bucle, sin embargo sí sabemos que mientras se cumpla una determinada condición debemos realizar el bucle. Cuando esa condición ya no se cumpla entonces el bucle finalizará.
En este tipo de bucles no existe ninguna variable que indique el número de vueltas que ha realizado o falta por realizar. El único control que utiliza es una condición que está al comienzo del bucle, mientras esta condición sea cierta se realizan iteraciones y en el momento que sea falsa se finaliza el bucle.
Al estar la condición a la entrada del bucle, lo primero que se hace es comprobar la condición y después la iteración; esto significa que antes de comenzar a realizarse el bucle debe comprobar que la condición es verdadera, si ésta no lo es entonces el bucle no se realizará. Por tanto después de cada iteración el bucle vuelve a la puerta para comprobar si la condición es falsa o verdadera.
Este tipo de bucles es muy útil en programación puesto que simula procesos reales; por ejemplo en un surtidor se podría llenar los depósitos de combustible mientras haya gasolina; una máquina expendedora de billetes puede vender billetes mientras haya billetes. En general este bucle es muy efectivo en procesos que sigan el esquema mientras..ocurra algo...hacer tal cosa.
El "ocurra algo" es la condición del bucle y "hacer tal cosa" es el cuerpo del bucle; es decir, las sentencias que se ejecutan durante la iteración.
Un ejemplo sería.

Como ya sabes, las máquinas de tabaco suministran un paquete determinado introduciendo unas monedas. Esta máquina funciona con un bucle de tipo While ya que se podría expresar por: "mientras haya paquetes de tabaco venderlos".
La condición haya tabaco se puede expresar como tabaco>0 y el proceso "venderlos" por: tomar dinero; dar cajetilla; devolver cambio(si lo hay) y hacer tabaco=tabaco-1 (quiere decir que queda una cajetilla menos). Así se podría expresar:

mientras (tabaco>0)
tomar dinero.
dar cajetilla.
devolver cambio (si lo hay).
tabaco=tabaco-1. (se ha vendido un paquete).
fin del bucle.
1.- Al comienzo del programa los valores de la expresión que forma la condición están inicializados. Volviendo al ejemplo anterior, es lógico que si se quiere vender las cajetillas antes haya asique, si se han metido inicialmente 100 cajetillas en el programa se expresa "tabaco=100" y esto se realiza antes de comenzar el bucle.
2.- Dentro del bucle se altera la condición de entrada; es decir, si se está ejecutando el bucle esto quiere decir que la condición es verdadera. Si esta condición no cambiara nunca entonces el bucle sería infinito (la puerta estaría siempre abierta). Así pues, llegará un momento en el que la condición tendrá que ser falsa y por tanto finalice el bucle. En el ejemplo anterior existe la sentencia "tabaco=tabaco-1" que causará que la condición (tabaco>0) sea falsa. Realmente esto ocurrirá cuando se realicen 100 iteraciones dentro del bucle o lo que es lo mismo cuando se hayan vendido las 100 cajetillas de tabaco.

Recuerda que: los bucles while antes de comenzar a realizar una iteración comprueban una condición, si ésta es verdadera entonces se realiza una iteración y si es falsa entonces finaliza la ejecución del bucle.

Los bucles que no se ejecutan nunca se suelen presentar cuando antes del bucle la condición es falsa, por tanto no se entra en el bucle y éste no se realiza. Si ocurre esto revisa los valores iniciales que conforman la expresión que hay dentro de la condición.
Los bucles infinitos se suelen presentar cuando dentro del bucle no se cambia la condición de entrada.



6.3.2. Representación algorítmica del bucle While.
La estructura general de la sentencia while es la siguiente:
(1)mientras (condición)
(2) bloque de sentencias;
(3)fin while.
Donde bloque de sentencias es cualquier conjunto de sentencias C. La estructura tiene tres partes:
(1) mientras condición se representa por el mismo símbolo que una sentencia if y dentro de él la condición.
(2) cada sentencia se representa por su símbolo.
(3) el fin while se representa mediante un punto.
La figura nº 8 expre­sa un organigrama de la sen­tencia While y su explicación.
algoritmia_8.png

Nótese que el inicio es una sentencia del tipo If, es decir que si la condición es verdadera se realizan el resto de sentencias y si no se va a la sentencia 3 finalizando el bucle.

Para entenderlo mejor, concretizaremos con un ejemplo:

"Realizar un organigrama que represente el funcionamiento de una máquina de tabaco (por simplificar, suponer que sólo hay una marca de tabaco con un precio fijo). La máquina debe aceptar el dinero, dar el paquete y devolver el cambio".


Este problema se puede resolver con la estructura general: "mientras haya tabaco
venderlo", dónde venderlo es un conjunto de acciones.
La figura nº 9 muestra la solución.
algoritmia_2.png

6.3.3. Bucles Do-While.
6.3.3.1. Concepto del bucle Do-While.

Los bucles for y while tienen la caracte­rística común de que la condición se evaluaba antes de realizar el bucle, así cabía la posibilidad de que no se realizara ninguna iteración.

La principal diferencia del bucle do-while, respecto a los anteriores, es que éstos evalúan la condi­ción al final del bucle; así el bucle siempre realizará al menos una iteración.
Por tanto el número de iteraciones dependerá de la condición final del bucle (compuerta de salida del mismo), si es falsa (compuerta cerrada) acaba la ejecución del bucle, si no (compuerta abierta) hay otra iteración.

Al igual que los bucles while este tipo de bucles es muy utilizado puesto que muchas situaciones reales tienen una interpretación directa en el bucle do-while. Concretamente todas aquellas que se puedan expresar mediante: "haz .....acciones.....mien­tras ocurra una condición" la estructura del bucle sería:

hacer
bloque de sentencias
mientras (condición)

Obsérvese que mientras (condición) está al final del bucle y esto hace que el bloque de sentencias se realice al menos una vez independiente­mente del valor que tenga la condición. Esta característica es la que determina la utilización del bucle; es decir, si debemos realizar un bucle en el cual es necesario al menos hacer una iteración, entonces utilizaremos el bucle do-while.
Situaciones en las cuales se requiere que el bucle se ejecute al menos una vez son por ejemplo, todas aquellas que necesiten que una entrada de información cumpla una serie de condiciones y no se quiera continuar con el programa hasta que se cumplan. Por ejemplo, en el organigrama de la máquina de tabaco se introducía una cantidad de dinero para adquirir un paquete, sería conveniente no dejar continuar la ejecución del programa hasta que la cantidad de dinero introducida no fuese igual o superior al precio del paquete de tabaco. Esto se realizaría así:

haz
leer precio (cantidad introducida)
mientras (precio<200)


Si se quisiera realizar el proceso a través de un bucle while sería más costoso, ya que necesitaríamos más sentencias de lectura:
precio=0 ó leer precio
mientras (precio<200)mientras(precio<200)
leer precioleer precio
fin del bucle.fin del bucle.

Aquí se resalta la necesidad de los bucles while a iniciar las variables de la condición, pero en los bucles do-while no lo es.

Vayamos con otro ejemplo distinto de la utilización del bucle do-while:

"Realizar un organigrama a través del cual se pueda jugar al número escondido. En este juego alguien escribe un número y otra persona trata de adivinarlo, esta persona dirá un número y si es mayor que el que está escrito se deberá decir "alto" mientras que si es menor se deberá decir "bajo". El juego finaliza cuando se acierta el número escrito y gana aquel que lo haya acertado en menos intentos".
Este juego se puede expresar de la forma: "di un número mientras no aciertes el número secreto" ó "juega mientras no aciertes el número secreto". Esto se puede expresar mediante un bucle do-while de la siguiente forma:
x=0
haz
lee número (el jugador dice un número)
si es mayor que el secreto escribe ("alto")
si es menor que el secreto escribe ("bajo")
x=x+1
mientras (número distinto al secreto)
escribe ("has acertado en ", x , "intentos")

La variable x mide el número de intentos que ha realizado el jugador hasta acertar.

6.3.3.2. Representación algorítmica del bucle Do-While.
La estructura del bucle do-while tiene tres partes diferenciadas: inicio, bloque de sentencias y final.
do(comienzo del bucle).
bloque de sentencias;(bloque de sentencias).
mientras (condición)(fin del bucle).
En este caso la condición final del bucle también actúa como "compuerta" de salida o indicador de iteraciones. El organigrama del bucle do-while se representa en la figura nº 10.



algoritmia_1.pngObsérvese que el final del bucle (mientras (condi­ción)) se representa por el mismo símbolo que una senten­cia if. Dentro de las sentencias que componen el cuerpo del bucle debe haber alguna que posibi­lite cambiar el valor de la condición, ya que si el valor de ésta inicialmente es verdadero, entonces realizaríamos un bucle infinito.
El algoritmo a través del cual representábamos el juego del número secreto se representa mediante un organigrama como se muestra en la figura nº 11.


algoritmia_11.png



Obsérvese que el final del bucle (mientras (condi­ción)) se representa por el mismo símbolo que una senten­cia if. Dentro de las sentencias que componen el cuerpo del bucle debe haber alguna que posibi­lite cambiar el valor de la condición, ya que si el valor de ésta inicialmente es verdadero, entonces realizaríamos un bucle infinito.
El algoritmo a través del cual representábamos el juego del número secreto se representa mediante un organigrama como se muestra en la figura nº 11.