Title: CICLOS por Profesora Lillian Bras
1CICLOSpor Profesora Lillian Bras
2Ciclos
- Un ciclo es una estructura de control para
repetir una o más instrucciones. - Se le llama cuerpo del ciclo al grupo de
instrucciones que se repiten. - La ejecución del cuerpo del ciclo es controlada
por una expresión lógica.
3Ciclos
- La evaluación de la expresión lógica puede estar
antes o después del cuerpo del ciclo. - Los ciclos que tienen la evaluación de la
expresión lógica antes del cuerpo se conocen como
pre-test loops y los que la tienen después se
conocen como post test loops.
4Pre-Test Loops en Java
While
Controlado por contador o evento (respuesta o
sentinela).
For
Controlado por contador
4
5Flujograma de Ciclo while
6Ciclo while
- La sintáxis del ciclo while es como sigue
- while(condition)
- //loop body
- statements
-
- Como puede ver la condición es evaluada al
principio, antes de ejecutar el cuerpo del ciclo. - Al evaluar la condición, si ésta es cierta, se
ejecuta el cuerpo del ciclo y si es falsa, se
procede a la siguiente instrucción después del
ciclo. - Decimos que un while se ejecuta de 0 a n veces ya
que cabe la posibilidad que la primera vez la
condición sea falsa y el ciclo no se ejecute ni
siquiera una vez.
7Un ejemplo de while
x1
True
Display
x x 1
xlt10
// En Java int x 1 while (x lt 10)
System.out.println() x x 1
False
8Un ciclo que no se ejecuta
- El siguiente es un ejemplo de un ciclo que se
ejecuta 0 veces - int x 1
- while(x gt 10)
- System.out.println()
- x x 1
-
- El cuerpo del ciclo nunca se ejecuta ya que la
condición es falsa la primera vez que se evalúa.
9Ciclos...
- La mayor parte de las veces la condición que se
utiliza para controlar un ciclo depende del valor
de una variable y a ésta la llamamos variable de
control. - Para que un ciclo sea diseñado correctamente
debemos - Inicializar la variable de control correctamente
antes del ciclo - Usar una expresión lógica adecuada para evaluar
la variable de control - Actualizar la variable de control dentro del
ciclo.
10En Java
- int x 1 //Inicialización de variable de
control x - while(x lt 10) //Evaluación de la variable de
control -
- System.out.println()
- x x 1 //Actualización de la variable de
control
11Ciclos controlados por un contador
- Cuando el cuerpo se debe repetir un número
específico de veces decimos que el ciclo está
controlado por un contador. - En este caso la variable de control trabaja
contando las veces que se ejecuta el ciclo.
12Ciclos Infinitos
- Si dentro del ciclo no hay una instrucción que
logre que en algún momento la condición sea
falsa, tendremos un ciclo infinito. - Por ejemplo si en el ejercicio anterior
olvidamos incrementar x, ocurre un ciclo
infinito - int x 1
- while (x lt 10)
- System.out.println()
- // La x SIEMPRE será menor o igual a 10
- Si se nos olvidan las llaves como en el siguiente
ejemplo podemos obtener un ciclo infinito - int x 1
- while (x lt 10)
- System.out.println()
- x x 1 // Esta instrucción NO es parte
del ciclo -
-
13Enunciados en bloque en los ciclos
- Como usted ya sabe, las llaves se utilizan para
agrupar un número de instrucciones para que sean
ejecutadas en bloque. - Igual que en los if, en el ciclo while solo hace
falta las llaves si el cuerpo del ciclo contiene
mas de una instrucción. - Esto implica que si se olvida incluir las llaves
y queríamos que se ejecutaran más de una
instrucción como cuerpo del ciclo, sólo se va a
ejecutar una.
14Flujograma para acumular la suma de 10 números
usando ciclo controlado por contador
sum 0.0
count 1
countcount1
sum sum num
countlt10
Display Enter a number
Get num
T
F
15en Java
- //Ejemplo para sumar 10 números entrados
- // por el teclado
- Scanner keyboard new Scanner(System.in)
- double num, sum 0.0
- int count 1
- while (count lt 10)
- System.out.print("Enter a number ")
- num keyboard.nextDouble()
- sum sum num
- count count 1
-
- System.out.println("The sum is " sum)
16Acumuladores de suma
- Un acumulador de suma es una variable donde se
van sumando valores utilizando la suma anterior. - La variable que se va a usar para acumular la
suma se tiene que inicializar en 0 o el primer
valor a ser sumado. - La instrucción que logra este proceso es una
instrucción de asignación donde la variable que
acumula aparece en los dos lados del operador de
asignación. Por ejemplo - sum sum num
- En Java podemos usar el operador compuesto de
para acumular. Por ejemplo - sum num
17Validación
- El proceso de asegurarse que el usuario entre un
dato válido se conoce como validación.
18Validación
Display Enter a positive number
Get num
Get num
num lt 0
T
Display Invalid number.
Display Enter a positive number
F
19En Java
- System.out.print("Enter a positive number )
- number keyboard.nextInt()
- // Validate the input.
- while ( number lt 0 )
- System.out.println("Invalid number.)
- System.out.print("Enter a positive number
") - number keyboard.nextInt()
-
20Otro Ejemplo de Validación de datos
- Ejemplo en Java
- System.out.print("Enter a number in the "
- "range of 1 through 100 ")
- number keyboard.nextInt()
- // Validate the input.
- while (number lt 1 number gt 100)
- System.out.println("That number is
invalid.") - System.out.print("Enter a number in the "
- "range of 1 through 100 ")
- number keyboard.nextInt()
-
21Ciclo controlado por variable lógica (Flag)
- //Ciclo controlado por bandera
- countGoodReadings 0
- int thisBP
- boolean isSafe true // Inicialización de
bandera - while (isSafe)
- System.out.print("Enter blood pressure )
- thisBP keyboard.nextInt()
- if (thisBP gt 200)
- isSafe false //Actualizar bandera
- else
- countGoodReadings
-
22Ciclo controlado por respuesta
Display Tiene un dato para entrar?
Get respuesta
Get respuesta
True
respuesta S Or respuesta s
Entrar y procesar Dato
Display Tiene otro dato para entrar?
False
23Ciclo controlado por respuesta
- Se le pregunta al usuario antes de la entrada de
cada dato si tiene algún dato para entrar. - Duplica la entrada de datos ya que antes de cada
dato hay que entrar una respuesta de S o Y además
del dato. - La variable de control es de tipo caracter pues
es la variable donde se recoge la respuesta.
24Ciclos controlados por un evento
- Cuando algún suceso durante la ejecución del
cuerpo del ciclo debe lograr la terminación del
mismo decimos que es un ciclo controlado por un
evento. - Un ejemplo de este tipo de ciclo es el ciclo
controlado por un valor centinela.
25Centinela
- Centinela valor en la lista de datos que indica
el final de la entrada de datos. - Debe ser un valor que no pueda confundirse con un
valor real, pero del mismo tipo. - Debe informarse al usuario cual es el valor que
va a usarse como centinela. - Se utiliza cuando no se puede determinar cuantos
datos se van a entrar o leer.
26Ciclo Controlado Por Centinela
- Requiere una lectura(input) antes del ciclo
(priming read) - Requiere una lectura(input) dentro del ciclo, al
final del cuerpo.
27- Ejemplo de la Técnica del Centinela
- Leer y sumar una cantidad indefinida de
- medidas de presión sanguínea
- int total 0
- int thisBP
- Scanner keyboard new Scanner(System.in)
- //Inicialización de la variable de control por
lectura - System.out.print(Enter a blood pressure or -1 to
stop ) - thisBP keyboard.nextInt() // Lectura primaria
-
- while (thisBP ! -1) // Evaluación para
centinela -
- total total thisBP
- System.out.print(Enter a blood pressure or
-1 - to stop )
- thisBP keyboard.nextInt() // Lectura de
actualización
28Otro ciclo for
- El ciclo for evalúa la condición antes de
ejecutar el cuerpo del ciclo, por esto es también
un pretest loop. - Este tipo de ciclo le permite al programador
inicializar la variable de control, evaluar la
condición y actualizar la variable de control en
la misma línea( el encabezado del for). - Típicamente la variable de control de un for es
un contador. - Este ciclo es equivalente a la estructura de un
ciclo while controlado por un contador. - La sintáxis del for es la siguiente
- for(initialization test update)
- statement(s)
29Los tres componentes del for
- Inicialización
- La sección de inicialización permite que el ciclo
inicialize su propia variable de control. - Después de esta va un punto y coma.
- Las variables declaradas en esta sección solo
pueden ser utilizadas dentro del for. - Está permitido inicializar mas de una variable en
esta sección. - La segunda sección es la de la evaluación de la
variable de control del for. De ser esta falsa el
cuerpo del for no se ejecuta, igual que en el
caso del while.(Después de esta sección también
va un punto y coma.)
30Los tres componentes del for
- Actualización
- La última sección o componente es la
actualización de la variable de control - Esta sección se utiliza típicamente para
incrementar o decrementar los contadores
declarados en la sección de inicialización. - Esta sección se ejecuta al final, después del
cuerpo y antes de regresar a evaluar la variable
de control. - En esta sección también se pueden actualizar
múltiples variables - Se debe evitar el actualizar la variable de
control dentro del cuerpo del ciclo, para esto
está la sección de actualización en el encabezado
del for.
31Flujograma del for
Inicialización de variable de control
for (inicializacion evaluación actualización)
// cuerpo del ciclo
32Ejemplo de For
- public class UserSquares
- public static void main(String args)
- int number // Loop control variable
- int maxValue // Maximum value to display
- Scanner keyboard new Scanner(System.in)
-
- System.out.println("I will display a table of
numbers" - " and their squares.")
-
- System.out.print("How high should I go? ")
- maxValue keyboard.nextInt()
- System.out.println("Number Number
Squared") - System.out.println("-----------------------")
- for (number 1 number lt maxValue
number) - System.out.println(number "\t\t
number number) -
-
33Otro ejemplo de for
- public class TotalSales
- public static void main(String args)
- int days // The number of days
- double sales // A day's sales
figure - double totalSales // Accumulator
- String input // To hold the user's
input - DecimalFormat dollar new
DecimalFormat(",0.00") - // Get the number of days.
- input JOptionPane.showInputDialog("For
how many days do you have " - "sales figures?")
- days Integer.parseInt(input)
- totalSales 0.0 // Set the accumulator to
0. - // Get the sales figures and calculate a
running total. - for (int count 1 count lt days count)
- input JOptionPane.showInputDialog("Ente
r the sales for day "
34Ciclos anidados
- Igual que podemos anidar los ifs también podemos
anidar los ciclos. - Ciclos anidados significa que hay un ciclo dentro
de otro, cuando esto sucede el ciclo interior se
ejecuta completo( todas sus iteraciones) para
cada iteración del ciclo exterior. - El siguiente es un ejemplo de ciclos for
anidados - for(int i 1 i lt 5 i)
- System.out.println(i i)
- System.out.print(j )
- for(int j 1 j lt 3 j)
- System.out.print(j)
- System.out.println()
-
- Fíjese que, por cada vez que se ejecuta el cuerpo
del ciclo externo, se ejecuta 3 veces el cuerpo
del ciclo interno.
35Las instrucción de break y continue
- La instrucción de break termina por completo con
la ejecución de un ciclo en forma anormal. - El uso del break rompe con las normas y
mecanismos adecuados para controlar un ciclo y no
se considera una forma adecuada de terminar un
ciclo. - La instrucción continue ocasiona que se termine
la ejecución de la iteración del ciclo que se
está llevando acabo y que se continúe con la
siguiente iteración. - Igual que sucede con la instrucción break, puede
hacer que el código sea mas difícil de entender
y depurar por esto es aconsejable limitar su uso
a situaciones muy particulares.
36Ciclo do-while
- La estructura de repetición do-while es un
ejemplo de ciclo post-test . - En este tipo de ciclo, el cuerpo se ejecuta y
luego se evalúa la condición. - La sintáxis en java para este tipo de ciclo es
como sigue - do
- statement(s)
- while (condition)
- Note el punto y coma después de los paréntesis y
la llave de cerrar antes de la palabra while
37Flujograma de ciclo do-while
38Ejemplo de técnica de respuesta con do - while
- public class TestAverage1
-
- public static void main(String args)
-
- int score1, score2, score3 // Three test
scores - double average // Average
test score - char repeat // To hold 'y'
or 'n' -
- System.out.println("This program calculates
the " - "average of three test
scores.") - // Create a Scanner object for keyboard
input. - Scanner keyboard new Scanner(System.in)
-
-
39- // Get as many sets of three test scores as the
user wants. - do
- // Get the three test scores in this
set. - System.out.print("Enter score 1 ")
- score1 keyboard.nextInt()
- System.out.print("Enter score 2 ")
- score2 keyboard.nextInt()
- System.out.print("Enter score 3 ")
- score3 keyboard.nextInt()
-
- // Calculate and print the average test
score. - average (score1 score2 score3) /
3.0 - System.out.println("The average is "
average) - System.out.println()
- // Does the user want to average another
set? - System.out.println("Would you like to
average " - "another set of test
scores?") - System.out.print("Enter Y for yes or N
for no ")
Recuerde el punto y coma
40Validación while versus do-while
Usando while
System.out.print("Enter number in the range of 1
through 100 ") number keyboard.nextInt() whi
le (number lt 1 number gt 100)
System.out.println("That number is invalid.")
System.out.print("Enter number in the range of 1
through 100 ) number keyboard.nextInt()
Usando do-while
- do
- System.out.print("Enter number in the range of 1
through 100 ") - number keyboard.nextInt()
- if (number lt 1 number gt 100)
- System.out.println("That number is
invalid.") - while (number lt 1 number gt 100)
41Qué tipo de ciclo usar
- while
- Use siempre que quiera cubrir la posibilidad de
que el ciclo no se ejecute si la condición es
falsa de entrada - Si va a usar la técnica del centinela
- Puede usarse con técnica de respuesta
- Puede usarse para validar datos entrados
- do-while
- Use siempre que quiera que el ciclo se ejecute
por lo menos una vez - Ideal para técnica de menú
- Puede usarse con técnica de respuesta
- Puede usarse para validar datos entrados
- for
- Use siempre que sepa la cantidad de veces que
quiere que se ejecute el ciclo o que le pueda
preguntar al usuario la cantidad de datos que va
a procesar