Ingeniería en Sistemas Computacionales
Fundamentos de Programación
Tema III | Control de flujo
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Ingeniería en Sistemas Computacionales
Fundamentos de Programación
Tema III| Control de flujo
Competencia de la unidad
Conoce y aplica las estucturas condicionales y
repetitivas en un lenguaje de programación para la
resolución de problemas.
Instituto Tecnológico de León – Ingeniería en Sistemas Computacionales – 2017
3.1 Estructuras
secuenciales Ya hemos dicho en el curso que el orden de las instrucciones
en un programa es clave para producir resultados correctos.
El orden en el que se ejecutan las instrucciones en un
programa es llamado control de flujo.
Existen cuatro tipos de mecanismos para el control de flujo:
• ejecución secuencial,
• llamada a métodos,
• selección e
• iteración.
La mayoría de los programas hace uso de combinaciones de los
4 mecanismos.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Por ahora, nuestros programas han empleado la ejecución secuencial y
la llamada a métodos.
3.1 Estructuras
secuenciales
La JVM ejecuta la primera instrucción del método main de la clase,
después ejecuta la segunda instrucción del main y continúa
ejecutando las instrucciones de manera secuencial hasta que no haya
más que ejecutar.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Si en el método main, alguna instrucción incluye una llamada a métodos,
las instrucciones de cada método se ejecutan secuencialmente hasta
terminar y retornan el control al punto en el que fueron llamados.
3.1 Estructuras
secuenciales
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.1 Estructuras
secuenciales
En algunos casos no se desea que todas las
instrucciones se ejecuten aunque exista una cierta
secuencia.
A veces algunas instrucciones deberán ejecutarse
sólo para ciertos valores de entrada, pero no para
otros.
Por ejemplo, uno puede contar el número de personas
con tarifa preferente que viajan en el Sistema
Integrado de Transporte de la ciudad de León, Gto. en
un día específico - La cuenta aplica solamente para
quienes si tienen tarifa preferencial
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Toca el turno de utilizar mecanismos de selección,
3.2 Estructuras que nos aportarán formas de probar el cumplimiento
selectivas: simple,
doble y múltiple. de ciertas condiciones
y las instrucciones seleccionadas para ejecutarse
cuando las condiciones son ciertas
y también cuando no lo son.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Para implementar la selección, Java proporciona
un número de alternativas:
3.2 Estructuras
selectivas: simple,
doble y múltiple. • if
• If else
• if else if
• el operador condicional ( ?: )
• y el switch.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Las estructuras selectivas apoyan la toma de
3.2 Estructuras decisiones y están basadas en
selectivas: simple, comparaciones a realizar para determinar el
doble y múltiple.
valor de una expresión evaluable.
Por lo general, a una expresión que se evalúa
para efectos de decisión le llamamos
condición.
Las condiciones son expresiones booleanas
que al ser evaluadas toman los valores true y
false.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.2 Estructuras
Recordemos que Java proporciona operadores
selectivas: simple, lógicos, relacionales y de igualdad para
doble y múltiple. evaluar si una expresión es verdadera o falsa.
Java también permite que las expresiones
booleanas se mezclen con las sentencias de
selección ya mencionadas (if, else if , etc.),
para transferir el control a una parte del
programa dependiendo del resultado de la
prueba.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Una operación común en la toma de decisiones
consiste en comparar si dos variables o valores del
mismo tipo de datos son iguales o no.
3.2 Estructuras
selectivas: simple,
doble y múltiple. if (nombre == null)
En la línea anterior estamos probando si el
identificador nombre es igual al valor constante
null.
Java proporciona los operadores == y != que son
operadores binarios (se llaman así porque
necesitan dos operandos). Los operandos pueden
ser expresiones que al ser evaluadas, producen un
tipo de datos numérico, booleano o un objeto.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El resultado de una expresión compuesta por un
operador relacional junto con sus dos operandos, es un
valor booleano, esto es, aquel que sólo puede ser true
3.2 Estructuras o false.
selectivas: simple,
doble y múltiple.
Por ejemplo, si una variable llamada edad, cuyo valor
es igual a 18, forma parte de alguna expresión lógica,
produce resultados según el caso:
( edad == 18 ) produce resultado true
( edad != 18 ) produce resultado false
Un error muy común consiste en comparar utilizando un solo símbolo de igual
edad = 18
Recuerde que usamos = para asignar y == para comparar.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
La siguiente condición puede emplearse para
eliminar datos de estudiantes que no están
3.2 Estructuras en primer semestre.
selectivas: simple,
doble y múltiple.
semestre != 1
La siguiente condición puede emplearse en
un programa para determinar si el usuario
quiere ejecutar de nuevo alguna
funcionalidad.
continuar == ‘s’
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Aunque los operadores de igualdad pueden utilizarse para
comparar referencias a objetos, no pueden utilizarse
3.2 Estructuras libremente para comparar objetos.
selectivas: simple,
doble y múltiple.
String contraseña = “1234”;
String clave = [Link](“Contraseña”);
if ( [Link](contraseña) ){
}
Así comparamos dos Strings,
Recuerde que un String es un objeto.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Recuerde que también para comparar valores
pertenecientes a tipos de datos primitivos, Java
3.2 Estructuras
selectivas: simple, proporciona operadores relacionales.
doble y múltiple.
Son operadores binarios y sus operandos
deben ser expresiones que al ser evaluadas,
produzcan un tipo de datos numérico.
Los operadores relacionales no pueden ser
utilizados con expresiones booleanas ni con
objetos.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Por ejemplo, si una variable llamada edad de tipo int
que contiene el valor 18 es evaluada, entonces:
3.2 Estructuras
selectivas: simple,
doble y múltiple. la expresión ( edad < 18 ) evaluará a false
la expresión ( edad <= 18 ) evaluará a true
la expresión ( edad > 18 ) evaluará a false
la expresión ( edad >= 18 ) evaluará a true
La expresión siguiente prueba si una variable llamada
calificaciónExamen es por lo menos de 90
calificaciónExamen >= 90
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Una operación común en un programa consiste
en probar si una combinación de condiciones
3.2 Estructuras es verdadera o falsa. Para esas operaciones,
selectivas: simple, Java proporciona operadores lógicos.
doble y múltiple.
Recuerde que los operadores lógicos del
recuadro rojo corresponden a los operadores
lógicos booleanos Not, And y Or. Estos
operadores toman expresiones booleanas
como operandos.
Operadores
Lógicos
! Not
&& AND
| | OR
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Una expresión booleana puede tomar cualquier
combinación válida de variables booleanas; una
3.2 Estructuras
selectivas: simple,
condición que utilice operadores relacionales que
doble y múltiple. produzcan true o false; o una llamada a un método
que devuelva un valor booleano.
El operador ! – Not toma una expresión booleana
como operando e invierte su valor.
• Si el operando es true, el resultado será false;
• y si el operando es false, el resultado será true.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Recordando lo aprendido en Matemáticas Discretas:
3.2 Estructuras
selectivas: simple, El operador && (And) toma dos expresiones
doble y múltiple. booleanas como operandos; si ambos operandos
son true, entonces el resultado será true; en
cualquier otra combinación será false.
El operador || (Or) también toma dos expresiones
booleanas como operandos. Si ambos operandos
son false, entonces el resultado será false; en caso
contrario, será true.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.2 Estructuras
selectivas: simple,
doble y múltiple.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Comparación incorrecta de x, y, z (error común)
Suponga que tenemos tres enteros: x, y, z y
3.2 Estructuras queremos probar si x es menor, tanto a y como a z.
selectivas: simple,
doble y múltiple.
Un error común consiste en expresar la condición de
esta forma:
x < y && z
Dado que z no es una variable booleana, la sentencia
anterior generará un error de compilación, lo correcto
sería escribirla como:
x < y && x < z
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Expresiones equivalentes
Suponga que tenemos dos variables booleanas
3.2 Estructuras llamadas flag1 y flag2 y que queremos probar si al
selectivas: simple,
doble y múltiple.
menos una de las dos es false. A continuación,
algunas expresiones equivalentes para hacerlo:
// flag1 es false o flag2 es false
( flag1 == false ) || ( flag2 == false )
// !flag1 es true o !flag2 es true
! flag1 || ! flag2
// ni flag1 ni flag2 son true
! ( flag1 && flag2 )
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Leyes de DeMorgan
3.2 Estructuras
Gracias al trabajo del matemático británico Augustus
selectivas: simple, DeMorgan, tenemos un conjunto de reglas que nos ayudan
doble y múltiple. a desarrollar expresiones que son equivalentes.
DeMorgan, conocido ampliamente por su trabajo en el
álgebra booleana y en la teoría de conjuntos, desarrolló
lo que hoy conocemos como leyes de DeMorgan, que son:
1) NOT( A AND B ) = ( NOT A ) OR ( NOT B )
2) NOT( A OR B ) = ( NOT A ) AND ( NOT B )
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Leyes de DeMorgan
3.2 Estructuras
selectivas: simple,
doble y múltiple. En Java, además, utilizando la primera ley, tenemos:
!( a && b ) es equivalente a !a || !b
Utilizando la segunda ley tenemos:
!( a || b) es equivalente a !a && !b
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Estructura selectiva simple
3.2 Estructuras La estructura selectiva es adecuada cuando en un
selectivas: simple, programa se desea que una operación aplique a un
doble y múltiple.
conjunto de datos, pero para otros no.
Para situaciones como esta, utilizamos una
sentencia condicional simple:
if ( condición )
{
Lo que está entre llaves es el bloque que se
ejecutará cuando la condición sea verdadera
}
siguiente sentencia
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El bloque verdadero
falso
puede contener una o más Condición
3.2 Estructuras sentencias que sólo se
selectivas: simple,
ejecutan si la condición es
doble y múltiple. verdadero
verdadera.
Después de que se ejecute
el bloque verdadero, se Bloque
ejecuta la siguiente verdadero
instrucción posterior a la
sentencia if.
Siguiente
sentencia
Si el bloque es de una sola sentencia no
necesita estar entre llaves.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Si la condición es
falso
Condición false, el bloque
3.2 Estructuras
selectivas: simple, verdadero no se
doble y múltiple. ejecuta y el control en
verdadero el flujo de la ejecución
se transfiere a la
siguiente sentencia.
Bloque
verdadero Nuevamente, si el
bloque verdadero
consiste de una sola
sentencia, las llaves no
Siguiente son necesarias.
sentencia
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Elaboremos un programa para capturar el valor de una calificación y de
los puntos extra en un curso. El programa deberá imprimir la
calificación total.
3.2 Estructuras
selectivas: simple,
doble y múltiple.
Modifique el programa para que las calificaciones estén entre 0 y 100
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Observe que no hay punto y coma al término de la
condición en una sentencia if. Si usted coloca un
3.2 Estructuras
selectivas: simple, punto y coma después de la condición, como en la
doble y múltiple. siguiente sentencia:
cuidado
if ( calificación >= 70 ) ;
[Link]( “Aprobado” );
El compilador no generará error, pero considerará que
la sentencia if es vacía, es decir, no contiene ninguna
instrucción, por lo que el mensaje Aprobado no
depende de la condición que se está probando.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Estructura selectiva doble
La segunda forma de uso de una sentencia if ocurre cuando
el procesamiento de datos cae en dos categorías
mutuamente excluyentes, condicionando la ejecución de
3.2 Estructuras
instrucciones diferentes para cada categoría.
selectivas: simple,
doble y múltiple.
Para esas situaciones, utilizamos la sentencia if / else con el
siguiente patrón:
if ( condición )
{
bloque verdadero
}
else
{
bloque falso
}
siguiente sentencia
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Estructura selectiva doble
verdadero falso
3.2 Estructuras
Condición
selectivas: simple,
doble y múltiple.
Bloque Bloque
verdadero falso
Siguiente
sentencia
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.2 Estructuras
selectivas: simple,
doble y múltiple.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Estructura selectiva múltiple
¿Qué pasa cuando necesitamos aplicar operaciones a datos
que caen en más de dos categorías mutuamente excluyentes?
3.2 Estructuras
Java proporciona la sentencia if / else if
selectivas: simple,
doble y múltiple.
if( condición 1 )
{
bloque verdadero para la condición 1
}
else if ( condición 2 )
{
bloque verdadero para la condición 2
}
...
else if ( condición n )
{
bloque verdadero para la condición n
}
else
bloque falso para todas las condiciones false
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Condición verdadero
1
falso Bloque
true
3.2 Estructuras Condición
verdadero
selectivas: simple, 2
doble y múltiple.
falso Bloque
true
Condición verdadero
n
falso Bloque
true
Bloque
falso
Siguiente
sentencia
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.2 Estructuras
selectivas: simple,
doble y múltiple.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Para ilustrar el uso de sentencias
condicionales secuenciales,
observemos el problema de
encontrar el más pequeño de
3.2 Estructuras tres números que se ingresan
selectivas: simple, desde el teclado.
doble y múltiple.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Toca turno a las condicionales anidadas.
Generar un número aleatorio entre 1 y 10 para luego intentar adivinarlo.
3.2
Estructuras
selectivas:
simple,
doble y
múltiple.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Comparando Strings
Dado que los String son objetos, se debe utilizar un
método para compararlos. El método es equals():
3.2 Estructuras
selectivas: simple,
doble y múltiple.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Adicionalmente, la clase String proporciona otros dos métodos,
equalsIgnoreCase y compareTo.
El método equalsIgnoreCase es similar al método equals, excepto
que no hace diferencia entre mayúsculas y minúsculas.
3.2 Estructuras
selectivas: simple,
doble y múltiple.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El método compareTo devuelve un valor entero en lugar de un
valor booleano después de comparar dos String en orden
lexicográfico. Si el objeto String es mayor que su argumento, se
regresa un valor positivo.
3.2 Estructuras
selectivas: simple,
doble y múltiple.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El método compareTo devuelve un valor negativo si el objeto
String es menor que su argumento.
3.2 Estructuras
selectivas: simple,
doble y múltiple.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El método compareTo devuelve cero si los dos String son
iguales.
3.2 Estructuras
selectivas: simple,
doble y múltiple.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Se puede utilizar el operador condicional ( ? : ) en expresiones.
Su sintaxis es:
3.2 Estructuras
selectivas: simple, ( condición ? Expresión1 : Expresión2 )
doble y múltiple.
El valor de una expresión que contiene al operador condicional
está determinado por la evaluación de la condición, que
corresponde a cualquier expresión que evalúa a true o a false.
Si la condición se evalúa a true, la Expresión1 será el valor
resultante de la expresión, por ello la expresión1 se asignará a
la variable; si la condición se evalúa a false, la Expresión2
será el valor resultante de la expresión, el cual será
almacenado en la variable.
variable = ( condición ? Expresión1 : Expresión2 );
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.2 Estructuras
selectivas: simple,
doble y múltiple.
variable = ( condición ? Expresión1 : Expresión2 );
Es equivalente a:
if( condición )
variable = Expresión1;
else
variable = Expresión2;
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Estructura selectiva múltiple (switch)
Esta sentencia puede utilizarse en lugar de sentencias del tipo if /
else if para el proceso de selección cuando la condición consiste en
3.2 Estructuras la comparación de constantes enteras (byte, short, int) o caracteres
selectivas: simple, ( char ). En versiones recientes de Java se soporta el tipo String.
doble y múltiple.
switch ( expresión )
{
case constante1 : sentencia1;
...
break;
case constante2 : sentencia1;
...
break;
...
default :
sentencia1;
...
}
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Cambiar el menú implica cambiar el switch
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
La necesidad de repetir instrucciones
El trabajo principal de un cajero en una tienda consiste en
determinar el total a pagar por una compra.
El cajero inicia con un total a pagar en $0.00,
3.3 Estructuras
iterativas: repetir, • toma un producto y lo ingresa al sistema para que se registre
mientras, hasta y el precio y un posible descuento o impuesto adicional;
desde.
• luego, si existe otro producto en la selección del cliente, el
cajero toma el segundo producto (y el tercero y los demás
hasta que no haya más) y se realiza un proceso similar al del
paso anterior.
En cada pasada de un producto se va ajustando el total a pagar.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El cajero continuará con un proceso similar
para cada cliente, es decir, atenderá hasta
que no haya más productos por ingresar a la
cuenta.
3.3 Estructuras
iterativas: repetir, Al final, con la confirmación del cliente,
mientras, hasta y afirmando que no desea llevar algo más, el
desde.
cajero indica el total a pagar, recibe el dinero,
entrega el comprobante correspondiente por la
compra y en su caso, el cambio o el
documento utilizado para cerrar la compra
(tarjeta de crédito, identificaciones, etc.).
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El trabajo del cajero consiste en la preparación del
cobro, del procesamiento de cada producto a
ingresar a la cuenta, de informar el balance al final, y
posteriormente de atender a un nuevo cliente.
En computación, frecuentemente realizamos
3.3 Estructuras
tareas que siguen el mismo patrón:
iterativas: repetir,
mientras, hasta y 1. Inicializar valores
desde.
2. Procesar elementos uno a uno
3. Reportar los resultados.
4. Repetir todo nuevamente.
El tipo de flujo que los programadores emplean para
completar tareas de este patrón es llamado
repetición, iteración o looping.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Si intentáramos describir algorítmicamente una parte
del trabajo del cajero, tendríamos algo como:
1.- Inicio
2.- Iniciar el cobro poniendo total a cero
3.- Si hay un producto a procesar
3a.- registrar el precio, acumular la cuenta
3.3 Estructuras 4.- Si hay un producto a procesar
iterativas: repetir,
mientras, hasta y
4a.- registrar el precio, acumular la cuenta
desde. 5.- Si hay un producto a procesar
5a.- registrar el precio, acumular la cuenta
6.- Cuando no haya más productos Aquí hay un patrón
solicitar el cálculo del total
7.- Decirle al cliente el total a pagar
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Donde existe un patrón que se repite, está
latente la posibilidad para incluir una instrucción
que desde el diseño, permita la repetición de un
conjunto de instrucciones.
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
Ahora bien, cuando no se conoce de
desde. antemano la cantidad de repeticiones del
patrón, la instrucción diseñada para los
lenguajes es conocida como ciclo while.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
En un ciclo while se procesan instrucciones
mientras una condición se esté cumpliendo, por
ejemplo, repetiremos el cobro mientras haya
productos del cliente.
3.3 Estructuras
iterativas: repetir,
Simplemente procesamos cada entrada, una a la
mientras, hasta y vez, hasta que una señal – un evento – nos dice
desde. que no hay más entradas a procesar.
Esto es llamado ciclos controlados por eventos.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
En el caso del trabajo del cajero, la señal para
terminar de acumular en la cuenta del cliente,
es que no haya más productos que el cliente
desee comprar.
3.3 Estructuras
iterativas: repetir, Normalmente, la señal para terminar la
mientras, hasta y
desde. entrada de datos, es un valor especial que el
usuario introduce al sistema, llamado valor
centinela, o bien, puede ocurrir cuando se
alcance el final de los datos de entrada.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El ciclo while tiene la siguiente sintaxis:
Nuevamente, si el
ciclo solo tiene
while ( condición ) una instrucción a
{ repetir, las llaves
no son necesarias.
// procesamiento de datos
3.3 Estructuras // cuerpo del ciclo
iterativas: repetir, }
mientras, hasta y
desde.
// siguientes instrucciones post ciclo
La condición es una expresión booleana, esto es, cualquier
expresión que al ser evaluada resulta en true o en false.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Cuando toca turno de
ejecución a la sentencia que
contiene al ciclo while, lo
primero que ocurre es la
evaluación de la condición.
3.3 Estructuras
Si la condición es evaluada como true, entonces se
iterativas: repetir, ejecutan las sentencias del cuerpo del ciclo, para que a
mientras, hasta y su término, se reevalúe la condición, que, si produce true
desde. como resultado, el cuerpo del ciclo se vuelve a ejecutar.
La repetición continúa hasta que la condición del ciclo
se evalúa como false , en ese evento, el cuerpo del ciclo
ya no se ejecuta y se continúa con la siguiente
instrucción posterior al loop.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Nuevamente, las llaves solo son necesarias
cuando el cuerpo del ciclo tiene más de
una instrucción por ejecutar.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.3 Estructuras
iterativas: repetir,
mientras, hasta y Cualquier variable definida dentro del cuerpo
desde.
del ciclo while ocasiona que la variable sea
reconocida dentro de todo el cuerpo del ciclo y
sólo en ese lugar, por lo que no podrá ser
utilizada fuera de ahí.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Inicialización de
Estructura general variables
del ciclo while
falso
Condición
3.3 Estructuras
iterativas: repetir, verdadero
mientras, hasta y
desde.
Cuerpo del
ciclo
Procesar
resultados
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Utilizando una contrucción while, el pseudocódigo para la tarea
del cajero podría parecer como:
Asignar $0.00 a total
Preguntarle al cliente si desea pagar
Si responde que sí
Asignar true a clienteConProductos
En caso contrario
Asignar false a clienteConProductos
3.3 Estructuras
iterativas: repetir, while ( clienteConProductos == true )
mientras, hasta y {
desde. Tomar producto no registrado como cobrado
Registrar el precio de ese producto
Acumular el precio en la cuenta
Preguntarle al cliente si desea pagar algo más
Si responde que no
Asignarle false a clienteConProductos
}
// al llegar aquí, no hay más productos
imprimir el total de la cuenta
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
También es posible construir un ciclo while en
el que la condición nunca sea false.
El resultado es un ciclo que nunca termina,
también conocido como ciclo infinito.
3.3 Estructuras
iterativas: repetir, Una forma de asegurar que la condición pueda
mientras, hasta y
desde. llegar a ser false, consiste en incluir en el
código una sentencia de actualización que
cambie apropiadamente a la variable que se
prueba dentro de la condición del while (o una
sentencia break que detenga el ciclo).
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Un error común de lógica que puede ocasionar
que el ciclo funcione de manera extraña,
consiste en colocar un punto y coma después
de la condición:
3.3 Estructuras while ( condición ) ;
iterativas: repetir,
mientras, hasta y
desde. Un punto y coma inmediatamente después de
la condición, indica un cuerpo vacío para el
ciclo – un cuerpo vacío es aquel que no
tiene ninguna sentencia.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El ciclo while se utiliza cuando no se conoce
de antemano la cantidad de veces que iterará
el ciclo.
Por eso es que confiamos en una señal, o
3.3 Estructuras evento, que nos indique cuando se han
iterativas: repetir, procesado todos los datos.
mientras, hasta y
desde.
Si al ingresar los datos desde consola, no
conocemos la cantidad de datos que se
ingresarán, podemos definir un valor especial,
llamado valor centinela.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Introducción de datos por el usuario
Revisemos la forma general de uso del while para
procesar datos de entrada del usuario.
inicializar variables
3.3 Estructuras leer el primer dato
iterativas: repetir,
mientras, hasta y while ( el dato no sea igual al centinela )
desde.
{
procesar el dato
leer el siguiente dato // ¿actualizar centinela?
}
reportar resultados
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Lectura de datos desde un archivo de texto
La clase Scanner nos permite leer con relativa
facilidad datos que se encuentren dentro de un
archivo de texto.
3.3 Estructuras La forma general para leer datos desde archivo
iterativas: repetir,
mientras, hasta y
es un poco diferente a la lectura de datos desde
desde. el teclado.
En vez de leer un valor y verificar si es o no igual a
un centinela, lo que haremos es verificar si hay
datos dentro del archivo, si es así, entonces
podremos leer un valor más.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Lectura de datos desde un archivo de texto
Además, no necesitamos imprimir un mensaje para
pedir el ingreso de los datos, lo único que se requiere
es la lectura del siguiente valor existente en el archivo.
El pseudocódigo es:
3.3 Estructuras
iterativas: repetir, inicializar variables
mientras, hasta y
desde. while ( no se haya alcanzado el fin de archivo )
{
leer el siguiente dato
procesar el dato
}
reportar los resultados
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Lectura de datos desde un archivo de texto
Utilizaremos un archivo que contendrá los datos a
procesar, por ello, necesitaremos la clase File, que nos
permitirá construir un objeto para manejar el archivo. El
constructor de la clase File es:
3.3 Estructuras
iterativas: repetir, File ( String pathname )
mientras, hasta y
desde.
El cual construye un objeto de tipo File cuyo nombre está
especificado por el String pathname.
La clase File pertenece al paquete [Link] de manera que
es necesario importarla.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Lectura de datos desde un archivo de texto
La clase Scanner proporciona un método constructor
para la lectura de un archivo de texto.
3.3 Estructuras
iterativas: repetir, La clase Scanner tokeniza el contenido del archivo
mientras, hasta y
desde.
devolviendo los tokens con uno de los métodos next. El
método hasNext( ) devuelve true si la entrada tiene otro
token y false cuando se ha alcanzado el fin del archivo.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
En el ejemplo se leen enteros
desde un archivo llamado
y se imprimen en
pantalla. En la línea 8 se usa el
constructor para convertir el
nombre de archivo
a un formato que pueda ser
procesado como archivo de
almacenamiento.
En la línea 9, asociamos al objeto
construido para el con
el archivo de entrada. Si el
archivo no se encuentra, el
constructor genera la excepción Es posible que se generen excepciones si se encuentran
llamada problemas de lectura en los archivos.
. Java necesita que se reconozca que se pueden generar
excepciones de este tipo, para eso se incluye la frase throws
IOException en la cabecera del main.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Más adelante se aprenderán otras formas de
manejar excepciones. En el ejemplo, la
excepción se produce por no encontrar el
archivo [Link] en la ruta especificada.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El conteo es una operación necesaria cuando se
desea saber el número de elementos que cumplen
con un criterio específico.
Contar es similar a acumular en el sentido de que
3.3 Estructuras necesitamos una variable inicializada a cero; la
iterativas: repetir, diferencia es que en el conteo, a la variable de
mientras, hasta y cuenta sólo se le suma 1 en cada ocasión.
desde.
Suponga por ejemplo, que deseamos contar el
número de estudiantes que reprobaron en un
examen.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Utilizaremos un centinela para poder determinar
el término del ciclo.
iniciar reprobados con cero
leer calificación
3.3 Estructuras while ( calificación diferente a -1 )
iterativas: repetir,
mientras, hasta y {
desde. if ( calificación < 70 )
sumar uno a reprobados
leer calificación
}
imprimir “número de ” + reprobados
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Calcular un promedio es una técnica que combina la acumulación y
el conteo. Utilizamos la acumulación para obtener totales, y
empleamos el conteo para saber cuántos elementos servirán para
calcular promedios.
iniciar total con cero
iniciar contador a cero
leer número
3.3 Estructuras
iterativas: repetir, while( número sea diferente al centinela )
mientras, hasta y {
desde. sumar el número con total y actualizarlo
sumar uno al contador y actualizarlo
leer número
}
calcular promedio según la fórmula total / contador
imprimir el promedio
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Encontrando valores máximos o mínimos
Encontrar el valor máximo dentro de un conjunto de
valores numéricos que se encuentran dentro de un archivo
de texto. Ahora un pseudocódigo simple para encontrar el
máximo:
3.3 Estructuras
...
iterativas: repetir, leer el primer número y suponer que es el máximo
mientras, hasta y mientras haya otro número por leer
desde. {
leer el siguiente número
si el número es mayor que el máximo
hacer que el máximo sea ese número
}
imprimir el número máximo
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Un problema que se presenta en la lectura
de datos de entrada con el uso de la clase
Scanner, ocurre cuando el siguiente
3.3 Estructuras token no concuerda con el tipo de datos
iterativas: repetir,
mientras, hasta y
que se espera.
desde.
Lo anterior genera una excepción del tipo
InputMismatchException que detiene la
ejecución del programa.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
La llamada al método hasNextInt() causa que se active una
interrupción para leer desde el teclado, y en caso de que lo tecleado
no sea un entero, se ejecutará el cuerpo del while.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Lo que estamos haciendo en nuestro
programa es una verificación robusta; ya
que antes aceptar la entrada como válida, se
asegura que el siguiente token concuerde con
3.3 Estructuras
la entrada esperada.
iterativas: repetir,
mientras, hasta y La clase Scanner proporciona los métodos
desde.
hasNext para hacer lo afirmado. El método
hasNext devuelve true si el siguiente token
puede leerse de acuerdo al tipo de datos que
se le especifique.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Por ejemplo, si necesitamos recibir de teclado un
entero, podemos probar si el usuario ha tecleado
caracteres que pueden ser interpretados como un
entero mediante la llamada al método hasNextInt.
Si el método devuelve un valor true, indica que se
3.3 Estructuras
iterativas: repetir, puede realizar una lectura segura utilizando el método
mientras, hasta y nextInt.
desde.
Si el siguiente token no es lo que necesitamos, esto
es, si el método hasNextInt devuelve false, entonces
la lectura de ese valor como int generará la excepción
InputMismatchException.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Si al utilizar hasNextInt se produjera un valor false,
necesitaríamos notificarle al usuario que su entrada no es
adecuada y procederíamos a solicitar el reingreso de la
entrada. Pero antes, tendríamos que quitar los caracteres
que ingresó el usuario.
3.3 Estructuras El método nextLine de la clase Scanner devuelve como
iterativas: repetir, String cualquier token restante en la línea de entrada, ese
mientras, hasta y String debe ser ignorado, lo que actúa como un vaciado –
desde.
flush.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Métodos de la clase Scanner para probar tokens
Métodos de la clase Scanner para probar en el Stream de entrada elegido
Valor de Nombre del método y acción principal
retorno
3.3 Estructuras boolean hasNext( ) Devuelve true si hay un token en la entrada.
iterativas: repetir, boolean hasNextByte( ) Devuelve true si el token puede ser leído como byte.
mientras, hasta y boolean hasNextShort( ) Devuelve true su el token puede ser leído como short.
desde. boolean hasNextInt( ) Devuelve true si el token puede ser leído como int.
boolean hasNextLong ( ) Devuelve true si el token puede ser leído como long.
boolean hasNextFloat( ) Devuelve true si el token puede ser leído como float.
boolean hasNextDouble ( ) Devuelve true si el token puede leerse como double.
boolean hasNextBoolean( ) Devuelve true si el token puede leerse como boolean.
String nextLine( ) Devuelve el resto de la línea de entrada como String.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
La construcción correcta de condiciones para
controlar la iteración puede ser un tanto
intuitiva. El ciclo se ejecutará tantas veces
como la condición sea verdadera.
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
Si deseamos que el ciclo termine,
desde. entonces tenemos que leer un valor que
coincida con el centinela. De modo que la
condición del ciclo debe verificar que el valor
en la entrada del usuario no sea el valor del
centinela.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
En otras palabras, la condición de continuación
del ciclo es el inverso de la condición de
terminación que se escribió en la sentencia del
ciclo.
3.3 Estructuras
iterativas: repetir, Para un ciclo simple controlado por
mientras, hasta y
desde.
centinela, la condición normalmente tiene el
siguiente patrón:
while ( valorEntrada != centinela )
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Elabore un programa para elegir un servicio de
comunicación por celular. Las opciones disponibles
están en el menú.
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Ciclos do while
Otra forma de iteración que es especialmente útil
para validar las entradas del usuario y para
controlar el programa es el ciclo do / while.
3.3 Estructuras La diferencia con el ciclo while, es que en el ciclo
iterativas: repetir,
mientras, hasta y do / while la condición se prueba al final del
desde. ciclo ( en vez de al inicio como en el ciclo while ).
Entonces, mientras que en los ciclos while el
cuerpo del ciclo se puede ejecutar cero o más
veces, en el ciclo do / while el cuerpo del ciclo se
ejecutará una o más veces.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Inicialización de
variables
Cuerpo del
ciclo
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Condición
verdadero
falso
Procesar
resultados
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
A continuación un ejemplo para validar que la entrada del
usuario sea un valor entre 1 y 10. El programa continuará
iterando cuando el valor no se encuentre en ese rango, y
se detendrá cuando sí se encuentre dentro.
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Ciclos for
Cuando se conoce de antemano la cantidad de veces
que se repetirá un paquete de instrucciones, es mejor
utilizar un ciclo controlado por contador, el cual es
mejor conocido como ciclo for.
3.3 Estructuras
El ciclo for está diseñado para ciclos controlados por
iterativas: repetir,
mientras, hasta y contador, esto es, cuando el número de iteraciones
desde. está conocido antes de que inicie el ciclo.
Por ejemplo, es mejor usar ciclos for si desea calcular
el monto a pagar por concepto de nómina de 120
empleados, o bien, imprimir los cuadrados de todos los
números que hay entre el 1 y el 50.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
A continuación, un ejemplo breve de impresión de los números que
hay entre el 0 y el 9.
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
El papel del programa en la realidad consiste en ejecutar una
sentencia [Link]( ) 10 veces. La sentencia imprime
la frase “count = “ seguido del valor de la variable count.
Veamos ahora cómo funciona el ciclo for.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Los paréntesis que van después de la palabra reservada for contienen
lo que llamamos la “expresión del loop ”. Esta expresión del loop está
dividida por puntos y comas en tres expresiones separadas:
• La expresión de inicialización
3.3 Estructuras • La expresión de prueba, y
iterativas: repetir, • La expresión de incremento
mientras, hasta y
desde. for ( count = 0; count < 10; count++ )
En el ejemplo anterior, la estructura del loop muestra:
_________________________________________________________________________________________
Expresión Nombre Propósito
_________________________________________________________________________________________
1) count = 0 Inicializa la expresión Inicializa la variable del ciclo
2) count < 10 Expresión de prueba Prueba la variable del ciclo
3) count++ Expresión de incremento Variable que se incrementa en el ciclo
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
3.3 Estructuras iterativas: repetir,
mientras, hasta y desde.
Expresión del ciclo for
No lleva punto y
Punto y coma Punto y coma coma aquí
Expresión de Expresión de Expresión de
inicialización prueba incremento
for ( count = 0; count < 10 ; count++)
[Link] ( “count=” + count);
Palabra Cuerpo del ciclo
reservada
Este punto y coma termina
la sentencia completa
La variable cout ocupa un rol clave en este ciclo for. En conjunto con las tres partes de la
expresión del loop, count es usado para controlar la operación del loop. Específicamente,
sirve para llevar la cuenta de las veces que se recorre el ciclo.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Inicialización de
variables
falso
Condición
verdadero
3.3 Estructuras
Actualización de
iterativas: repetir,
variables
mientras, hasta y
desde.
Cuerpo del
ciclo
Procesar
resultados
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Encontrando la suma de 5
números enteros
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
También podemos incrementar a la variable de control en valores
diferentes a 1. El siguiente ejemplo muestra un ciclo for que
incrementa la variable de control de 2 en 2 para imprimir los
números pares que hay entre el 0 y el 20.
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
Por supuesto que también podemos implementar ciclos en los
que se decremente la variable de control, por ejemplo, podemos
capturar un String e imprimirlo al revés.
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
También se pueden utilizar más variables en un ciclo. Por
ejemplo, para producir 10, 21, 32, 43, 54, 65, podemos hacer lo
siguiente:
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El ciclo for se usa también para iterar sobre colecciones, lo
cual es mejor conocido como foreach.
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Observe el cambio en la estructura del ciclo for,
ahora solo se usa una variable de tipo String que
itera sobre la colección días, que resulta ser un
arreglo de Strings. Por cierto, el tema de arreglos
es el que sigue en nuestro paquete de diapositivas.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017
El tema que hemos cubierto es el correspondiente a ciclos y a
decisiones, esperamos te haya apoyado en tu formación como
ingeniero.
3.3 Estructuras
iterativas: repetir,
mientras, hasta y
desde.
Instituto Tecnológico de León – Departamento de Sistemas y Computación, 2017