Estructuras Repetitivas Parte 1
Estructuras Repetitivas Parte 1
Estructuras Repetitivas Parte 1
UNIDAD V
ESTRUCTURAS REPETITIVAS (parte 1/2)
Contenido
1. GENERALIDADES - ESTRUCTURAS REPETITIVAS
2. TERMINOLOGÍA BÁSICA
3. ESTRUCTURA DE ENTRADA CONDICIONADA - ESTRUCTURA MIENTRAS
4. VALIDACIÓN DE DATOS CON CICLO MIENTRAS
5. OPERADORES ADICIONALES DEL LENGUAJE C#
6. ESTRUCTURA CONTROLADA POR UN CONTADOR – ESTRUCTURA DESDE_HASTA
7. ESTRUCTURA DE ENTRADA ASEGURADA – ESTRUCTURA HASTA_QUE
8. ESTRUCTURA PARA CADA ELEMENTO - ESTRUCTURA DERIVADA
9. CICLOS ANIDADOS
10. TECNICA DE CICLO CONTROLADO POR BANDERA
11. TECNICA DE CICLO CONTROLADO POR CENTINELA
12. TECNICA PARA DETERMINAR EL VALOR MENOR/MAYOR Y DATOS ASOCIADOS
13. ANEXOS
INTRODUCCIÓN
En nuestra vida cotidiana nosotros podemos realizar tareas o acciones más de una
vez, por ejemplo para los alumnos es casi obligatorio venir a clase todos los días,
para nosotros los docentes es obligatorio venir a trabajar todos los días; así también
todos los días nos bañamos, comemos, dormimos, etc. Hay otras tareas que no son
tan frecuentes pero que también se repiten: estudiar (solo estudiamos unos 2 o 3 días
antes de la evaluación), ir al cine (solo cuando tenemos dinero, tiempo y exhiben la
película que nos interesa).
Realizar algunas actividades muchas veces depende de alguna condición que se nos
imponga: por ejemplo: compilamos un programa las veces que sea necesario hasta
que no tenga errores; es decir, mientras tenga errores no dejamos de compilarlo.
1
Recordemos que para cualquier diseño de solución y su respectiva codificación
disponemos únicamente de tres estructuras de control que son: las secuenciales, las
selectivas y las repetitivas; y que no importa que tan compleja sea la solución que se
necesita, dichas estructuras son suficientes para diseñarla y codificarla. Ya hemos
estudiado las estructuras secuenciales y las estructuras selectivas por lo que en esta
unidad se deben hacer uso de las estructuras secuenciales y selectivas según
corresponda en combinación con las estructuras repetitivas, a fin de obtener una
solución adecuada al problema planteado.
Las estructuras repetitivas son aplicables a problemas para los cuales el diseño de la
solución requiere la repetición de una o más acciones, para llevar a cabo el objetivo
de la misma, dicho sea de paso las computadoras están especialmente diseñadas
para ejecutar tareas que se repiten y hacerlo con la mayor eficiencia. En esta unidad
iniciaremos estudiaremos las generalidades sobre el tema; comenzando con la
terminología (conceptos básicos que nos ayudarán a comprender mejor el uso de los
ciclos), luego operadores en lenguaje C# (especialmente para uso en ciclos) y la
clasificación de las estructuras repetitivas. Otro punto importante que estudiaremos
es la estructura o ciclo mientras y sus aplicaciones en la solución de problemas como
es el caso de validaciones, conteos, cálculo de sumas y promedios, entre otros así
como las distintas aplicaciones de variables de control de ciclo. Por ultimo
aprenderemos ciclos derivados como: desde hasta y hasta que con las formas en
que podemos aplicarlos principalmente en cálculos de sumas y promedios, junto con
técnicas de variables de control y técnica para determinar el valor menor/mayor y
datos asociados.
Para repetir varias veces un proceso determinado haremos uso de los ciclos
repetitivos, a los cuales se les conoce también con el nombre de Estructuras
Repetitivas, Estructuras Iterativas, Lazos, Bucles, Loops o simplemente ciclos al
conjunto de bloques y flechas que nos permite, representar en un flujograma que,
una acción (o varias) se puede realizar una o varias veces (en algunos casos
especiales ninguna vez) de acuerdo a una condición. Al igual que las estructuras
secuenciales y las selectivas, estas estructuras tienen únicamente una flecha de
entrada y una sola flecha de salida dentro de un flujograma.
2. TERMINOLOGÍA BÁSICA
2
Estructuras de Control Repetitivas: En un programa son aquellas estructuras en las
que una sentencia o grupo de sentencias se pueden repetir una o varias veces (en
algunos casos especiales ninguna vez) mientras o hasta que una condición
especifica se cumpla.
a) Estructura Fundamental
Entrada Condicionada o estructura Mientras, se repite mientras la
condición se cumpla.
b) Estructuras Derivadas
Ciclo controlado por contador o estructura Desde_hasta, se repite desde un
valor inicial hasta un valor final.
Ciclo Para_cada_uno es una variante del Desde_hasta pensada
especialmente para compactar la escritura de códigos donde se realice algún
tratamiento a todos los elementos de una colección, muy habitual en los lenguajes
C#. Lo veremos en detalle cuando estemos trabajando con Colecciones de datos
en la siguiente Unidad.
Entrada asegurada o estructura Hasta_que, se repite al menos una vez antes
que se evalúa la condición y se repite mientras la condición se cumpla.
Para representar gráficamente una estructura repetitiva, haremos uso de los siguientes
símbolos o bloques.
3
Cuerpo del Ciclo: Está formado por la acción o conjunto de acciones que se repite en un
bucle y puede estar formado por una o más estructuras lógicas de control:
Secuenciales (entrada de datos, asignación/proceso, salida de datos)
Selectivas (simple, doble, anidada, múltiple)
Repetitivas (entrada condicionada, entrada asegurada, controlada por contador)
Combinación de las anteriores.
Iteración: A la ejecución del cuerpo del ciclo se le conoce como iteración; dicho de otra
forma, una iteración es cada una de las ejecuciones, es decir, cada una de las veces que
se repite el cuerpo del ciclo. Si el cuerpo del ciclo o acción a repetir, se realiza 5 veces,
se dice que se ejecutan 5 iteraciones.
Variable de control del ciclo: es una variable que permite controlar las veces que se
ejecuta un ciclo. La variable de control puede ser: bandera, centinela o contador. Cabe
aclarar que un ciclo podría estar controlado por más de una variable. A continuación se
define cada una de las variables de control:
Bandera: es una variable de entrada y una variable de control de ciclo (con una
sola función: continuar o detener un ciclo), y solamente
puede almacenar uno de dos valores, normalmente cero
(0) o uno (1), debemos recordar que cero es el valor
numérico para falso y uno se considera el valor numérico
para cierto.
4
usar letras se escoge dos letras una de ellas indica cierto y la otra falso, por
ejemplo 's' y 'n', una es sí (cierto) y la otra es no (falso). Se usa con el ciclo
mientras o con el ciclo hasta que.
Contador: Es una variable que controla el número de veces que se repite un ciclo
y/o el número de ocurrencias de un evento, situación o valor determinado (tiene
una doble función controlar el ciclo repetitivo y contar; pero puede ser usada
únicamente para contar).Para definir correctamente una variable contador, se
debe de indicar lo siguiente:
La forma más común de contar es de uno en uno, sobre todo si lo que se desea
es saber cuántas veces se repite una acción determinada, pero no es la única
forma de contar, se puede hacer también contar de dos en dos ó de cinco en
cinco ó de 100 en 100, es más también podemos contar con fracciones de 0.5 en
0.5 o de 0.01 en 0.01. Estas formas de contar se conocen como progresivas, y el
valor de cambio de la variable que controla estas cuentas siempre es positivo y se
le llama incremento, el valor inicial siempre debe de ser menor que el valor final
para que la acción se pueda ejecutar.
5
variable contador; así podemos contar desde 5 hasta 1 por ejemplo, el valor de
cambio es -1. Es importante recordar que independientemente del valor de
cambio (positivo o negativo) de un contador, éste siempre es constante. Como
ejemplo podemos mencionar que para leer un grupo de 5 edades, se puede
definir una variable contador numEd. Dicha variable numEd, tendrá un valor
inicial de 1, un valor final de 5 y un valor de cambio 1.
Acumulador: Es una variable que “almacena” el resultado final de sumar todos los
distintos valores que toma una variable, para definirla, también es necesario indicar:
Valor inicial: Representa el valor original o inicial del acumulador, por lo general cero.
Valor final: El último valor que toma el acumulador, desconocido por lo general.
Valor de cambio: Representa cada valor de la variable que se va sumando o acumulando
(en cada iteración ese valor puede cambiar).
Por ejemplo para calcular el monto total a desembolsar para pagar la planilla de 20
empleados, tendríamos que sumar todos los salarios de los empleados. Podemos hacer
uso de una variable suma; para la cual definimos un valor inicial de 0.0 y un valor de
cambio que es el valor de la variable salario (contiene el salario del enésimo trabajador);
el valor final es lo que pretendemos encontrar, no está definido de antemano.
Dentro del cuerpo del ciclo debe existir alguna estructura que modifique el resultado
lógico (de verdadero a falso) de la condición; si esto no sucediera, la estructura repetitiva
se quedaría ejecutando el cuerpo del ciclo indefinidamente, ya que para salir de la
estructura la condición debe dar como resultado falso, en este caso el ciclo se denomina
bucle infinito (ciclo o lazo infinito) o sin fin (situación que DEBE evitarse).
7
Ejemplo
Nótese que lo que está dentro de las líneas punteadas es la Estructura Repetitiva
(gráfico de la derecha), los caminos o rutas que salen del rombo nunca se unen, como
sucede en la Estructura Selectiva. En este ejercicio se repite el cuerpo del ciclo cuando
el usuario ingresa el valor de 5, y como resultado se imprime "Felicidades Adivino"
…… …
//Acciones Previas n=0
Hacer cont = Proposición Inicial Mientras (n!=5) repetir {
Mientras cont es verdadero repetir Escribir "Adivine el número:"
{ Leer n`
Repetir el Cuerpo del Ciclo }//Fin del Ciclo
Hacer cont = Modificación de cont Escribir "Felicidades Adivinó!!!"
}// Fin del ciclo
//Acciones Posteriores
Reglas de Funcionamiento
Las siguientes normas o reglas deben de cumplirse, cuando utilicemos una estructura
MIENTRAS:
ii. Cuando la condición se evalúa a “Falso”, al entrar a la estructura por primera vez,
el cuerpo del bucle no se ejecutará nunca. En este caso se dice que el bucle se
ha ejecutado cero veces.
iv. La única forma de salir del ciclo MIENTRAS, es obteniendo un resultado de falso
en la expresión lógica.
9
Codificación de la Estructura Mientras en C#
Sintaxis Ejemplo
//Acciones Posteriores . . .
Otro Ejemplo
...
//Acciones previas
n=0;
while(n !=5) {
Console.Write("Adivine el numero:");
n = Console.ReadLine();
}
Console.Write("Felicidades Adivinó!!!"); //Acciones posteriores . . .
10
Es de aclarar que si el cuerpo del ciclo está formado por solo una acción no se coloca las
llaves; solo en el caso que sean dos o más acciones, se colocarán las llaves. Observe
también que la línea donde va el while no lleva. Además Un bucle while se puede
terminar cuando una instrucción break, goto, return o throw, que transfiere el control
fuera del bucle. Para pasar el control a la siguiente iteración sin salir del bucle, use la
instrucción continue. Para uso académico de la asignatura no se aplicará ninguno de
estos últimos.
Ejemplo No. 1: En la primera parte aplique la metodología para resolver problema sin
módulos, con el fin de conocer la estructura mientras. Luego aplique la metodología
modular para el siguiente:
a. Variables de Salida:
11
b. Variables de Entrada:
c. Restricciones:
cantNum >0
d. Procesos:
Lo que haremos es leer la cantidad de números que vamos a imprimir y verificar que
cumpla la restricción; luego iniciar con num=1; imprimirlo y aumentarle 1, mientras
num sea menor o igual que cantNum.
Leer cantNum
¿ cantNum >0?
Si: Inicialmente num=1
Mientras num <= cantNum
Imprimir num
num= num + 1
NO: Imprimir “Error en datos”
e. Variables de Proceso:
No se ha utilizado.
Diseño de la solución.
Codificación.
/* *Programa que genera cantNum numeros enteros positivos, iniciando de 1 * */
using System;
namespace ImprimeNumerosPositivos
{
class Program
{
public static void Main(string[] args)
{
//declaracion de variables
int cantNum, num=1;
//Entrada de Datos
Console.WriteLine("Cuantos números quiere imprimir (positivo)?");
cantNum = int.Parse( Console.ReadLine() );
14
II. Análisis / Diseño Jerárquico Modular Diseño de la Solución
Pseudocódigo (Flujograma ver ANEXO 1-B)
V. Codificación.
/* *Programa que genera cantNum numeros enteros positivos, iniciando de 1 * */
using System;
namespace ImprimeNumerosPositivos
{
class Program
{
public static void Main(string[] args)
{
//declaracion de variables
int cantNum, num=1;
//Entrada de Datos
Console.WriteLine("Cuantos números quiere imprimir (positivo)?");
cantNum = int.Parse( Console.ReadLine() );
15
imprimirEnteros(cantNum, num);
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
return;
}
}
}
16
Anexos
17