Diferencia entre revisiones de «Bucle for»

Contenido eliminado Contenido añadido
Aosbot (discusión · contribs.)
m Mantenimiento de Control de autoridades
Sin resumen de edición
Etiquetas: posible pruebas posible problema Edición desde móvil Edición vía web móvil
Línea 124:
* '''Cuerpo''': es lo que se hará en cada iteración, pueden ser una o más instrucciones. Si bien no se impone una obligación al respecto, lo más común es que en este Cuerpo exista alguna operación sobre el elemento iterado.
 
Una de las características importantes que se pueden aprovechar de las computadoras es precisamente su capacidad de repetir la ejecución de secuencias de instrucciones a una gran velocidad y con alto grado de confiabilidad. Para estos fines, precisamente se definen en los lenguajes de programación las estructuras de control iterativas. El objetivo de estas estructuras es permitir la expresión de la repetición de una secuencia de instrucciones, a estas estructuras se les denomina ciclo, lazo o bucle.
=== Necesidad de una nueva estructura de control ===
 
Sumario
Esta estructura surge como una innovación en los lenguajes para permitir un código más ágil y legible en una situación que es una de las principales causas del uso del bucle PARA: aplicar la misma operación sobre todos los elementos de un vector, y no necesitar conocer la posición del elemento en el vector. Esta estructura con el bucle PARA se resuelve de la siguiente manera:
1 Estructuras de Control Iterativas
2 La instrucción while
3 La instrucción do/while
===4 Necesidad de una nuevaLa estructura de control ===for
5 Caso de Estudio
5.1 MCD()
5.2 CantDigitos()
5.3 Factorial()
6 Ciclos Anidados
7 Fuentes
Estructuras de Control Iterativas
En la vida diaria existen situaciones que frecuentemente se resuelven realizando una determinada secuencia de pasos que puede repetirse muchas veces, ejemplo:
 
El proceso que seguimos para comer, mientras no se termine la comida.
Con el bucle POR CADA esto se reduce a:
El proceso de insertar monedas, hasta que se abone la cantidad necesaria.
Las operaciones que realizamos para llamar por teléfono, mientras no se logre la comunicación.
Como se puede observar estos son algoritmos que se hacen cotidianamente, pero tienen la particularidad de que la ejecución de alguno de sus pasos puede repetirse muchas veces, mientras no se logre la meta trazada. A este tipo de algoritmo se le conoce como algoritmos iterativos o repetitivos. En C#, las instrucciones while, do/while, y for, permiten ejecutar iteraciones, bucles o ciclos. En cada caso se ejecuta un bloque de instrucciones mientras la condición que se evalúa tome valor verdadero. Se resalta que cualquiera de las 3 instrucciones cumple con el mismo objetivo que es el de ejecutar una secuencia de pasos, más de una vez.
 
La instrucción while
<pre>POR CADA x DE tipo EN Vector HACER
La instrucción while tiene la siguiente sintaxis:
x = AlgunaOperación(x)
FIN PARA
</pre>
 
InstruccionWhile.JPG
Las ventajas de utilizar la estructura POR CADA son las siguientes:
# No es necesario llamar a una función que obtenga el tamaño del vector
# No es necesario utilizar la incómoda notación de sub-índices para referirnos al valor en cuestión, sobre todo teniendo en cuenta que si utilizamos esta estructura es porque no necesitamos el valor del índice.
# Nos permite hacer un chequeo en tiempo de compilación sobre el tipo de dato que representa el elemento.
 
La semántica de la instrucción es la siguiente:
El bucle POR CADAo no es un sustituto del PARA, es una mejora para el muy frecuente caso anteriormente mencionado. La diferencia esencial entre el bucle PARA y el POR CADA es que en el primero guía su iteración por una variable que se incrementa hasta cierto punto de corte; en cambio en el segundo lo que guía la iteración es el recorrido de todos los elementos de un vector. Ciertamente podemos transformar cualquier POR CADA en un PARA, pero transformar un bucle PARA en un bucle POR CADA requeriría inicializar y controlar manualmente las variables de control, con lo cual se perdería nuevamente legibilidad en el código. Por tanto, cuando en un lenguaje se nos da la posibilidad de utilizar ambas estructuras, la elección del POR CADA debe hacerse en aquellos casos para los que fue pensado: aplicar la misma operación a todos los elementos de un vector sin importar el orden en que se hagan; si bien no es necesario que la variable elemento sea utilizada en el cuerpo del bucle, su ausencia denota con seguridad una mala elección de estructura de control.
 
