martes, 21 de abril de 2015

Lógica de Programación (16) - Estructura mientras-hacer


La primera estructura de repetición que vamos a conocer es la estructura mientras-hacer. En esta estructura, un conjunto de instrucciones se va a repetir mientras que se cumpla una determinada condición. Esta estructura sigue esta sintaxis:

mientras (condición) hacer
   sentencias
fin_mientras

En esta estructura, lo primero que sucede es que se evalúa la condición (que es una expresión booleana). Si el resultado es falso, entonces no se toma ninguna acción y el algoritmo sigue su camino hacia las sentencias que estén después del ciclo. Es decir, el ciclo es ignorado. Pero si la expresión resulta verdadera, entonces se ejecutan las sentencias que forman el cuerpo del ciclo, después de lo cual se vuelve a evaluar la condición. Este proceso se repite vez tras vez mientras la condición sea verdadera.

¿Recuerdan el ejemplo que citamos en la lección anterior? en dicho ejemplo, necesitabamos leer el valor de 10 números para calcular su suma. Usando la estructura mientras-hacer, el ejemplo quedaría de este modo:

algoritmo Suma
var
   entero: contador, numero, suma
inicio
   suma <- 0
   contador <- 1
   mientras (contador <= 10) hacer
      escribir("Escribe un número:")
      leer(numero)
      suma <- suma + numero
      contador ++
   fin_mientras
   escribir("La suma de los números dados es: " + suma)
fin

En este algoritmo, lo primero que hacemos es inicializar las variables suma y contador. Dado que suma será la variable donde vamos a almacenar el resultado de la suma de todos los números, la inicializamos en cero. Por otro lado, la variable contador será la que nos ayude a determinar cuando nuestro ciclo mientras va a detenerse. Como la condición indica que el contador debe llegar a 10, lo inicializamos en 1 para permitir la primera vuelta del ciclo. Una vez que inicializamos las variables, evaluamos la condición (contador <= 10). Como la primera vez esta condición resulta verdadera, ejecutamos el cuerpo del ciclo. Dicho cuerpo está formado por cuatro sentencias: en las primeras dos nos ocupamos de leer el número que vamos a sumar; en la tercera, nos ocupamos de acumular el valor dado en la variable suma (es decir, a suma le asignamos el valor que ya tenía la variable mas el valor del número dado); finalmente, la sentencia contador++ se encarga de incrementar en 1 el valor de la variable contador, de modo que, ahora, su valor es 2 y entonces volvemos a evaluar la condición. Este proceso se repetirá hasta que la variable contador tenga un valor de 11, en cuyo caso la condición resultará falsa y el cuerpo del ciclo ya no se ejecutará de nuevo.

Esta es la prueba de escritorio para este ejemplo:



Y este es el programa escrito en C#, de modo que puedas ver su funcionamiento real:


Esta estructura podemos usarla para, por ejemplo, pedir una contraseña a un usuario tantas veces como sea necesario hasta que introduzca una contraseña válida. Mira:

algoritmo Password
var
   cadena: pass
inicio
   escribir("Introduce tu contraseña para continuar: ")
   leer(pass)
   mientras (pass <> "123456") hacer
      escribir("Contraseña equivocada. Inténtalo de nuevo.")
      leer(pass)
   fin_mientras
   escribir("Finalizado")
fin

En este ejemplo, repetiremos la lectura del valor de la variable pass mientras que el usuario proporcione un valor diferente a "123456", que es la contraseña esperada. A diferencia del ejemplo anterior, aquí no sabemos realmente cuántas veces se va a repetir el ciclo, dado que depende del valor que introduzca el usuario. Puede ser cero, una o mil veces. Precisamente esta es una de las características del ciclo mientras: si la condición se evalúa como falsa desde el principio, el ciclo se ejecuta un total de cero veces. Puede que suene como algo inútil, pero en este caso, esa es la acción deseada (si el usuario introduce su contraseña correctamente desde el principio, no tiene caso indicarle que hubo un error).

Aquí está la prueba de escritorio para este algoritmo:


Y su implementación en C# para que pruebes su funcionamiento:



Observemos que en ambos ejemplos contamos con una variable que es la que controla la repetición del ciclo (contador y pass, respectivamente). Estas variables son inicializadas ya sea por asignación (contador <- 1) o por lectura (leer(pass)). También, son usadas en la condición que controla el ciclo comparando su valor con un valor esperado. Finalmente, los valores de ambas variables son modificados dentro del cuerpo del ciclo para poder regresar a evaluar la condición una vez más. En el primer ejemplo la modificación es un incremento de valor (contador++) mientras que en el segundo se trata de una lectura (leer(pass)). Este último paso es importante porque, si no se hiciera, nos llevaría a un ciclo infinito pues el valor de la variable siempre es aquél con el que se le inicializó.

En la siguiente lección conoceremos una variación de este ciclo: la estructura hacer-mientras que, aunque en esencia hace lo mismo, veremos que tiene una importantísima diferencia con la estructura que acabamos de conocer. ¡Hasta la próxima!

ACTIVIDADES DE APRENDIZAJE


  1. Escribe un algoritmo que muestre en pantalla 100 veces la frase: "Programar ciclos es fácil".
  2. Escribe un programa que reciba 50 calificaciones de alumnos y calcule y muestre el promedio de todas ellas.
  3. Modifica el programa anterior suponiendo que no se sabe cuántas calificaciones se van a capturar. Pregunta al usuario cada vez si desea capturar otra calificación.
  4. Escribe un programa que lea una lista de 200 números y al finalizar nos muestre: (a) la suma de todos los números, (b) la cantidad de números que fueron positivos, (c) la cantidad de números que fueron negativos, (d) la suma de los números pares y (e) la suma de los números impares.

Enlace: Índice del curso


0 comentarios:

Publicar un comentario

Copyright © IsraelCapetillo.com - Un blog de tecnología, noticias geek y más Compartido por Gooyaabi Templates | Powered By Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com