<condición>. Está representada por una expresión booleana y mientras se cumpla se ejecutará el ciclo.
[Bloque de Instrucciones] El bloque de instrucciones puede estar formado por una o varias instrucciones y es el conjunto de pasos que se van ejecutar en cada iteración del ciclo.
Para una mayor comprensión se muestra su representación en un diagrama de actividad.
 
DiagramaWhile.JPG
 
Esta estructura de control permite repetir o iterar el [Bloque de Instrucciones] mientras la condición sea verdadera o dicho de otra manera, estas iteraciones terminarán cuando la condición sea falsa y entonces se podrá ejecutar la siguiente instrucción después del while.
 
Es válido señalar que en esta instrucción la condición se evalúa al inicio del ciclo por lo que si la primera vez que se evalúa la condición esta es falsa, el ciclo no llegará a realizarse.
 
La instrucción do/while
La estructura de control do/while es otra sentencia de iteración en la que la condición se evalúa por primera vez una vez que se haya ejecutado el [Bloque de Instrucciones] y tienen la siguiente sintaxis:
 
InstruccionDoWhile.JPG
 
Su semántica es la misma que la de la instrucción while y su representación en un diagrama de actividad es la siguiente:
 
DiagramaDoWhile.JPG
 
En esta estructura repetitiva el bloque de instrucciones siempre se ejecuta al menos una vez pues la condición se evalúa al final. Una vez realizada la evaluación si el resultado es true, se vuelve a ejecutar el [Bloque de Instrucciones], en caso contrario se ejecutan las instrucciones que sigan a continuación saliendo del ciclo. La funcionalidad de este método será la misma que en el ejemplo con while. La única diferencia es la forma en que se controla el bucle. En la práctica, verá que la instrucción while se utiliza más a menudo que la instrucción do – while. El elegir una instrucción en lugar de la otra es una elección personal. Un aspecto muy importante a tener presente en los ciclos condicionales es la necesidad de contemplar dentro del bloque de instrucciones al menos una, que de alguna manera, altere –en algún momento- el resultado de la expresión booleana. La explicación sencillamente está dada por el hecho que de no existir esta instrucción una vez entrada al ciclo este nunca terminaría por lo que se caería en un ciclo infinito.
 
La estructura de control for
Los procesos iterativos que se han visto hasta ahora terminan por una condición. En muchas situaciones las iteraciones se realizan un número determinado de veces, muchos autores les llaman ciclos por conteo pues se conoce de antemano cuántas veces se hará el proceso que se repite. En este tipo de iteración, siempre se necesita una variable que lleve el control de las veces que se repite el proceso por esto se les conoce también como ciclos con variable de control. Uno de los ciclos más conocidos y usados en la mayoría de los lenguajes de programación es el de la instrucción for que suele estar controlado por un contador o variable de control y tiene la siguiente sintaxis:
 
InstruccionFor.JPG
 
La semántica de la instrucción es la siguiente:
 
<instrucciones 1>. Se ejecutará una sola vez al inicio del ciclo, generalmente se realizan inicializaciones y declaraciones de variables puesto que como se dijo con anterioridad, esta solo se ejecuta una vez. En caso de que se quiera realizar o ejecutar más de una instrucción en este momento, dichas instrucciones se deben separar por comas (“,”).
<expresión>. Es evaluada en cada iteración y en dependencia del valor que devuelva, dependerá que el ciclo continúe ejecutándose (valor de la expresión true) o no (false). Destacar que de no colocarse nada en esta parte, el ciclo tomará como true el valor de la expresión por lo que en principio, el ciclo puede estar repitiéndose infinitamente.
<instrucciones 2>. Es ejecutado siempre en cada ciclo al terminar de ejecutar todas las instrucciones que pertenecen al bucle for en cuestión. Por lo general puede contener alguna actualización para las variables de control. Análogamente a <instrucciones 1> en caso de querer ejecutar en este momento más de una instrucción se deben separar por comas.
Observe que es obligatorio para separar cada término que compone la instrucción for utilizar un punto y coma (;) de lo contrario el compilador mostrará un error de tipo semántico. Reiterar que la <instrucción 1> se ejecuta una sola vez al comienzo, que la <instrucción 2> es la que generalmente se utiliza para modificar la variable de control aunque en el ciclo esta puede modificarse también, y que <expresión>, es la que garantiza la finitud del ciclo, el for se estará ejecutando siempre y cuando <expresión> sea evaluada y tome valor true.
 
== Véase también ==