SlideShare una empresa de Scribd logo
1 de 39
Descargar para leer sin conexión
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Lección 10: Estructuras de Control
Autor: José Navarro
Referencias:
Texto del curso: Texto del Curso: “Java How to Program: Late Objects Version” 8va.
Ed., Capítulo 3 (Control Statements Part 1) y Capítulo 4 (Control Statements Part 2)
Texto suplementario: Big Java 3ra Ed. capítulos 5-6
Objetivos
Explicar la operación de diferentes estructuras de control
Diseñar programas que utilicen estructuras de control
Diseñar programas utilizando apropiadamente la estructura if
Diseñar programas utilizando apropiadamente la estructura if ... else ...
Explicar el funcionamiento de los operadores relacionales
Diseñar código que utilice apropiadamente los operadores relacionales
Listar las funciones lógicas disponibles en el lenguaje
Diseñar código que utilice apropiadamente las funciones lógicas
Indentar adecuadamente programas en Java
Diseñar programas utilizando apropiadamente la estructura while
Diseñar programas utilizando apropiadamente la estructura for
Diseñar programas utilizando apropiadamente la estructura switch
Diseñar programas utilizando apropiadamente la estructura do ... while
Bosquejo
10.0 Introducción
10.1 Estructura if
10.2 Estructura if...else
10.3 Estructura while
10.4 Estructura for
10.5 Estructura switch para Selecciones Múltiples (utilizando el comando
break)
10.6 Estructura switch para Selecciones Múltiples (sin utilizar el comando
break)
10.7 Problemas de práctica
Comentario
Antes de comenzar esta lección queremos indicar que la misma es bastante extensa. La
razón para ello es que quisimos incluir todas las estructuras de control en una sola
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
lección. El profesor del curso le indicará en qué fechas tiene que estudiar cuáles
secciones de la lección.
10.0 Introducción
Este es uno de las lecciones más importantes de este curso. Aquí aprenderemos las
estructuras de control que permitirán a nuestros programas tomar decisiones y realizar
repeticiones. Estas son las características que hacen a los programas de computadoras tan
útiles, poder tomar decisiones y realizar cantidades extraordinarias de repeticiones sin
cansarse.
Las expresiones lógicas son utilizadas mayormente en la construcción de estructuras de
control. Las estructuras de control permiten alterar la secuencia de la ejecución del
programa. Un resumen de las estructuras de control se presenta en la siguiente tabla:
Tabla 1: Resumen de las Estructuras de Control
while (condicion)
{
bloque de instrucciones
}
if (condicion)
{
bloque de instrucciones
}
else
{
otro bloque de instrucciones
}
if (condicion)
{
bloque de instrucciones
}
Forma
Repetición: repite el bloque
de instrucciones mientras la
condición es cierta
while
Condicional: ejecuta el
primer bloque de
instrucciones si la condición
es cierta y el segundo en
caso contrario
if …else
Condicional: ejecuta el
bloque de instrucciones se la
condición es cierta
if
funciónEstructura
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Tabla 1: (continuación)
switch (expr)
{
case const1:
bloque1 de instrucciones1
<break>;
case const2:
bloque2 de instrucciones
<break;>
…
<default:
bloqued de instrucciones>
}
for (expr1; expr2; expr3)
{
bloque de instrucciones
}
Forma
Condicional: expr representa
un valor entero o tipo char.
El valor de char se compara,
comenzando por el tope, con
cada uno de los valores a la
derecha de los case. Si los
valores son iguales se ejecuta
el bloque de instrucciones
que le sigue. Si un break se
encuentra al final se termina
el switch de lo contrario se
ejecutan los demás bloques
que están debajo. La opción
default indica el proceso que
será ejecutado en caso de que
ningún case sea cierto.
switch
Repetición: expr1 es una
expresión en la que se
inicializa el valor de una
variable de control. xxpr2
representa la condición que
debe ser cierta para que el
ciclo se continue repitiendo.
expr3 es la acción que se
ejecutará al final de cada
ciclo.
for
funciónEstructura
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Tabla 1: (continuación)
Repetición: similar al while
pero en este caso la
condición se verifica luego
de ejecutar el bloque de
instrucciones. Esta
estructura garantiza que el
bloque se ejecutará al menos
una vez, ya que la condición
no se verifica hasta que el
bloque es ejecutado al menos
una vez.
do
{
bloque de instrucciones
} while (condicion);
do…while
En las próximas subsecciones presentamos ejemplos sobre la implementación de
estructuras en Java. Para facilitar el entendimiento de las mismas presentamos un pedazo
genérico de flujograma en donde se implementa una estructura de control (como un
condicional) y al lado derecho presentamos cómo se codificaría en Java. Seguido del
código genérico presentamos un ejemplo utilizando una sección de un flujograma y el
código correspondiente al lado derecho. Una vez se ha presentado la construcción
general de la estructura se da uno o más ejemplos de programas utilizando la misma.
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Programa If01.java
1 //If01.java
2 //programa para leer dos valores e imprimir
3 //el mayor de ambos
4
5 import java.util.Scanner;
6 public class If01
7 {
8 public static void main( String args[] )
9 {
10 Scanner input = new Scanner( System.in );
11
12 //Declaración de variables
13 int valor1,
14 valor2,
15 mayor = 0; //es necesrio inicializarla
16 //porque sus valores siempre
17 //se actualizarán en condicionales
18
19 System.out.print("Entre el primer valor : ");
20 valor1 = input.nextInt();
21 System.out.print("Entre el segundo valor : ");
22 valor2 = input.nextInt();
23
24 if (valor1 > valor2)
25 {
26 mayor = valor1;
27 }
28 if (valor2 >= valor1)
29 {
30 mayor = valor2;
31 }
32
33 System.out.println("El valor mayor es: " + mayor);
34 }
35 }
Explicación
Este programa muestra el uso de la estructura if para la toma de decisiones. El programa
lee dos valores e imprime el mayor de los dos.
La línea 24 analiza la condición valor1 > valor2 (En Java las condiciones se escriben
siempre entre paréntesis) Si la condición es cierta, se ejecutará el bloque de instrucciones
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
que se encuentra debajo (líneas 25 a la 27). Si el bloque de instrucciones se compone de
más de una instrucción es necesario encerrarlo entre corchetes „{„ para que el compilador
entienda que el grupo completo de instrucciones será ejecutado si la condición es cierta.
Si el bloque de instrucciones se compone de una sola instrucción (como en este caso) no
es necesario escribir los corchetes, sin embargo, es preferible escribirlos de forma tal que
la estructura de los programas sea consistente, así que siempre usaremos los corchetes.
La línea 28 analiza la condición valor2 >= valor1. Si la condición es cierta entonces se
ejecuta el bloque de instrucciones que se encuentra en las líneas de la 29 a la 31.
Como pueden notar en el programa el valor de la variable mayor se modifica dentro de
los dos condicionales (líneas 26 y 30). Si el valor de mayor no se hubiese inicializado
(asignado un valor inicial) en la línea 15, o en otra línea que no dependiera de una
condición, Java habría dado un error porque nos estaríamos arriesgando a utilizar una
variable en la línea 33 que no tenía valor asignado. Si analizamos el código notamos es
uno de los dos condicionales obligatoriamente tiene que ser cierto y por lo tanto mayor
siempre tendría un valor antes de llegar a la línea 33, pero el compilador no es “tan
inteligente”. Pruebe compilar el programa sin asignarle un valor cuando declare la
variable.
Un ejemplo de la corrida de este programa se presenta en la siguiente figura.
¼¼§ÏEntre el primer valor : 4
¼¼§ÏEntre el segundo valor : 3
ÏϧÏEl valor mayor es: 4
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
10.2 Estructura if...else
condicion
bloque 1
nota >= 90
print
“A”
bloque 2
print
“B”
Ejemplo
:
if (condicion)
{
bloque1
}
else
{
bloque2
}
if (nota >= 90)
{
System.out.println(“A”);
}
else
{
System.out.println(“B”);
}
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Programa If02.java
1 //If02.java
2 //programa para leer dos valores e imprimir
3 //el mayor de ambos usando la estructura
4 //if ... else ...
5
6 import java.util.Scanner;
7 public class If02
8 {
9 public static void main( String args[] )
10 {
11 Scanner input = new Scanner( System.in );
12
13 //Declaración de variables
14 int valor1,
15 valor2,
16 mayor = 0; //es necesrio inicializarla
17 //porque sus valores siempre
18 //se actualizarán en condicionales
19
20 System.out.print("Entre el primer valor : ");
21 valor1 = input.nextInt();
22 System.out.print("Entre el segundo valor : ");
23 valor2 = input.nextInt();
24
25 if (valor1 > valor2)
26 {
27 mayor = valor1;
28 }
29 else
30 {
31 mayor = valor2;
32 }
33
34 System.out.println("El valor mayor es: " + mayor);
35 }
36 }
Explicación
Este programa realiza la misma la misma función que If01 pero en lugar de utilizar dos
estructuras if utiliza una estructura if...else. Si la condición en la línea 25 es cierta
entonces se ejecutará la instrucción en la línea 27, de lo contrario se ejecutará la
instrucción en la línea 31. Note que esta alternativa es mejor a la de utilizar dos if porque
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
aparte de requerir menos código se ejecuta más eficientemente. Utilizando dos if se
realizan dos comparaciones mientras que aquí se ejecuta sólo una. Un ejemplo de la
corrida se presenta a continuación.
¼¼§ÏEntre el primer valor : 6
¼¼§ÏEntre el segundo valor : 9
ÏϧÏEl valor mayor es: 9
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
1 //If03.java
2 //programa para leer tres valores e imprimir
3 //el mayor usando estructuras if ... else ...
4 //anidadas
5
6 import java.util.Scanner;
7 public class If03
8 {
9 public static void main( String args[] )
10 {
11 Scanner input = new Scanner( System.in );
12
13 //Declaración de variables
14 int valor1,
15 valor2,
16 valor3,
17 mayor = 0;
18
19 System.out.print("Entre el primer valor : ");
20 valor1 = input.nextInt();
21 System.out.print("Entre el segundo valor : ");
22 valor2 = input.nextInt();
23 System.out.print("Entre el tercer valor : ");
24 valor3 = input.nextInt();
25
26 if ( (valor1 >= valor2) && (valor1 >= valor3) )
27 {
28 mayor = valor1;
29 }
30 else
31 {
32 if (valor2 >= valor3)
33 {
34 mayor = valor2;
35 }
36 else
37 {
38 mayor = valor3;
39 }
40 }
41
42 System.out.println("El valor mayor es: " + mayor);
43 }
44 }
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Explicación
Este programa lee tres números e imprime el mayor de los tres. Para lograr esto se
utilizan dos if anidados (uno dentro del otro). El primer if (línea 26) verifica si valor1 es
el mayor de los tres, de ser así lo guarda en mayor, de ser falso entonces se ejecuta el
bloque correspondiente al else de la línea 30. El bloque del else de la línea 30 es otra
estructura if...else... En este condicional no es necesario realizar una comparación
utilizando valor1 ya que si se llegó hasta este punto en el programa es porque valor1 no
es el mayor. En este condicional (línea 32) se comparan valor2 y valor3, si valor2 es el
mayor entonces se imprime el mismo, de lo contrario se imprime valor3.
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
10.3 Estructura while para Repeticiones
condicion
bloque de
instrucciones
Ejemplo
:
a < 100
a=a+1
a = 5
print
a*a
//formato del while
//en Java
while (condición)
{
bloque de
instrucciones
}
a = 5;
while (a < 100)
{
System.out.println(a*a);
a = a + 1;
}
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Ejemplo 01 de la Estructura While
start
contador = 0
suma = 0
contador < 10
print
“Entre un valor: “
input
valor
suma=suma+valor
contador=contador
+1
print
“La suma es”,suma
end
1 //while01.java
2 //Programa para calcular la suma de
3 //10 valores
4
5 import java.util.Scanner;
6
7 public class While01 {
8 public static void main( String args[])
9 {
10 int contador = 0,
11 suma = 0,
12 valor;
13
14 Scanner input = new Scanner(System.in);
15
16 while (contador < 10)
17 {
18 System.out.print("Entre un valor: ");
19 valor = input.nextInt();
20 suma = suma + valor;
21 contador++;
22 }//termina el while
23
24 System.out.println("La suma es: " + suma);
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
25 }
26 }
Explicación
Este programa presenta la utilización de la estructura while. El programa se mantiene
leyendo valores mientras (while) no haya leído diez. Según se van leyendo los diez
valores los mismos se van sumando al acumulador suma que inicialmente contiene un
valor de 0. Luego de leer los diez valores y acumular la suma la misma se imprime. El
flujograma correspondiente al programa se presenta antes del mismo.
La línea 16 incluye el comienzo de la estructura while en donde se coteja si la condición
contador < 10 es cierta o falsa. Si la condición es cierta se ejecuta el bloque de
instrucciones que se encuentra bajo el while. Este bloque de instrucciones se encierra
entre corchetes para que el compilador pueda determinar dónde comienza y donde
termina. Si el bloque de instrucciones consta de una sola instrucción no es necesario
utilizar los corchetes. Sin embargo, en este curso siempre utilizaremos los corchetes para
mantener la consistencia. Recuerde que el código contenido entre corchetes debe estar
indentado para facilitar el manejo del programa. Incluso si el bloque consta de una sola
instrucción la misma debe estar indentada con respecto al while. El bloque de
instrucciones que será ejecutado mientras la condición del while es cierta se encuentra de
las líneas 18 a la 21. Note que el bloque está indentado con respecto a los corchetes en
las líneas 17 y 22. Note además que ambos corchetes están alineados con el while. Esta
forma de alinear los corchetes e indentar el bloque de instrucciones se utiliza también en
las estructuras if, if...else, for y do...while.
La línea 19 se utiliza para leer el valor entrado por el usuario. Sólo una línea es necesaria
ya que la misma se ejecuta diez veces (las veces que se ejecuta el ciclo) y por lo tanto
será suficiente para leer los diez valores. La línea 20 acumula el valor en la variable
suma. La línea 21 incrementa el valor de contador por uno (1). Esta línea es importante
ya que es la que logra que eventualmente la condición del while sea falsa. El bloque de
todo while debe incluir una o más instrucciones que persiga que eventualmente la
condición sea falsa ya que de lo contrario la estructura quedaría atrapada en un ciclo
infinito. Mientras la condición es cierta el bloque de instrucciones se ejecuta en orden.
Cada vez que se llega a la última línea del bloque se regresa arriba a examinar la
condición del while si la condición es cierta se ejecuta el bloque nuevamente, de ser falsa
se pasa a ejecutar la primera instrucción que se encuentra luego del bloque. La línea 24
se encarga de imprimir el valor de la suma. A continuación se presenta un ejemplo de la
corrida.
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Programa while02.java
1 //while02.java
2 //Programa para calcular el promedio de
3 //n valores positivos utilizando un indicador
4
5 import java.util.Scanner;
6
7 public class While02 {
8 public static void main( String args[])
9 {
10 int contador = 0;
11 float suma = 0,
12 valor = 0,
13 promedio;
14
15 Scanner input = new Scanner(System.in);
16
17 //La lectura de los valores se detiene
18 //cuando se entra un valor negativo
19
20 while (valor >= 0)
21 {
22 System.out.print("Entre un valor: ");
23 valor = input.nextFloat();
24 suma = suma + valor;
25 contador++;
26 }//termina el while
27
¼¼§ÏEntre un valor: 5
¼¼§ÏEntre un valor: 5
¼¼§ÏEntre un valor: 5
¼¼§ÏEntre un valor: 5
¼¼§ÏEntre un valor: 5
¼¼§ÏEntre un valor: 10
¼¼§ÏEntre un valor: 10
¼¼§ÏEntre un valor: 10
¼¼§ÏEntre un valor: 10
¼¼§ÏEntre un valor: 10
ÏϧÏLa suma es: 75
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
28 //La siguiente instrucción evita que el
29 //valor negativo se mantenga dentro de
30 //la suma ya que no nos interesa
31
32 suma = suma - valor;
33
34 //La siguiente suma resta 1 al contador
35 //para no tomar en consideración el
36 //incremento que se hace cuando se
37 //lee el valor negativo
38
39 contador--;
40
41 promedio = suma / contador;
42
43 System.out.println("El promedio es: " + promedio);
44 }
Explicación
Este programa calcula el promedio de n valores positivos utilizando el siguiente
procedimiento: leer valores e ir acumulando la suma hasta que se lea un valor negativo,
en ese momento se divide la suma entre los valores leídos y se imprime el resultado. El
procedimiento para calcular la suma es parecido al utilizado en el programa while01, la
diferencia estriba en que en primer programa se sabía de antemano cuántos valores se
leerían y en este caso no.
La línea 10 inicializa a cero el valor de la variable valor. Esto es necesario para garantizar
que la condición de while sea cierta la primera vez que se ejecuta, de hecho, cualquier
valor mayor o igual a cero cumple con este propósito. Es una mala técnica de
programación el utilizar en un condicional o cómputo una variable que no ha sido
inicializada previamente de forma explícita.
La estructura while se mantiene ejecutando mientras que el valor leído no sea negativo, el
bloque de instrucciones acumula la suma de los valores (línea 24) e incrementa por uno la
variable contador cada vez que se lee un valor.
El promedio se puede calcular como la suma de los valores dividido entre el total de
valores (línea 41) sin embargo, la forma en que está codificado este ciclo while provoca
que el último número leído (el valor negativo) sea sumado junto con los demás valores y
que además sea contado. Para solucionar este problema en la línea 32 se le resta a suma
el último valor leído (que corresponde al valor negativo) y en la línea 39 se le resta 1 a la
variable contador.
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Este programa presenta una deficiencia, ¿qué ocurriría si el primer número entrado fuera
negativo? ¿Cuál sería el valor del promedio? Se deja al estudiante el modificar el
programa para que contemple y maneje adecuadamente una situación como ésta.
A continuación se presenta un ejemplo de la corrida del programa.
10.4 Estructura for para Repeticiones
La estructura for se utiliza generalmente para ejecutar un bloque de instrucciones un
número específico de veces. O sea, si por ejemplo usted necesita que un bloque de
instrucciones se ejecute n veces en lugar de utilizar una estructura while es preferible
utilizar una estructura for. Todas las estructuras iterativas (con múltiples repeticiones) se
pueden implementar con un while pero en los casos en que se puede determinar la
cantidad de iteraciones de antemano es más sencillo utilizar una estructura for. Además,
la lógica de la estructura for es más fácil de entender que la estructura while.
El formato de la estructura for es el siguiente:
for (contador = valor_inicial; condicion; accion)
{
instrucciones
}
La variable contador se puede usar como un índice que va contando el número de
iteraciones. valor_inicial es el valor que se le asignará al índice al comienzo de la
primera iteración. condición es una expresión lógica que tiene que ser cierta para que los
ciclos de esta estructura iterativa se continúen repitiendo. Aunque el lenguaje acepta
cualquier expresión lógica en general se escribe una condición que verifica que el valor
del índice no ha excedido una cantidad determinada. Por ejemplo, que el del índice sea
menor que un valor n. accion es una instrucción que se ejecutará al final de cada ciclo
(iteración). En general esta instrucción se utiliza para incrementar o decrementar el valor
del índice pero puede ser otro tipo de instrucción también.
¼¼§ÏEntre un valor: 3
¼¼§ÏEntre un valor: 4
¼¼§ÏEntre un valor: 5
¼¼§ÏEntre un valor: -1
ÏϧÏEl promedio es: 4.0
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Ejemplo 10.4.1
El siguiente ejemplo muestra un programa que imprime los valores del 1 al 10. Primero
se muestra el flujograma y luego el programa de forma que se pueda apreciar la relación
entre ambos.
Ejemplo 10.4.2
El siguiente ejemplo muestra un programa que lee 5 valores, determina el promedio e
imprime el mismo.
public class ForEx {
public static void
main(String args[])
{
int i;
for (i = 1; i <= 10; i++)
{
System.out.println(i);
}
}
}
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Programa For01.java
1 //For01.java
2 //Programa para calcular el promedio de 5 valores
3 //utilizando la estructura for
4
5 import java.util.Scanner;
6
7 public class For01 {
8 public static void main( String args[])
9 {
10
11 Scanner input = new Scanner(System.in);
12
13 int contador;
14 float suma = 0,
15 valor,
16 promedio;
17
18 for (contador = 1; contador <= 5; contador++)
19 {
20 System.out.print("Entre un valor: ");
21 valor = input.nextFloat();
22 suma = suma + valor;
23 }//termina el for
24
25 promedio = suma / 5;
26
27 System.out.println("Promedio = " + promedio);
28 }
29 }
Explicación
Este programa presenta la utilización de la estructura for. La estructura for facilita la
implementación de un ciclo cuando se conoce de antemano cuántas veces será ejecutado.
En este ejemplo se desea ejecutar un ciclo 5 veces para leer 5 valores distintos (uno en
cada fase del ciclo). Los valores serán sumados en una variable (suma) y al final este
total será dividido entre 5 para determinar el promedio.
La línea 18 presenta el comienzo de la estructura for. El ciclo inicializa la variable
contador con un valor de 1, y el ciclo se continuará ejecutando mientras contador tenga
un valor menor o igual a 5 (contador <= 5). Cada vez que se complete la ejecución del
bloque de instrucciones la variable contador se incrementará por 1 (contador++)*.
Como se puede apreciar, si el contador comienza en 1, se incrementa en 1 al final de la
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
ejecución del bloque y el ciclo se continuará ejecutando mientras contador sea menor o
igual a 5, entonces el ciclo se ejecutará exactamente 5 veces.
Al igual que en otras estructuras el bloque de instrucciones que pertenece a la estructura
for se encuentra encerrado entre corchetes. Si el bloque consta de sólo una instrucción,
no es necesario utilizar corchetes, sin embargo, utilizaremos siempre los corchetes para
mantener consistencia a través de todos nuestros programas. Recuerde que el código
dentro de los corchetes debe estar indentado con respecto a los corchetes y que los
corchetes que abren y cierran el bloque deben estar alineados con el for.
* contador++ provoca que el mismo resultado que contador = contador + 1. Esta forma
de incrementar el valor de una variable resulta en un código de ejecución más eficiente.
Por otro lado, la expresión podría resultar confusa para las personas que no conocen Java
o C++
Ejemplo de la ejecución del programa.
Ejemplo 10.4.3
El siguiente ejemplo muestra un programa que puede calcular el promedio de cualquier
cantidad de valores. El programa primero pide como dato cuántos valores se van a entrar
para calcular el promedio y luego procede con la lectura de los valores. Note que en este
caso el total de valores no se conoce antes de comenzar la ejecución del programa pero el
programa va a tener el valor antes de llegar a la sección de la lectura de los valores que se
usarán para el cómputo. Por lo tanto en este caso también se puede utilizar una estructura
for.
¼¼§ÏEntre un valor: 3
¼¼§ÏEntre un valor: 23.4
¼¼§ÏEntre un valor: 54.3
¼¼§ÏEntre un valor: -30
¼¼§ÏEntre un valor: 9
ÏϧÏPromedio = 11.94
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Programa For02.java
1 //For02.java
2 //Programa para calcular el promedio de n valores
3 //utilizando la estructura for
4
5 import java.util.Scanner;
6
7 public class For02 {
8 public static void main( String args[])
9 {
10
11 Scanner input = new Scanner(System.in);
12
13 int n;
15 float suma = 0,
16 valor,
17 promedio;
18
19 System.out.print("Número de valores: ");
20 n = input.nextInt();
21
22 for (int i = 1; i <= n; i++)
23 {
24 System.out.print("Entre un valor: ");
25 valor = input.nextFloat();
26 suma = suma + valor;
27 }//termina el for
28
29 //En la próxima línea como n es de tipo int
30 //y se quiere hacer un cómputo con lugares
31 //decimales se hace un type cast para tratar
32 //a n como si fuera un valor float
33
34 promedio = suma / (float) n;
35
36 System.out.println("Promedio = " + promedio);
37 }
38 }
Explicación
Este programa presenta la utilización de una estructura for para calcular el promedio de n
valores. En este programa, a diferencia del programa For01, la cantidad de veces que se
ejecutará que el bloque de instrucciones dentro del ciclo, no se conoce hasta el momento
de ejecución del programa.
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
La línea 19 del programa le indica al usuario que debe entrar el valor que indica cuántos
valores se van a sumar para calcular el promedio. En la línea 20 lee el valor del teclado y
lo almacena en la variable n. La línea 22 es la que indica cuántas veces se habrá de
ejecutar el bloque de instrucciones. En este caso el bloque de instrucciones se ejecutará n
veces, desde que i = 1 hasta que i = n. En la línea 22 también se introduce un concepto
nuevo, la declaración de una variable dentro de la misma estructura. En lugar de declarar
la variable i antes de la estructura for, ésta se puede declarar dentro la misma. Es
importante recordar que si una variable se declara dentro de una estructura entonces sólo
estará disponible dentro de esa estructura. Si tratamos de utilizarla en otro lugar del
programa recibiremos un mensaje de que la misma no está disponible.
Ejemplo de la corrida del programa
Ejemplo 10.4.4
El siguiente ejemplo muestra un programa que lee las puntuaciones de n exámenes de
100 puntos y determina el promedio y la nota correspondiente al mismo
Programa For03.java
1 //For03.java
2 //Programa para calcular el promedio de n exámenes
3 //de 100 puntos y determinar la nota
4 //correspondiente.
5
6 import java.util.Scanner;
7
8 public class For03 {
9 public static void main( String args[])
10 {
11
12 Scanner input = new Scanner(System.in);
13
14 int n;
15 float suma = 0,
16 valor,
¼¼§ÏNúmero de valores: 3
¼¼§ÏEntre un valor: 1
¼¼§ÏEntre un valor: 2
¼¼§ÏEntre un valor: 4
ÏϧÏPromedio = 2.3333333
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
17 promedio;
18
19 System.out.print("Total de exámenes: ");
20 n = input.nextInt();
21
22 for (int i = 1; i <= n; i++)
23 {
24 System.out.print("Entre puntuación del examen: ");
25 valor = input.nextFloat();
26 suma = suma + valor;
27 }//termina el for
28
29 promedio = suma / (float) n;
30 System.out.println("Promedio = " + promedio);
31
32 if (promedio >= 90)
33 {
34 System.out.println("Nota = A");
35 }
36 else
37 {
38 if (promedio >= 80)
39 {
40 System.out.println("Nota = B");
41 }
42 else
43 {
44 if (promedio >= 70)
45 {
46 System.out.println("Nota = C");
47 }
48 else
49 {
50 if (promedio >= 60)
51 {
52 System.out.println("Nota = D");
53 }
54 else
55 {
56 System.out.println("Nota = F");
57 }
58 }
59 }
60 }
61 }
62 }
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Explicación
Este programa es una extensión del programa For02. En este caso se leerán n valores
para calcular el promedio de los mismos. Sin embargo, en este caso se le da una
interpretación específica a estos valores, los mismos representan los resultados de n
exámenes (asumiendo que los mismos tienen un valor máximo de 100). La extensión
principal al programa viene luego de calculado el promedio. El promedio de los
exámenes es utilizado para determinar la nota del estudiante utilizando la siguiente curva:
100 – 90 A
<90 – 80 B
<80 – 70 C
<70 – 60 D
<60 F
Para determinar la nota del estudiante se utiliza un grupo de if anidados. El primer if se
encuentra en la línea 32. Si el promedio se mayor o igual que 90 entonces se ejecuta la
línea 34 y se imprime la nota „A‟. Si la condición en la línea 32 resulta falsa entonces se
pasa a ejecutar el bloque de instrucciones perteneciente al else que se encuentra en la
línea 36. Este bloque está compuesto por todas las instrucciones que van desde la línea
37 a la 60. Si la ejecución del programa llega a este bloque es indicativo de que el
promedio no es mayor o igual a 90, por lo tanto lo primero que se hace es verificar si el
promedio es el correspondiente a una calificación de „B‟. La línea 38 coteja esta
condición, si el promedio es mayor o igual a 80 entonces se imprime la nota „B‟ (línea
40), de lo contrario se ejecuta el bloque de instrucciones correspondiente al else de la
línea 42. De forma similar se verifica si el promedio es el correspondiente a una nota de
„C‟ o „D‟. La línea 50 verifica si el promedio es correspondiente a una „D‟, si esta
condición es falsa entonces la única opción restante es „F‟ y esta nota se imprime en la
línea 56.
Un ejemplo de la corrida se presenta a continuación
Ejemplo 10.4.5
El siguiente ejemplo muestra una manera alterna para organizar las estructuras if
anidadas.
¼¼§ÏTotal de exámenes: 3
¼¼§ÏEntre puntuación del examen: 87
¼¼§ÏEntre puntuación del examen: 92
¼¼§ÏEntre puntuación del examen: 81
ÏϧÏPromedio = 86.666664
ÏϧÏNota = B
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Programa For04.java
1 //For04.java
2 //Ejemplo del uso del if ... else if ...
3
4 import java.util.Scanner;
5
6 public class For04 {
7 public static void main( String args[])
8 {
9
10 Scanner input = new Scanner(System.in);
11
12 int n;
13 float suma = 0,
14 valor,
15 promedio;
16
17 System.out.print("Total de exámenes: ");
18 n = input.nextInt();
19
20 for (int i = 1; i <= n; i++)
21 {
22 System.out.print("Entre puntuación del examen: ");
23 valor = input.nextFloat();
24 suma = suma + valor;
25 }//termina el for
26
27 promedio = suma / (float) n;
28 System.out.println("Promedio = " + promedio);
29
30 if (promedio >= 90)
31 {
32 System.out.println("Nota = A");
33 }
34 else if (promedio >= 80)
35 {
36 System.out.println("Nota = B");
37 }
38 else if (promedio >= 70)
39 {
40 System.out.println("Nota = C");
41 }
42 else if (promedio >= 60)
43 {
44 System.out.println("Nota = D");
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
45 }
46 else
47 {
48 System.out.println("Nota = F");
49 }
50 }
51 }
Explicación
El propósito de este programa es presentar una forma alterna de escribir los if anidados
como los que se presentaron en el programa For03. La lógica de este programa es
idéntica a la lógica del programa For03, sin embargo, noten que los if no están escritos de
la misma forma. A continuación explicamos cómo se logra realizar esta modificación.
El siguiente ejemplo presenta una sección de programa con if anidados.
1. if (condicion1)
2. {
3. bloque1
4. }
5. else
6. {
7. if (condicion2)
8. {
9. bloque2
10. }
11. else
12. {
13. bloque3
14. }
15. }
Para efectos de la construcción de un programa, una estructura (if, if...else, while,
do...while o for) completa se considera como una unidad, esto es, se puede ver como si
fuese una sola instrucción. Por lo tanto si el bloque dentro una estructura es otra
estructura, no es necesario encerrarlo entre corchetes siempre y cuando no esté
acompañado de instrucciones adicionales. De esta forma el bloque de instrucciones
correspondiente al else de la línea 5 no necesita los corchetes que se encuentran en las
líneas 6 y 15. El código quedaría como se presenta a continuación:
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
1. if (condicion1)
2. {
3. bloque1
4. }
5. else
7. if (condicion2)
8. {
9. bloque2
10. }
11. else
12. {
13. bloque3
14. }
Esta forma de escribir el código no altera de forma alguna la lógica del programa. Java
permite que más de una línea de código se escriba en la misma línea, por lo tanto el
código de la línea 7. se puede escribir al lado del código en la línea 5 y entonces el código
quedaría como se presenta a continuación:
1. if (condicion1)
2. {
3. bloque1
4. }
5. else if (condicion2)
8. {
9. bloque2
10. }
11. else
12. {
13. bloque3
14. }
Como el bloque 2 y el bloque 3 corresponden a la partes cierta y falsa del if en la línea 5,
podemos moverlas para la izquierda, entonces el código quedaría así:
1. if (condicion1)
2. {
3. bloque1
4. }
5. else if (condicion2)
8. {
9. bloque2
10. }
11. else
12. {
13. bloque3
14. }
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
caso 1
bloque de
instrucciones
con break al final
caso 2
bloque de
instrucciones
con break al final
Si se incluye
default se
ejecuta este bloque
Vemos entonces que cuando el contenido de un else es una estructura if entonces
podemos unir el else y el if en la misma línea escribiendo un else if (condicion). Esta
forma de escribir el código resulta más adecuada en ocasiones como esta en la que todas
las condiciones se refieren a valores distintos de la misma variable o expresión.
10.5 Estructura switch para Selecciones Múltiples (utilizando el comando break)
Las estructuras switch se utilizan para implementar un grupo de condicionales
consecutivos en donde todas las condiciones evalúan una misma expresión y se toma la
decisión de qué bloque de instrucciones ejecutar en base al valor de la expresión. Las
expresiones pueden producir valores de tipo byte, short, int o char. Ningún otro tipo de
valor es permitido. Cuando se coloca la instrucción break al final de un bloque de
instrucciones la ejecución de la misma hace que la ejecución del programa continúe luego
del final de la estructura. En el caso de la estructura switch el efecto de ejecutar el break
es que no se ejecute ninguno de los bloques que pertenecen a los demás casos. Si no se
escribe el break entonces la ejecución del programa continúa con el próximo bloque que
se encuentre debajo.
switch (expresion)
{
case 1:
{
bloque de instruc-
ciones que se
ejecutará si
expresion = 1
}
case 2:
{
bloque de instruc-
ciones que se
ejecutará si
expresion = 2
}
default:
{
bloque de instruc-
ciones que se ejecu-
tará si ninguna de
las anteriores es
cierta
}
}
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
10.6 Estructura switch para Selecciones Múltiples (sin utilizar el comando break)
La siguiente figura muestra la secuencia en que se ejecutarían los bloques de
instrucciones si no se utiliza la instrucción.
caso 1
bloque de
instrucciones
sin break al final
caso 2
bloque de
instrucciones
sin break al final
Si se incluye
default se
ejecuta este bloque
caso 3
bloque de
instrucciones
sin break al final
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Programa switch01.cpp
1 //Switch01.java
2 //Programa para determinar el mayor, la suma
3 //y el promedio de dos valores utilizando un
4 //menú. El programa muestra el uso de la
5 //estructura switch.
6
7 import java.util.Scanner;
8
9 public class Switch01 {
10 public static void main( String args[])
11 {
12
13 Scanner input = new Scanner(System.in);
14
15 int opcion = 0;
16 float valor1,
17 valor2,
18 suma,
19 promedio;
20
21 System.out.print("Entre dos valores" +
22 " separados por un espacio: ");
23 valor1 = input.nextFloat();
24 valor2 = input.nextFloat();
25 while (opcion != 9) //la opción 9 termina el while
26 {
27 System.out.println("n1. mayor");
28 System.out.println("2. suma");
29 System.out.println("3. promedio");
30 System.out.println("9. salirn");
31
32 System.out.print("Seleccione opción: ");
33
34 opcion = input.nextInt();
35
36 switch (opcion)
37 {
38 case 1:
39 {
40 if (valor1 > valor2)
41 {
42 System.out.println("mayor: " + valor1);
43 }
44 else
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
45 {
46 System.out.println("mayor: " + valor2);
47 }
48 break;
49 }
50 case 2:
51 {
52 suma = valor1 + valor2;
53 System.out.println("suma: " + suma);
54 break;
55 }
56 case 3:
57 {
58 promedio = (valor1 + valor2) / (float) 2.0;
59 System.out.println("promedio: " + promedio);
60 break;
61 }
62 case 9:
63 {
64 //no se hace nada
65 break;
66 }
67 default:
68 {
69 System.out.println("Opción incorrecta");
70 }
71 }
72 }
73 }
74 }
Explicación
En muchas ocasiones, el código de un programa requiere una serie de if anidados en
donde todas las condiciones son diferentes valores de una misma variable o expresión,
similar a como vimos en el programa For04. Si los valores de esta variable son enteros o
caracteres, entonces la estructura puede ser implementada con una estructura switch. La
forma en que se escribe esta estructura, aunque implementa la misma lógica de los if
anidados resulta más fácil de asociar (generalmente) con la lógica para resolver el
problema que los if anidados.
Este programa le pide al usuario que entre tres valores y le presenta la opción de imprimir
el mayor de los dos, la suma o el promedio. Una vez que el usuario entra la opción
deseada, el programa imprime el resultado correspondiente y nuevamente presenta las
opciones, si el usuario desea terminar la ejecución del programa selecciona la alternativa
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
9. En caso de que el usuario seleccione una alternativa incorrecta, entonces el programa
le imprimirá el mensaje correspondiente.
Como se desea que el programa se mantenga imprimiendo las opciones (menú) y leyendo
las opciones hasta que el usuario desee dar por terminada la ejecución del programa, el
grueso del programa está contenido en un while que cubre las líneas de la 25 a la 72.
Para garantizar la ejecución del while la primera vez que se llega a él, es necesario
garantizar que la condición (opcion != 9) sea cierta. Para lograr esto se inicializa el valor
de opcion a un valor distinto a 9. En la línea 15 se inicializa el valor de opción con un 0.
El valor con que se inicialice la variable sólo tiene como condición el no ser 9.
El comienzo del bloque del while comienza con las líneas que imprimen las opciones
(líneas 27 a la 30). La línea 32 lee la opción seleccionada por el usuario y la guarda en la
variable opcion.
La estructura switch contiene las opciones de selección para el usuario e indica el
procedimiento que será seguido según la opción seleccionada. Al final del procedimiento
correspondiente a cada opción se incluye el comando break, este comando evita que el
programa continúe su ejecución en la siguiente línea del switch y lo obliga a salir de la
estructura. Esto no es siempre necesario y en algunos casos, dependiendo la lógica que
se desea implementar, el break no es utilizado en una o más de las opciones.
En caso de que el usuario entre la opción 9 la estructura switch hace “absolutamente
nada”, es por esto que sólo incluye un comentario indicando la situación.
En caso de que el usuario entre una opción incorrecta el switch lo manejará con la opción
default e imprime el mensaje “opción incorrecta”.
A continuación se muestra un ejemplo de la corrida del programa
¼¼§ÏEntre dos valores separados por un espacio: 10 15
ÏϧÏ
ÏϧÏ1. mayor
ÏϧÏ2. suma
ÏϧÏ3. promedio
ÏϧÏ9. salir
ÏϧÏ
¼¼§ÏSeleccione opción: 1
ÏϧÏmayor: 15.0
ÏϧÏ
ÏϧÏ1. mayor
ÏϧÏ2. suma
ÏϧÏ3. promedio
ÏϧÏ9. salir
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
ÏϧÏ
¼¼§ÏSeleccione opción: 2
ÏϧÏsuma: 25.0
ÏϧÏ
ÏϧÏ1. mayor
ÏϧÏ2. suma
ÏϧÏ3. promedio
ÏϧÏ9. salir
ÏϧÏ
¼¼§ÏSeleccione opción: 3
ÏϧÏpromedio: 12.5
ÏϧÏ
ÏϧÏ1. mayor
ÏϧÏ2. suma
ÏϧÏ3. promedio
ÏϧÏ9. salir
ÏϧÏ
¼¼§ÏSeleccione opción: 4
ÏϧÏOpción incorrecta
ÏϧÏ
ÏϧÏ1. mayor
ÏϧÏ2. suma
ÏϧÏ3. promedio
ÏϧÏ9. salir
ÏϧÏ
¼¼§ÏSeleccione opción: 5
ÏϧÏOpción incorrecta
ÏϧÏ
ÏϧÏ1. mayor
ÏϧÏ2. suma
ÏϧÏ3. promedio
ÏϧÏ9. salir
ÏϧÏ
¼¼§ÏSeleccione opción: 9
ÏϧÏ
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
Programa de ejemplo utilizando valores tipo char para hacer las selecciones
La estructura switch permite utilizar valores de tipo char para realizar las selecciones.
Sin embargo, si se va a construir un programa para que el usuario entre por el teclado los
valores que se utilizarán para realizar las selecciones la situación es más compleja que si
se utilizan valores enteros.
Utilizando objetos de la clase Scanner podemos utilizar el método nextInt() para leer un
valor entero y podemos utilizar directamente ese valor en la estructura switch para que se
seleccione cuál es la selección correspondiente. Sin embargo, la clase Scanner no nos
provee un método para leer un solo carácter. Para leer un solo carácter podemos utilizar
otros mecanismos que provee Java, sin embargo, eso nos causa la siguiente situación:
Cuando un usuario entra un carácter por el teclado, además del carácter que se desea
entrar se entran otros caracteres especiales, como el que indica el final de la línea. Ese
carácter no es visible al usuario pero está incluido en la entrada. Luego de que el
programa lee el primer carácter, el próximo que se procesará es el próximo en la línea,
aunque no corresponda al carácter que explícitamente quiere entrar el usuario. Esta
situación requiere que se busquen métodos para descartar los caracteres no deseados.
En el ejemplo que mostramos próximamente se presenta una alternativa para utilizar el
carácter entrado explícitamente por el usuario y descartar los demás que componen la
línea. Para hacer esto se utilizará el método charAt(). Este método permite extraer de un
string el carácter que se encuentra en la posición indicada por el argumento entre
paréntesis. Por ejemplo, la instrucción
elCaracter = elString.charAt(3);
extrae del string elString el caracter que se encuentra en la posición 3 y almacena el
mismo en la variable elCarater. Es importante señalar que las posiciones comienzan en
la posición 0, o sea que el primer carácter del string se encuentra en la posición 0 (no en
la 1).
//Programa para mostrar el uso de la estructura switch
//cuando los valores utilizados para realizar las
//selecciones son de tipo char
import java.util.Scanner;
class switchStructUsingChars
{
public static void main(String args[])
{
Scanner input = new Scanner( System.in );
char alternativaChar; //variable que contendrá el
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
//caracter seleccionado
//por el usuario
String linea = "";
do
{
System.out.println(" M E N U");
System.out.println("a. Saludo");
System.out.println("b. Despedida");
System.out.println("c. Comentario");
System.out.println("x. Salir del programa");
//Se lee la línea completa en donde el usuario
//entró la alternativa ya que Scanner no provee
//para leer un sólo caracter.
linea = input.next();
//El método charAt() en la próxima instrucción
//permite extraer de un string el caracter que
//se encuentra en la posición indicada por el
//argumento.
//En este caso se utiliza para extraer el que
//se encuentra en la posición 0 del string
//que es donde se encuentra el caracter entrado
//por el usuario. Las otras posiciones contienen
//otros caracteres como el que indica el final
//de la línea.
alternativaChar = linea.charAt(0);
switch (alternativaChar)
{
case 'a':
System.out.println("Hola, que gusto verte.");
break;
case 'b':
System.out.println("Nos vemos luego.");
break;
case 'c':
System.out.println("Qué bonito está el día!");
break;
default:
System.out.print("La alternativa seleccionada");
System.out.println(" no es válida. Favor
seleccionar");
System.out.println("otra alternativa.");
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
break;
}
}
while (alternativaChar != 'x');
}
}
Ejemplo de la ejecución del programa
ÏÏ§Ï M E N U
ÏϧÏa. Saludo
ÏϧÏb. Despedida
ÏϧÏc. Comentario
ÏϧÏx. Salir del programa
¼¼§Ïa
ÏϧÏHola, que gusto verte.
ÏÏ§Ï M E N U
ÏϧÏa. Saludo
ÏϧÏb. Despedida
ÏϧÏc. Comentario
ÏϧÏx. Salir del programa
¼¼§Ïb
ÏϧÏNos vemos luego.
ÏÏ§Ï M E N U
ÏϧÏa. Saludo
ÏϧÏb. Despedida
ÏϧÏc. Comentario
ÏϧÏx. Salir del programa
¼¼§Ïc
ÏϧÏQué bonito está el día!
ÏÏ§Ï M E N U
ÏϧÏa. Saludo
ÏϧÏb. Despedida
ÏϧÏc. Comentario
ÏϧÏx. Salir del programa
¼¼§Ïd
ÏϧÏLa alternativa seleccionada no es válida. Favor seleccionar
ÏϧÏotra alternativa.
ÏÏ§Ï M E N U
ÏϧÏa. Saludo
ÏϧÏb. Despedida
ÏϧÏc. Comentario
ÏϧÏx. Salir del programa
¼¼§Ïx
ÏϧÏLa alternativa seleccionada no es válida. Favor seleccionar
ÏϧÏotra alternativa.
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
10.7 Problemas de Práctica
1. Diseñe un programa que lea dos números e indique si la suma de ambos es mayor o si
el producto de ambos es mayor.
2. Diseñe un programa que imprima los números del 1000 al 0 en decrementos de 4.
3. Diseñe un programa que lea un número e indique si el mismo es igual a cero, es
positivo, o es negativo.
4. Codifique el siguiente flujograma
start
A=5
B=20
A>B
print
A*B
A=A+2
B=B-3
print
A,B
end
5. Codifique el siguiente flujograma
COMP 2315 : Programación Estructurada Estructuras de Control
José Navarro 2011
start
end
print
“ro”
print
“alfa”
print
“beta”
print
“delta”
input
A,B
B<9
A>B
A>5

Más contenido relacionado

La actualidad más candente

Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc X
 
Jyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc X
 
DAW-Estructuras de control
DAW-Estructuras de controlDAW-Estructuras de control
DAW-Estructuras de controlvay82
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc X
 
Jyoc java-cap12 excepciones
Jyoc java-cap12 excepcionesJyoc java-cap12 excepciones
Jyoc java-cap12 excepcionesJyoc X
 
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...Diego Andrés Alvarez Marín
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 javajbersosa
 
Js control de flujo
Js control de flujoJs control de flujo
Js control de flujoFERNANDOZ9
 
Sistemas Operativos - Semáforos
Sistemas Operativos - SemáforosSistemas Operativos - Semáforos
Sistemas Operativos - SemáforosJuan Rojas
 
Presentacion wilfredo nadales(29946762)-programas estructurados
Presentacion wilfredo nadales(29946762)-programas estructuradosPresentacion wilfredo nadales(29946762)-programas estructurados
Presentacion wilfredo nadales(29946762)-programas estructuradosWilfredoNadales
 
Programacion concurrente
Programacion concurrenteProgramacion concurrente
Programacion concurrentepuracastillo
 
15894 pr cctica-3-introducciun-al-matlab-simulink
15894 pr cctica-3-introducciun-al-matlab-simulink15894 pr cctica-3-introducciun-al-matlab-simulink
15894 pr cctica-3-introducciun-al-matlab-simulinkFrank Arias Beltran
 
Ciclia y repititibas
Ciclia y repititibasCiclia y repititibas
Ciclia y repititibasmacasq
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013dayaorte
 
Certificación java 6 cap 5
Certificación java 6 cap 5Certificación java 6 cap 5
Certificación java 6 cap 5srBichoRaro
 
Clase n°1 java
Clase n°1 javaClase n°1 java
Clase n°1 javajbersosa
 

La actualidad más candente (18)

Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unit
 
Http estructa
Http estructaHttp estructa
Http estructa
 
Jyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcaciones
 
DAW-Estructuras de control
DAW-Estructuras de controlDAW-Estructuras de control
DAW-Estructuras de control
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzado
 
Jyoc java-cap12 excepciones
Jyoc java-cap12 excepcionesJyoc java-cap12 excepciones
Jyoc java-cap12 excepciones
 
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 java
 
Js control de flujo
Js control de flujoJs control de flujo
Js control de flujo
 
Sistemas Operativos - Semáforos
Sistemas Operativos - SemáforosSistemas Operativos - Semáforos
Sistemas Operativos - Semáforos
 
Presentacion wilfredo nadales(29946762)-programas estructurados
Presentacion wilfredo nadales(29946762)-programas estructuradosPresentacion wilfredo nadales(29946762)-programas estructurados
Presentacion wilfredo nadales(29946762)-programas estructurados
 
Programacion concurrente
Programacion concurrenteProgramacion concurrente
Programacion concurrente
 
15894 pr cctica-3-introducciun-al-matlab-simulink
15894 pr cctica-3-introducciun-al-matlab-simulink15894 pr cctica-3-introducciun-al-matlab-simulink
15894 pr cctica-3-introducciun-al-matlab-simulink
 
Control de flujo
Control de flujoControl de flujo
Control de flujo
 
Ciclia y repititibas
Ciclia y repititibasCiclia y repititibas
Ciclia y repititibas
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013
 
Certificación java 6 cap 5
Certificación java 6 cap 5Certificación java 6 cap 5
Certificación java 6 cap 5
 
Clase n°1 java
Clase n°1 javaClase n°1 java
Clase n°1 java
 

Similar a Control Estructuras Java

Similar a Control Estructuras Java (20)

Estructuras de control unidad 1 semestre 2
Estructuras de control  unidad 1 semestre 2Estructuras de control  unidad 1 semestre 2
Estructuras de control unidad 1 semestre 2
 
Unidad III Estructuras basicas repetitivas.pptx
Unidad III Estructuras basicas repetitivas.pptxUnidad III Estructuras basicas repetitivas.pptx
Unidad III Estructuras basicas repetitivas.pptx
 
Guia 4
Guia 4Guia 4
Guia 4
 
2ª unidad de algoritmo
2ª unidad de algoritmo2ª unidad de algoritmo
2ª unidad de algoritmo
 
Case for ymas
Case for ymasCase for ymas
Case for ymas
 
Guía Práctica de Diagramas de Flujo
Guía Práctica de Diagramas de FlujoGuía Práctica de Diagramas de Flujo
Guía Práctica de Diagramas de Flujo
 
programacion estructurada
programacion estructuradaprogramacion estructurada
programacion estructurada
 
Estructuras
EstructurasEstructuras
Estructuras
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Estructuras de control secuencial
Estructuras de control secuencialEstructuras de control secuencial
Estructuras de control secuencial
 
Manual
ManualManual
Manual
 
5 c iterative
5 c iterative5 c iterative
5 c iterative
 
Estructuras de control de flujo
Estructuras de control de flujoEstructuras de control de flujo
Estructuras de control de flujo
 
Estructuras algoritnicas de control
Estructuras algoritnicas de controlEstructuras algoritnicas de control
Estructuras algoritnicas de control
 
3. ESTRUCTURAS DE CONTROL C.pptx
3. ESTRUCTURAS DE CONTROL C.pptx3. ESTRUCTURAS DE CONTROL C.pptx
3. ESTRUCTURAS DE CONTROL C.pptx
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Benemérita universidad autónoma de puebla
Benemérita universidad autónoma de pueblaBenemérita universidad autónoma de puebla
Benemérita universidad autónoma de puebla
 
lp1t3.pdf
lp1t3.pdflp1t3.pdf
lp1t3.pdf
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Yy
YyYy
Yy
 

Más de htmrk

Nxvzdjkcafm
NxvzdjkcafmNxvzdjkcafm
Nxvzdjkcafmhtmrk
 
Fdmkdmfasmeofqw
FdmkdmfasmeofqwFdmkdmfasmeofqw
Fdmkdmfasmeofqwhtmrk
 
Efnsjdnfsuies
EfnsjdnfsuiesEfnsjdnfsuies
Efnsjdnfsuieshtmrk
 
Swrewer nuevo hoy
Swrewer nuevo hoySwrewer nuevo hoy
Swrewer nuevo hoyhtmrk
 
Llllllllllllllllllllllllllllllll
LlllllllllllllllllllllllllllllllLlllllllllllllllllllllllllllllll
Llllllllllllllllllllllllllllllllhtmrk
 
Raiz cuadrada
Raiz cuadradaRaiz cuadrada
Raiz cuadradahtmrk
 
Menu 12323
Menu 12323Menu 12323
Menu 12323htmrk
 
Promedio de exam
Promedio de examPromedio de exam
Promedio de examhtmrk
 
Mostrar valor menor
Mostrar valor menorMostrar valor menor
Mostrar valor menorhtmrk
 
Mostrar valor mayor
Mostrar valor mayorMostrar valor mayor
Mostrar valor mayorhtmrk
 
Menu
MenuMenu
Menuhtmrk
 
Funciones de ostia puta
Funciones de ostia putaFunciones de ostia puta
Funciones de ostia putahtmrk
 
Media12132
Media12132Media12132
Media12132htmrk
 
Edades
EdadesEdades
Edadeshtmrk
 
Incrementos
IncrementosIncrementos
Incrementoshtmrk
 
Lec11 metodos
Lec11 metodosLec11 metodos
Lec11 metodoshtmrk
 
2rias5me
2rias5me2rias5me
2rias5mehtmrk
 

Más de htmrk (19)

Nxvzdjkcafm
NxvzdjkcafmNxvzdjkcafm
Nxvzdjkcafm
 
Fdmkdmfasmeofqw
FdmkdmfasmeofqwFdmkdmfasmeofqw
Fdmkdmfasmeofqw
 
Efnsjdnfsuies
EfnsjdnfsuiesEfnsjdnfsuies
Efnsjdnfsuies
 
Swrewer nuevo hoy
Swrewer nuevo hoySwrewer nuevo hoy
Swrewer nuevo hoy
 
123
123123
123
 
123
123123
123
 
Llllllllllllllllllllllllllllllll
LlllllllllllllllllllllllllllllllLlllllllllllllllllllllllllllllll
Llllllllllllllllllllllllllllllll
 
Raiz cuadrada
Raiz cuadradaRaiz cuadrada
Raiz cuadrada
 
Menu 12323
Menu 12323Menu 12323
Menu 12323
 
Promedio de exam
Promedio de examPromedio de exam
Promedio de exam
 
Mostrar valor menor
Mostrar valor menorMostrar valor menor
Mostrar valor menor
 
Mostrar valor mayor
Mostrar valor mayorMostrar valor mayor
Mostrar valor mayor
 
Menu
MenuMenu
Menu
 
Funciones de ostia puta
Funciones de ostia putaFunciones de ostia puta
Funciones de ostia puta
 
Media12132
Media12132Media12132
Media12132
 
Edades
EdadesEdades
Edades
 
Incrementos
IncrementosIncrementos
Incrementos
 
Lec11 metodos
Lec11 metodosLec11 metodos
Lec11 metodos
 
2rias5me
2rias5me2rias5me
2rias5me
 

Último

Concepto de Estética, aproximación,Elena Olvieras
Concepto de Estética, aproximación,Elena OlvierasConcepto de Estética, aproximación,Elena Olvieras
Concepto de Estética, aproximación,Elena OlvierasAnkara2
 
diagrama sinóptico dcerfghjsxdcfvgbhnjdcf
diagrama sinóptico dcerfghjsxdcfvgbhnjdcfdiagrama sinóptico dcerfghjsxdcfvgbhnjdcf
diagrama sinóptico dcerfghjsxdcfvgbhnjdcfDreydyAvila
 
271706433-Horacio-Baliero-Casa-en-Punta-Piedras.pptx
271706433-Horacio-Baliero-Casa-en-Punta-Piedras.pptx271706433-Horacio-Baliero-Casa-en-Punta-Piedras.pptx
271706433-Horacio-Baliero-Casa-en-Punta-Piedras.pptxjezuz1231
 
presentacion-auditoria-administrativa-i-encuentro (1).ppt
presentacion-auditoria-administrativa-i-encuentro (1).pptpresentacion-auditoria-administrativa-i-encuentro (1).ppt
presentacion-auditoria-administrativa-i-encuentro (1).pptDerekLiberatoMartine
 
Origen del Hombre- cuadro comparativo 5to Sec
Origen del Hombre- cuadro comparativo 5to SecOrigen del Hombre- cuadro comparativo 5to Sec
Origen del Hombre- cuadro comparativo 5to Secssuser50da781
 
BIOGRAFIA MARIANO MELGAR presentacion en power point
BIOGRAFIA MARIANO MELGAR  presentacion en power pointBIOGRAFIA MARIANO MELGAR  presentacion en power point
BIOGRAFIA MARIANO MELGAR presentacion en power pointyupanquihuisahilario
 
ACUERDOS PARA PINTAR EDUCACION INICIAL.docx
ACUERDOS PARA PINTAR EDUCACION INICIAL.docxACUERDOS PARA PINTAR EDUCACION INICIAL.docx
ACUERDOS PARA PINTAR EDUCACION INICIAL.docxlizeth753950
 
Unitario - Serie Fotográfica - Emmanuel Toloza Pineda
Unitario - Serie Fotográfica - Emmanuel Toloza PinedaUnitario - Serie Fotográfica - Emmanuel Toloza Pineda
Unitario - Serie Fotográfica - Emmanuel Toloza PinedaEmmanuel Toloza
 
CERTIFICADO para NIÑOS, presentacion de niños en la iglesia .pptx
CERTIFICADO para NIÑOS, presentacion de niños en la iglesia .pptxCERTIFICADO para NIÑOS, presentacion de niños en la iglesia .pptx
CERTIFICADO para NIÑOS, presentacion de niños en la iglesia .pptxMaikelPereira1
 
Mapa-conceptual-de-la-Primera-Guerra-Mundial.pptx
Mapa-conceptual-de-la-Primera-Guerra-Mundial.pptxMapa-conceptual-de-la-Primera-Guerra-Mundial.pptx
Mapa-conceptual-de-la-Primera-Guerra-Mundial.pptxMaraMilagrosBarrosMa
 
La Importancia de la Universidad como Institución Social.pdf
La Importancia de la Universidad como Institución Social.pdfLa Importancia de la Universidad como Institución Social.pdf
La Importancia de la Universidad como Institución Social.pdfloquendo1901
 
PA2_BITACORA _Taipe_Turpo_Teves_Sumire_Suma.pptx
PA2_BITACORA _Taipe_Turpo_Teves_Sumire_Suma.pptxPA2_BITACORA _Taipe_Turpo_Teves_Sumire_Suma.pptx
PA2_BITACORA _Taipe_Turpo_Teves_Sumire_Suma.pptxJOELORELLANA15
 
la configuyracion del territorio peruano
la configuyracion del territorio peruanola configuyracion del territorio peruano
la configuyracion del territorio peruanoEFRAINSALAZARLOYOLA1
 
Europa y la Exploración del continente americano.pptx
Europa y la Exploración del continente americano.pptxEuropa y la Exploración del continente americano.pptx
Europa y la Exploración del continente americano.pptxismaelchandi2010
 
Trabajo historia sobre el Renacimiento en la arquitectura
Trabajo historia sobre el Renacimiento en la arquitecturaTrabajo historia sobre el Renacimiento en la arquitectura
Trabajo historia sobre el Renacimiento en la arquitecturaccastilloojeda12
 

Último (15)

Concepto de Estética, aproximación,Elena Olvieras
Concepto de Estética, aproximación,Elena OlvierasConcepto de Estética, aproximación,Elena Olvieras
Concepto de Estética, aproximación,Elena Olvieras
 
diagrama sinóptico dcerfghjsxdcfvgbhnjdcf
diagrama sinóptico dcerfghjsxdcfvgbhnjdcfdiagrama sinóptico dcerfghjsxdcfvgbhnjdcf
diagrama sinóptico dcerfghjsxdcfvgbhnjdcf
 
271706433-Horacio-Baliero-Casa-en-Punta-Piedras.pptx
271706433-Horacio-Baliero-Casa-en-Punta-Piedras.pptx271706433-Horacio-Baliero-Casa-en-Punta-Piedras.pptx
271706433-Horacio-Baliero-Casa-en-Punta-Piedras.pptx
 
presentacion-auditoria-administrativa-i-encuentro (1).ppt
presentacion-auditoria-administrativa-i-encuentro (1).pptpresentacion-auditoria-administrativa-i-encuentro (1).ppt
presentacion-auditoria-administrativa-i-encuentro (1).ppt
 
Origen del Hombre- cuadro comparativo 5to Sec
Origen del Hombre- cuadro comparativo 5to SecOrigen del Hombre- cuadro comparativo 5to Sec
Origen del Hombre- cuadro comparativo 5to Sec
 
BIOGRAFIA MARIANO MELGAR presentacion en power point
BIOGRAFIA MARIANO MELGAR  presentacion en power pointBIOGRAFIA MARIANO MELGAR  presentacion en power point
BIOGRAFIA MARIANO MELGAR presentacion en power point
 
ACUERDOS PARA PINTAR EDUCACION INICIAL.docx
ACUERDOS PARA PINTAR EDUCACION INICIAL.docxACUERDOS PARA PINTAR EDUCACION INICIAL.docx
ACUERDOS PARA PINTAR EDUCACION INICIAL.docx
 
Unitario - Serie Fotográfica - Emmanuel Toloza Pineda
Unitario - Serie Fotográfica - Emmanuel Toloza PinedaUnitario - Serie Fotográfica - Emmanuel Toloza Pineda
Unitario - Serie Fotográfica - Emmanuel Toloza Pineda
 
CERTIFICADO para NIÑOS, presentacion de niños en la iglesia .pptx
CERTIFICADO para NIÑOS, presentacion de niños en la iglesia .pptxCERTIFICADO para NIÑOS, presentacion de niños en la iglesia .pptx
CERTIFICADO para NIÑOS, presentacion de niños en la iglesia .pptx
 
Mapa-conceptual-de-la-Primera-Guerra-Mundial.pptx
Mapa-conceptual-de-la-Primera-Guerra-Mundial.pptxMapa-conceptual-de-la-Primera-Guerra-Mundial.pptx
Mapa-conceptual-de-la-Primera-Guerra-Mundial.pptx
 
La Importancia de la Universidad como Institución Social.pdf
La Importancia de la Universidad como Institución Social.pdfLa Importancia de la Universidad como Institución Social.pdf
La Importancia de la Universidad como Institución Social.pdf
 
PA2_BITACORA _Taipe_Turpo_Teves_Sumire_Suma.pptx
PA2_BITACORA _Taipe_Turpo_Teves_Sumire_Suma.pptxPA2_BITACORA _Taipe_Turpo_Teves_Sumire_Suma.pptx
PA2_BITACORA _Taipe_Turpo_Teves_Sumire_Suma.pptx
 
la configuyracion del territorio peruano
la configuyracion del territorio peruanola configuyracion del territorio peruano
la configuyracion del territorio peruano
 
Europa y la Exploración del continente americano.pptx
Europa y la Exploración del continente americano.pptxEuropa y la Exploración del continente americano.pptx
Europa y la Exploración del continente americano.pptx
 
Trabajo historia sobre el Renacimiento en la arquitectura
Trabajo historia sobre el Renacimiento en la arquitecturaTrabajo historia sobre el Renacimiento en la arquitectura
Trabajo historia sobre el Renacimiento en la arquitectura
 

Control Estructuras Java

  • 1. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Lección 10: Estructuras de Control Autor: José Navarro Referencias: Texto del curso: Texto del Curso: “Java How to Program: Late Objects Version” 8va. Ed., Capítulo 3 (Control Statements Part 1) y Capítulo 4 (Control Statements Part 2) Texto suplementario: Big Java 3ra Ed. capítulos 5-6 Objetivos Explicar la operación de diferentes estructuras de control Diseñar programas que utilicen estructuras de control Diseñar programas utilizando apropiadamente la estructura if Diseñar programas utilizando apropiadamente la estructura if ... else ... Explicar el funcionamiento de los operadores relacionales Diseñar código que utilice apropiadamente los operadores relacionales Listar las funciones lógicas disponibles en el lenguaje Diseñar código que utilice apropiadamente las funciones lógicas Indentar adecuadamente programas en Java Diseñar programas utilizando apropiadamente la estructura while Diseñar programas utilizando apropiadamente la estructura for Diseñar programas utilizando apropiadamente la estructura switch Diseñar programas utilizando apropiadamente la estructura do ... while Bosquejo 10.0 Introducción 10.1 Estructura if 10.2 Estructura if...else 10.3 Estructura while 10.4 Estructura for 10.5 Estructura switch para Selecciones Múltiples (utilizando el comando break) 10.6 Estructura switch para Selecciones Múltiples (sin utilizar el comando break) 10.7 Problemas de práctica Comentario Antes de comenzar esta lección queremos indicar que la misma es bastante extensa. La razón para ello es que quisimos incluir todas las estructuras de control en una sola
  • 2. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 lección. El profesor del curso le indicará en qué fechas tiene que estudiar cuáles secciones de la lección. 10.0 Introducción Este es uno de las lecciones más importantes de este curso. Aquí aprenderemos las estructuras de control que permitirán a nuestros programas tomar decisiones y realizar repeticiones. Estas son las características que hacen a los programas de computadoras tan útiles, poder tomar decisiones y realizar cantidades extraordinarias de repeticiones sin cansarse. Las expresiones lógicas son utilizadas mayormente en la construcción de estructuras de control. Las estructuras de control permiten alterar la secuencia de la ejecución del programa. Un resumen de las estructuras de control se presenta en la siguiente tabla: Tabla 1: Resumen de las Estructuras de Control while (condicion) { bloque de instrucciones } if (condicion) { bloque de instrucciones } else { otro bloque de instrucciones } if (condicion) { bloque de instrucciones } Forma Repetición: repite el bloque de instrucciones mientras la condición es cierta while Condicional: ejecuta el primer bloque de instrucciones si la condición es cierta y el segundo en caso contrario if …else Condicional: ejecuta el bloque de instrucciones se la condición es cierta if funciónEstructura
  • 3. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Tabla 1: (continuación) switch (expr) { case const1: bloque1 de instrucciones1 <break>; case const2: bloque2 de instrucciones <break;> … <default: bloqued de instrucciones> } for (expr1; expr2; expr3) { bloque de instrucciones } Forma Condicional: expr representa un valor entero o tipo char. El valor de char se compara, comenzando por el tope, con cada uno de los valores a la derecha de los case. Si los valores son iguales se ejecuta el bloque de instrucciones que le sigue. Si un break se encuentra al final se termina el switch de lo contrario se ejecutan los demás bloques que están debajo. La opción default indica el proceso que será ejecutado en caso de que ningún case sea cierto. switch Repetición: expr1 es una expresión en la que se inicializa el valor de una variable de control. xxpr2 representa la condición que debe ser cierta para que el ciclo se continue repitiendo. expr3 es la acción que se ejecutará al final de cada ciclo. for funciónEstructura
  • 4. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Tabla 1: (continuación) Repetición: similar al while pero en este caso la condición se verifica luego de ejecutar el bloque de instrucciones. Esta estructura garantiza que el bloque se ejecutará al menos una vez, ya que la condición no se verifica hasta que el bloque es ejecutado al menos una vez. do { bloque de instrucciones } while (condicion); do…while En las próximas subsecciones presentamos ejemplos sobre la implementación de estructuras en Java. Para facilitar el entendimiento de las mismas presentamos un pedazo genérico de flujograma en donde se implementa una estructura de control (como un condicional) y al lado derecho presentamos cómo se codificaría en Java. Seguido del código genérico presentamos un ejemplo utilizando una sección de un flujograma y el código correspondiente al lado derecho. Una vez se ha presentado la construcción general de la estructura se da uno o más ejemplos de programas utilizando la misma.
  • 5. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011
  • 6. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Programa If01.java 1 //If01.java 2 //programa para leer dos valores e imprimir 3 //el mayor de ambos 4 5 import java.util.Scanner; 6 public class If01 7 { 8 public static void main( String args[] ) 9 { 10 Scanner input = new Scanner( System.in ); 11 12 //Declaración de variables 13 int valor1, 14 valor2, 15 mayor = 0; //es necesrio inicializarla 16 //porque sus valores siempre 17 //se actualizarán en condicionales 18 19 System.out.print("Entre el primer valor : "); 20 valor1 = input.nextInt(); 21 System.out.print("Entre el segundo valor : "); 22 valor2 = input.nextInt(); 23 24 if (valor1 > valor2) 25 { 26 mayor = valor1; 27 } 28 if (valor2 >= valor1) 29 { 30 mayor = valor2; 31 } 32 33 System.out.println("El valor mayor es: " + mayor); 34 } 35 } Explicación Este programa muestra el uso de la estructura if para la toma de decisiones. El programa lee dos valores e imprime el mayor de los dos. La línea 24 analiza la condición valor1 > valor2 (En Java las condiciones se escriben siempre entre paréntesis) Si la condición es cierta, se ejecutará el bloque de instrucciones
  • 7. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 que se encuentra debajo (líneas 25 a la 27). Si el bloque de instrucciones se compone de más de una instrucción es necesario encerrarlo entre corchetes „{„ para que el compilador entienda que el grupo completo de instrucciones será ejecutado si la condición es cierta. Si el bloque de instrucciones se compone de una sola instrucción (como en este caso) no es necesario escribir los corchetes, sin embargo, es preferible escribirlos de forma tal que la estructura de los programas sea consistente, así que siempre usaremos los corchetes. La línea 28 analiza la condición valor2 >= valor1. Si la condición es cierta entonces se ejecuta el bloque de instrucciones que se encuentra en las líneas de la 29 a la 31. Como pueden notar en el programa el valor de la variable mayor se modifica dentro de los dos condicionales (líneas 26 y 30). Si el valor de mayor no se hubiese inicializado (asignado un valor inicial) en la línea 15, o en otra línea que no dependiera de una condición, Java habría dado un error porque nos estaríamos arriesgando a utilizar una variable en la línea 33 que no tenía valor asignado. Si analizamos el código notamos es uno de los dos condicionales obligatoriamente tiene que ser cierto y por lo tanto mayor siempre tendría un valor antes de llegar a la línea 33, pero el compilador no es “tan inteligente”. Pruebe compilar el programa sin asignarle un valor cuando declare la variable. Un ejemplo de la corrida de este programa se presenta en la siguiente figura. ¼¼§ÏEntre el primer valor : 4 ¼¼§ÏEntre el segundo valor : 3 ÏϧÏEl valor mayor es: 4
  • 8. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 10.2 Estructura if...else condicion bloque 1 nota >= 90 print “A” bloque 2 print “B” Ejemplo : if (condicion) { bloque1 } else { bloque2 } if (nota >= 90) { System.out.println(“A”); } else { System.out.println(“B”); }
  • 9. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Programa If02.java 1 //If02.java 2 //programa para leer dos valores e imprimir 3 //el mayor de ambos usando la estructura 4 //if ... else ... 5 6 import java.util.Scanner; 7 public class If02 8 { 9 public static void main( String args[] ) 10 { 11 Scanner input = new Scanner( System.in ); 12 13 //Declaración de variables 14 int valor1, 15 valor2, 16 mayor = 0; //es necesrio inicializarla 17 //porque sus valores siempre 18 //se actualizarán en condicionales 19 20 System.out.print("Entre el primer valor : "); 21 valor1 = input.nextInt(); 22 System.out.print("Entre el segundo valor : "); 23 valor2 = input.nextInt(); 24 25 if (valor1 > valor2) 26 { 27 mayor = valor1; 28 } 29 else 30 { 31 mayor = valor2; 32 } 33 34 System.out.println("El valor mayor es: " + mayor); 35 } 36 } Explicación Este programa realiza la misma la misma función que If01 pero en lugar de utilizar dos estructuras if utiliza una estructura if...else. Si la condición en la línea 25 es cierta entonces se ejecutará la instrucción en la línea 27, de lo contrario se ejecutará la instrucción en la línea 31. Note que esta alternativa es mejor a la de utilizar dos if porque
  • 10. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 aparte de requerir menos código se ejecuta más eficientemente. Utilizando dos if se realizan dos comparaciones mientras que aquí se ejecuta sólo una. Un ejemplo de la corrida se presenta a continuación. ¼¼§ÏEntre el primer valor : 6 ¼¼§ÏEntre el segundo valor : 9 ÏϧÏEl valor mayor es: 9
  • 11. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 1 //If03.java 2 //programa para leer tres valores e imprimir 3 //el mayor usando estructuras if ... else ... 4 //anidadas 5 6 import java.util.Scanner; 7 public class If03 8 { 9 public static void main( String args[] ) 10 { 11 Scanner input = new Scanner( System.in ); 12 13 //Declaración de variables 14 int valor1, 15 valor2, 16 valor3, 17 mayor = 0; 18 19 System.out.print("Entre el primer valor : "); 20 valor1 = input.nextInt(); 21 System.out.print("Entre el segundo valor : "); 22 valor2 = input.nextInt(); 23 System.out.print("Entre el tercer valor : "); 24 valor3 = input.nextInt(); 25 26 if ( (valor1 >= valor2) && (valor1 >= valor3) ) 27 { 28 mayor = valor1; 29 } 30 else 31 { 32 if (valor2 >= valor3) 33 { 34 mayor = valor2; 35 } 36 else 37 { 38 mayor = valor3; 39 } 40 } 41 42 System.out.println("El valor mayor es: " + mayor); 43 } 44 }
  • 12. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Explicación Este programa lee tres números e imprime el mayor de los tres. Para lograr esto se utilizan dos if anidados (uno dentro del otro). El primer if (línea 26) verifica si valor1 es el mayor de los tres, de ser así lo guarda en mayor, de ser falso entonces se ejecuta el bloque correspondiente al else de la línea 30. El bloque del else de la línea 30 es otra estructura if...else... En este condicional no es necesario realizar una comparación utilizando valor1 ya que si se llegó hasta este punto en el programa es porque valor1 no es el mayor. En este condicional (línea 32) se comparan valor2 y valor3, si valor2 es el mayor entonces se imprime el mismo, de lo contrario se imprime valor3.
  • 13. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 10.3 Estructura while para Repeticiones condicion bloque de instrucciones Ejemplo : a < 100 a=a+1 a = 5 print a*a //formato del while //en Java while (condición) { bloque de instrucciones } a = 5; while (a < 100) { System.out.println(a*a); a = a + 1; }
  • 14. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Ejemplo 01 de la Estructura While start contador = 0 suma = 0 contador < 10 print “Entre un valor: “ input valor suma=suma+valor contador=contador +1 print “La suma es”,suma end 1 //while01.java 2 //Programa para calcular la suma de 3 //10 valores 4 5 import java.util.Scanner; 6 7 public class While01 { 8 public static void main( String args[]) 9 { 10 int contador = 0, 11 suma = 0, 12 valor; 13 14 Scanner input = new Scanner(System.in); 15 16 while (contador < 10) 17 { 18 System.out.print("Entre un valor: "); 19 valor = input.nextInt(); 20 suma = suma + valor; 21 contador++; 22 }//termina el while 23 24 System.out.println("La suma es: " + suma);
  • 15. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 25 } 26 } Explicación Este programa presenta la utilización de la estructura while. El programa se mantiene leyendo valores mientras (while) no haya leído diez. Según se van leyendo los diez valores los mismos se van sumando al acumulador suma que inicialmente contiene un valor de 0. Luego de leer los diez valores y acumular la suma la misma se imprime. El flujograma correspondiente al programa se presenta antes del mismo. La línea 16 incluye el comienzo de la estructura while en donde se coteja si la condición contador < 10 es cierta o falsa. Si la condición es cierta se ejecuta el bloque de instrucciones que se encuentra bajo el while. Este bloque de instrucciones se encierra entre corchetes para que el compilador pueda determinar dónde comienza y donde termina. Si el bloque de instrucciones consta de una sola instrucción no es necesario utilizar los corchetes. Sin embargo, en este curso siempre utilizaremos los corchetes para mantener la consistencia. Recuerde que el código contenido entre corchetes debe estar indentado para facilitar el manejo del programa. Incluso si el bloque consta de una sola instrucción la misma debe estar indentada con respecto al while. El bloque de instrucciones que será ejecutado mientras la condición del while es cierta se encuentra de las líneas 18 a la 21. Note que el bloque está indentado con respecto a los corchetes en las líneas 17 y 22. Note además que ambos corchetes están alineados con el while. Esta forma de alinear los corchetes e indentar el bloque de instrucciones se utiliza también en las estructuras if, if...else, for y do...while. La línea 19 se utiliza para leer el valor entrado por el usuario. Sólo una línea es necesaria ya que la misma se ejecuta diez veces (las veces que se ejecuta el ciclo) y por lo tanto será suficiente para leer los diez valores. La línea 20 acumula el valor en la variable suma. La línea 21 incrementa el valor de contador por uno (1). Esta línea es importante ya que es la que logra que eventualmente la condición del while sea falsa. El bloque de todo while debe incluir una o más instrucciones que persiga que eventualmente la condición sea falsa ya que de lo contrario la estructura quedaría atrapada en un ciclo infinito. Mientras la condición es cierta el bloque de instrucciones se ejecuta en orden. Cada vez que se llega a la última línea del bloque se regresa arriba a examinar la condición del while si la condición es cierta se ejecuta el bloque nuevamente, de ser falsa se pasa a ejecutar la primera instrucción que se encuentra luego del bloque. La línea 24 se encarga de imprimir el valor de la suma. A continuación se presenta un ejemplo de la corrida.
  • 16. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Programa while02.java 1 //while02.java 2 //Programa para calcular el promedio de 3 //n valores positivos utilizando un indicador 4 5 import java.util.Scanner; 6 7 public class While02 { 8 public static void main( String args[]) 9 { 10 int contador = 0; 11 float suma = 0, 12 valor = 0, 13 promedio; 14 15 Scanner input = new Scanner(System.in); 16 17 //La lectura de los valores se detiene 18 //cuando se entra un valor negativo 19 20 while (valor >= 0) 21 { 22 System.out.print("Entre un valor: "); 23 valor = input.nextFloat(); 24 suma = suma + valor; 25 contador++; 26 }//termina el while 27 ¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: 10 ¼¼§ÏEntre un valor: 10 ¼¼§ÏEntre un valor: 10 ¼¼§ÏEntre un valor: 10 ¼¼§ÏEntre un valor: 10 ÏϧÏLa suma es: 75
  • 17. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 28 //La siguiente instrucción evita que el 29 //valor negativo se mantenga dentro de 30 //la suma ya que no nos interesa 31 32 suma = suma - valor; 33 34 //La siguiente suma resta 1 al contador 35 //para no tomar en consideración el 36 //incremento que se hace cuando se 37 //lee el valor negativo 38 39 contador--; 40 41 promedio = suma / contador; 42 43 System.out.println("El promedio es: " + promedio); 44 } Explicación Este programa calcula el promedio de n valores positivos utilizando el siguiente procedimiento: leer valores e ir acumulando la suma hasta que se lea un valor negativo, en ese momento se divide la suma entre los valores leídos y se imprime el resultado. El procedimiento para calcular la suma es parecido al utilizado en el programa while01, la diferencia estriba en que en primer programa se sabía de antemano cuántos valores se leerían y en este caso no. La línea 10 inicializa a cero el valor de la variable valor. Esto es necesario para garantizar que la condición de while sea cierta la primera vez que se ejecuta, de hecho, cualquier valor mayor o igual a cero cumple con este propósito. Es una mala técnica de programación el utilizar en un condicional o cómputo una variable que no ha sido inicializada previamente de forma explícita. La estructura while se mantiene ejecutando mientras que el valor leído no sea negativo, el bloque de instrucciones acumula la suma de los valores (línea 24) e incrementa por uno la variable contador cada vez que se lee un valor. El promedio se puede calcular como la suma de los valores dividido entre el total de valores (línea 41) sin embargo, la forma en que está codificado este ciclo while provoca que el último número leído (el valor negativo) sea sumado junto con los demás valores y que además sea contado. Para solucionar este problema en la línea 32 se le resta a suma el último valor leído (que corresponde al valor negativo) y en la línea 39 se le resta 1 a la variable contador.
  • 18. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Este programa presenta una deficiencia, ¿qué ocurriría si el primer número entrado fuera negativo? ¿Cuál sería el valor del promedio? Se deja al estudiante el modificar el programa para que contemple y maneje adecuadamente una situación como ésta. A continuación se presenta un ejemplo de la corrida del programa. 10.4 Estructura for para Repeticiones La estructura for se utiliza generalmente para ejecutar un bloque de instrucciones un número específico de veces. O sea, si por ejemplo usted necesita que un bloque de instrucciones se ejecute n veces en lugar de utilizar una estructura while es preferible utilizar una estructura for. Todas las estructuras iterativas (con múltiples repeticiones) se pueden implementar con un while pero en los casos en que se puede determinar la cantidad de iteraciones de antemano es más sencillo utilizar una estructura for. Además, la lógica de la estructura for es más fácil de entender que la estructura while. El formato de la estructura for es el siguiente: for (contador = valor_inicial; condicion; accion) { instrucciones } La variable contador se puede usar como un índice que va contando el número de iteraciones. valor_inicial es el valor que se le asignará al índice al comienzo de la primera iteración. condición es una expresión lógica que tiene que ser cierta para que los ciclos de esta estructura iterativa se continúen repitiendo. Aunque el lenguaje acepta cualquier expresión lógica en general se escribe una condición que verifica que el valor del índice no ha excedido una cantidad determinada. Por ejemplo, que el del índice sea menor que un valor n. accion es una instrucción que se ejecutará al final de cada ciclo (iteración). En general esta instrucción se utiliza para incrementar o decrementar el valor del índice pero puede ser otro tipo de instrucción también. ¼¼§ÏEntre un valor: 3 ¼¼§ÏEntre un valor: 4 ¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: -1 ÏϧÏEl promedio es: 4.0
  • 19. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Ejemplo 10.4.1 El siguiente ejemplo muestra un programa que imprime los valores del 1 al 10. Primero se muestra el flujograma y luego el programa de forma que se pueda apreciar la relación entre ambos. Ejemplo 10.4.2 El siguiente ejemplo muestra un programa que lee 5 valores, determina el promedio e imprime el mismo. public class ForEx { public static void main(String args[]) { int i; for (i = 1; i <= 10; i++) { System.out.println(i); } } }
  • 20. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Programa For01.java 1 //For01.java 2 //Programa para calcular el promedio de 5 valores 3 //utilizando la estructura for 4 5 import java.util.Scanner; 6 7 public class For01 { 8 public static void main( String args[]) 9 { 10 11 Scanner input = new Scanner(System.in); 12 13 int contador; 14 float suma = 0, 15 valor, 16 promedio; 17 18 for (contador = 1; contador <= 5; contador++) 19 { 20 System.out.print("Entre un valor: "); 21 valor = input.nextFloat(); 22 suma = suma + valor; 23 }//termina el for 24 25 promedio = suma / 5; 26 27 System.out.println("Promedio = " + promedio); 28 } 29 } Explicación Este programa presenta la utilización de la estructura for. La estructura for facilita la implementación de un ciclo cuando se conoce de antemano cuántas veces será ejecutado. En este ejemplo se desea ejecutar un ciclo 5 veces para leer 5 valores distintos (uno en cada fase del ciclo). Los valores serán sumados en una variable (suma) y al final este total será dividido entre 5 para determinar el promedio. La línea 18 presenta el comienzo de la estructura for. El ciclo inicializa la variable contador con un valor de 1, y el ciclo se continuará ejecutando mientras contador tenga un valor menor o igual a 5 (contador <= 5). Cada vez que se complete la ejecución del bloque de instrucciones la variable contador se incrementará por 1 (contador++)*. Como se puede apreciar, si el contador comienza en 1, se incrementa en 1 al final de la
  • 21. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 ejecución del bloque y el ciclo se continuará ejecutando mientras contador sea menor o igual a 5, entonces el ciclo se ejecutará exactamente 5 veces. Al igual que en otras estructuras el bloque de instrucciones que pertenece a la estructura for se encuentra encerrado entre corchetes. Si el bloque consta de sólo una instrucción, no es necesario utilizar corchetes, sin embargo, utilizaremos siempre los corchetes para mantener consistencia a través de todos nuestros programas. Recuerde que el código dentro de los corchetes debe estar indentado con respecto a los corchetes y que los corchetes que abren y cierran el bloque deben estar alineados con el for. * contador++ provoca que el mismo resultado que contador = contador + 1. Esta forma de incrementar el valor de una variable resulta en un código de ejecución más eficiente. Por otro lado, la expresión podría resultar confusa para las personas que no conocen Java o C++ Ejemplo de la ejecución del programa. Ejemplo 10.4.3 El siguiente ejemplo muestra un programa que puede calcular el promedio de cualquier cantidad de valores. El programa primero pide como dato cuántos valores se van a entrar para calcular el promedio y luego procede con la lectura de los valores. Note que en este caso el total de valores no se conoce antes de comenzar la ejecución del programa pero el programa va a tener el valor antes de llegar a la sección de la lectura de los valores que se usarán para el cómputo. Por lo tanto en este caso también se puede utilizar una estructura for. ¼¼§ÏEntre un valor: 3 ¼¼§ÏEntre un valor: 23.4 ¼¼§ÏEntre un valor: 54.3 ¼¼§ÏEntre un valor: -30 ¼¼§ÏEntre un valor: 9 ÏϧÏPromedio = 11.94
  • 22. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Programa For02.java 1 //For02.java 2 //Programa para calcular el promedio de n valores 3 //utilizando la estructura for 4 5 import java.util.Scanner; 6 7 public class For02 { 8 public static void main( String args[]) 9 { 10 11 Scanner input = new Scanner(System.in); 12 13 int n; 15 float suma = 0, 16 valor, 17 promedio; 18 19 System.out.print("Número de valores: "); 20 n = input.nextInt(); 21 22 for (int i = 1; i <= n; i++) 23 { 24 System.out.print("Entre un valor: "); 25 valor = input.nextFloat(); 26 suma = suma + valor; 27 }//termina el for 28 29 //En la próxima línea como n es de tipo int 30 //y se quiere hacer un cómputo con lugares 31 //decimales se hace un type cast para tratar 32 //a n como si fuera un valor float 33 34 promedio = suma / (float) n; 35 36 System.out.println("Promedio = " + promedio); 37 } 38 } Explicación Este programa presenta la utilización de una estructura for para calcular el promedio de n valores. En este programa, a diferencia del programa For01, la cantidad de veces que se ejecutará que el bloque de instrucciones dentro del ciclo, no se conoce hasta el momento de ejecución del programa.
  • 23. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 La línea 19 del programa le indica al usuario que debe entrar el valor que indica cuántos valores se van a sumar para calcular el promedio. En la línea 20 lee el valor del teclado y lo almacena en la variable n. La línea 22 es la que indica cuántas veces se habrá de ejecutar el bloque de instrucciones. En este caso el bloque de instrucciones se ejecutará n veces, desde que i = 1 hasta que i = n. En la línea 22 también se introduce un concepto nuevo, la declaración de una variable dentro de la misma estructura. En lugar de declarar la variable i antes de la estructura for, ésta se puede declarar dentro la misma. Es importante recordar que si una variable se declara dentro de una estructura entonces sólo estará disponible dentro de esa estructura. Si tratamos de utilizarla en otro lugar del programa recibiremos un mensaje de que la misma no está disponible. Ejemplo de la corrida del programa Ejemplo 10.4.4 El siguiente ejemplo muestra un programa que lee las puntuaciones de n exámenes de 100 puntos y determina el promedio y la nota correspondiente al mismo Programa For03.java 1 //For03.java 2 //Programa para calcular el promedio de n exámenes 3 //de 100 puntos y determinar la nota 4 //correspondiente. 5 6 import java.util.Scanner; 7 8 public class For03 { 9 public static void main( String args[]) 10 { 11 12 Scanner input = new Scanner(System.in); 13 14 int n; 15 float suma = 0, 16 valor, ¼¼§ÏNúmero de valores: 3 ¼¼§ÏEntre un valor: 1 ¼¼§ÏEntre un valor: 2 ¼¼§ÏEntre un valor: 4 ÏϧÏPromedio = 2.3333333
  • 24. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 17 promedio; 18 19 System.out.print("Total de exámenes: "); 20 n = input.nextInt(); 21 22 for (int i = 1; i <= n; i++) 23 { 24 System.out.print("Entre puntuación del examen: "); 25 valor = input.nextFloat(); 26 suma = suma + valor; 27 }//termina el for 28 29 promedio = suma / (float) n; 30 System.out.println("Promedio = " + promedio); 31 32 if (promedio >= 90) 33 { 34 System.out.println("Nota = A"); 35 } 36 else 37 { 38 if (promedio >= 80) 39 { 40 System.out.println("Nota = B"); 41 } 42 else 43 { 44 if (promedio >= 70) 45 { 46 System.out.println("Nota = C"); 47 } 48 else 49 { 50 if (promedio >= 60) 51 { 52 System.out.println("Nota = D"); 53 } 54 else 55 { 56 System.out.println("Nota = F"); 57 } 58 } 59 } 60 } 61 } 62 }
  • 25. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Explicación Este programa es una extensión del programa For02. En este caso se leerán n valores para calcular el promedio de los mismos. Sin embargo, en este caso se le da una interpretación específica a estos valores, los mismos representan los resultados de n exámenes (asumiendo que los mismos tienen un valor máximo de 100). La extensión principal al programa viene luego de calculado el promedio. El promedio de los exámenes es utilizado para determinar la nota del estudiante utilizando la siguiente curva: 100 – 90 A <90 – 80 B <80 – 70 C <70 – 60 D <60 F Para determinar la nota del estudiante se utiliza un grupo de if anidados. El primer if se encuentra en la línea 32. Si el promedio se mayor o igual que 90 entonces se ejecuta la línea 34 y se imprime la nota „A‟. Si la condición en la línea 32 resulta falsa entonces se pasa a ejecutar el bloque de instrucciones perteneciente al else que se encuentra en la línea 36. Este bloque está compuesto por todas las instrucciones que van desde la línea 37 a la 60. Si la ejecución del programa llega a este bloque es indicativo de que el promedio no es mayor o igual a 90, por lo tanto lo primero que se hace es verificar si el promedio es el correspondiente a una calificación de „B‟. La línea 38 coteja esta condición, si el promedio es mayor o igual a 80 entonces se imprime la nota „B‟ (línea 40), de lo contrario se ejecuta el bloque de instrucciones correspondiente al else de la línea 42. De forma similar se verifica si el promedio es el correspondiente a una nota de „C‟ o „D‟. La línea 50 verifica si el promedio es correspondiente a una „D‟, si esta condición es falsa entonces la única opción restante es „F‟ y esta nota se imprime en la línea 56. Un ejemplo de la corrida se presenta a continuación Ejemplo 10.4.5 El siguiente ejemplo muestra una manera alterna para organizar las estructuras if anidadas. ¼¼§ÏTotal de exámenes: 3 ¼¼§ÏEntre puntuación del examen: 87 ¼¼§ÏEntre puntuación del examen: 92 ¼¼§ÏEntre puntuación del examen: 81 ÏϧÏPromedio = 86.666664 ÏϧÏNota = B
  • 26. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Programa For04.java 1 //For04.java 2 //Ejemplo del uso del if ... else if ... 3 4 import java.util.Scanner; 5 6 public class For04 { 7 public static void main( String args[]) 8 { 9 10 Scanner input = new Scanner(System.in); 11 12 int n; 13 float suma = 0, 14 valor, 15 promedio; 16 17 System.out.print("Total de exámenes: "); 18 n = input.nextInt(); 19 20 for (int i = 1; i <= n; i++) 21 { 22 System.out.print("Entre puntuación del examen: "); 23 valor = input.nextFloat(); 24 suma = suma + valor; 25 }//termina el for 26 27 promedio = suma / (float) n; 28 System.out.println("Promedio = " + promedio); 29 30 if (promedio >= 90) 31 { 32 System.out.println("Nota = A"); 33 } 34 else if (promedio >= 80) 35 { 36 System.out.println("Nota = B"); 37 } 38 else if (promedio >= 70) 39 { 40 System.out.println("Nota = C"); 41 } 42 else if (promedio >= 60) 43 { 44 System.out.println("Nota = D");
  • 27. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 45 } 46 else 47 { 48 System.out.println("Nota = F"); 49 } 50 } 51 } Explicación El propósito de este programa es presentar una forma alterna de escribir los if anidados como los que se presentaron en el programa For03. La lógica de este programa es idéntica a la lógica del programa For03, sin embargo, noten que los if no están escritos de la misma forma. A continuación explicamos cómo se logra realizar esta modificación. El siguiente ejemplo presenta una sección de programa con if anidados. 1. if (condicion1) 2. { 3. bloque1 4. } 5. else 6. { 7. if (condicion2) 8. { 9. bloque2 10. } 11. else 12. { 13. bloque3 14. } 15. } Para efectos de la construcción de un programa, una estructura (if, if...else, while, do...while o for) completa se considera como una unidad, esto es, se puede ver como si fuese una sola instrucción. Por lo tanto si el bloque dentro una estructura es otra estructura, no es necesario encerrarlo entre corchetes siempre y cuando no esté acompañado de instrucciones adicionales. De esta forma el bloque de instrucciones correspondiente al else de la línea 5 no necesita los corchetes que se encuentran en las líneas 6 y 15. El código quedaría como se presenta a continuación:
  • 28. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 1. if (condicion1) 2. { 3. bloque1 4. } 5. else 7. if (condicion2) 8. { 9. bloque2 10. } 11. else 12. { 13. bloque3 14. } Esta forma de escribir el código no altera de forma alguna la lógica del programa. Java permite que más de una línea de código se escriba en la misma línea, por lo tanto el código de la línea 7. se puede escribir al lado del código en la línea 5 y entonces el código quedaría como se presenta a continuación: 1. if (condicion1) 2. { 3. bloque1 4. } 5. else if (condicion2) 8. { 9. bloque2 10. } 11. else 12. { 13. bloque3 14. } Como el bloque 2 y el bloque 3 corresponden a la partes cierta y falsa del if en la línea 5, podemos moverlas para la izquierda, entonces el código quedaría así: 1. if (condicion1) 2. { 3. bloque1 4. } 5. else if (condicion2) 8. { 9. bloque2 10. } 11. else 12. { 13. bloque3 14. }
  • 29. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 caso 1 bloque de instrucciones con break al final caso 2 bloque de instrucciones con break al final Si se incluye default se ejecuta este bloque Vemos entonces que cuando el contenido de un else es una estructura if entonces podemos unir el else y el if en la misma línea escribiendo un else if (condicion). Esta forma de escribir el código resulta más adecuada en ocasiones como esta en la que todas las condiciones se refieren a valores distintos de la misma variable o expresión. 10.5 Estructura switch para Selecciones Múltiples (utilizando el comando break) Las estructuras switch se utilizan para implementar un grupo de condicionales consecutivos en donde todas las condiciones evalúan una misma expresión y se toma la decisión de qué bloque de instrucciones ejecutar en base al valor de la expresión. Las expresiones pueden producir valores de tipo byte, short, int o char. Ningún otro tipo de valor es permitido. Cuando se coloca la instrucción break al final de un bloque de instrucciones la ejecución de la misma hace que la ejecución del programa continúe luego del final de la estructura. En el caso de la estructura switch el efecto de ejecutar el break es que no se ejecute ninguno de los bloques que pertenecen a los demás casos. Si no se escribe el break entonces la ejecución del programa continúa con el próximo bloque que se encuentre debajo. switch (expresion) { case 1: { bloque de instruc- ciones que se ejecutará si expresion = 1 } case 2: { bloque de instruc- ciones que se ejecutará si expresion = 2 } default: { bloque de instruc- ciones que se ejecu- tará si ninguna de las anteriores es cierta } }
  • 30. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 10.6 Estructura switch para Selecciones Múltiples (sin utilizar el comando break) La siguiente figura muestra la secuencia en que se ejecutarían los bloques de instrucciones si no se utiliza la instrucción. caso 1 bloque de instrucciones sin break al final caso 2 bloque de instrucciones sin break al final Si se incluye default se ejecuta este bloque caso 3 bloque de instrucciones sin break al final
  • 31. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Programa switch01.cpp 1 //Switch01.java 2 //Programa para determinar el mayor, la suma 3 //y el promedio de dos valores utilizando un 4 //menú. El programa muestra el uso de la 5 //estructura switch. 6 7 import java.util.Scanner; 8 9 public class Switch01 { 10 public static void main( String args[]) 11 { 12 13 Scanner input = new Scanner(System.in); 14 15 int opcion = 0; 16 float valor1, 17 valor2, 18 suma, 19 promedio; 20 21 System.out.print("Entre dos valores" + 22 " separados por un espacio: "); 23 valor1 = input.nextFloat(); 24 valor2 = input.nextFloat(); 25 while (opcion != 9) //la opción 9 termina el while 26 { 27 System.out.println("n1. mayor"); 28 System.out.println("2. suma"); 29 System.out.println("3. promedio"); 30 System.out.println("9. salirn"); 31 32 System.out.print("Seleccione opción: "); 33 34 opcion = input.nextInt(); 35 36 switch (opcion) 37 { 38 case 1: 39 { 40 if (valor1 > valor2) 41 { 42 System.out.println("mayor: " + valor1); 43 } 44 else
  • 32. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 45 { 46 System.out.println("mayor: " + valor2); 47 } 48 break; 49 } 50 case 2: 51 { 52 suma = valor1 + valor2; 53 System.out.println("suma: " + suma); 54 break; 55 } 56 case 3: 57 { 58 promedio = (valor1 + valor2) / (float) 2.0; 59 System.out.println("promedio: " + promedio); 60 break; 61 } 62 case 9: 63 { 64 //no se hace nada 65 break; 66 } 67 default: 68 { 69 System.out.println("Opción incorrecta"); 70 } 71 } 72 } 73 } 74 } Explicación En muchas ocasiones, el código de un programa requiere una serie de if anidados en donde todas las condiciones son diferentes valores de una misma variable o expresión, similar a como vimos en el programa For04. Si los valores de esta variable son enteros o caracteres, entonces la estructura puede ser implementada con una estructura switch. La forma en que se escribe esta estructura, aunque implementa la misma lógica de los if anidados resulta más fácil de asociar (generalmente) con la lógica para resolver el problema que los if anidados. Este programa le pide al usuario que entre tres valores y le presenta la opción de imprimir el mayor de los dos, la suma o el promedio. Una vez que el usuario entra la opción deseada, el programa imprime el resultado correspondiente y nuevamente presenta las opciones, si el usuario desea terminar la ejecución del programa selecciona la alternativa
  • 33. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 9. En caso de que el usuario seleccione una alternativa incorrecta, entonces el programa le imprimirá el mensaje correspondiente. Como se desea que el programa se mantenga imprimiendo las opciones (menú) y leyendo las opciones hasta que el usuario desee dar por terminada la ejecución del programa, el grueso del programa está contenido en un while que cubre las líneas de la 25 a la 72. Para garantizar la ejecución del while la primera vez que se llega a él, es necesario garantizar que la condición (opcion != 9) sea cierta. Para lograr esto se inicializa el valor de opcion a un valor distinto a 9. En la línea 15 se inicializa el valor de opción con un 0. El valor con que se inicialice la variable sólo tiene como condición el no ser 9. El comienzo del bloque del while comienza con las líneas que imprimen las opciones (líneas 27 a la 30). La línea 32 lee la opción seleccionada por el usuario y la guarda en la variable opcion. La estructura switch contiene las opciones de selección para el usuario e indica el procedimiento que será seguido según la opción seleccionada. Al final del procedimiento correspondiente a cada opción se incluye el comando break, este comando evita que el programa continúe su ejecución en la siguiente línea del switch y lo obliga a salir de la estructura. Esto no es siempre necesario y en algunos casos, dependiendo la lógica que se desea implementar, el break no es utilizado en una o más de las opciones. En caso de que el usuario entre la opción 9 la estructura switch hace “absolutamente nada”, es por esto que sólo incluye un comentario indicando la situación. En caso de que el usuario entre una opción incorrecta el switch lo manejará con la opción default e imprime el mensaje “opción incorrecta”. A continuación se muestra un ejemplo de la corrida del programa ¼¼§ÏEntre dos valores separados por un espacio: 10 15 ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir ÏÏ§Ï ¼¼§ÏSeleccione opción: 1 ÏϧÏmayor: 15.0 ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir
  • 34. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 ÏÏ§Ï ¼¼§ÏSeleccione opción: 2 ÏϧÏsuma: 25.0 ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir ÏÏ§Ï ¼¼§ÏSeleccione opción: 3 ÏϧÏpromedio: 12.5 ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir ÏÏ§Ï ¼¼§ÏSeleccione opción: 4 ÏϧÏOpción incorrecta ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir ÏÏ§Ï ¼¼§ÏSeleccione opción: 5 ÏϧÏOpción incorrecta ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir ÏÏ§Ï ¼¼§ÏSeleccione opción: 9 ÏϧÏ
  • 35. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 Programa de ejemplo utilizando valores tipo char para hacer las selecciones La estructura switch permite utilizar valores de tipo char para realizar las selecciones. Sin embargo, si se va a construir un programa para que el usuario entre por el teclado los valores que se utilizarán para realizar las selecciones la situación es más compleja que si se utilizan valores enteros. Utilizando objetos de la clase Scanner podemos utilizar el método nextInt() para leer un valor entero y podemos utilizar directamente ese valor en la estructura switch para que se seleccione cuál es la selección correspondiente. Sin embargo, la clase Scanner no nos provee un método para leer un solo carácter. Para leer un solo carácter podemos utilizar otros mecanismos que provee Java, sin embargo, eso nos causa la siguiente situación: Cuando un usuario entra un carácter por el teclado, además del carácter que se desea entrar se entran otros caracteres especiales, como el que indica el final de la línea. Ese carácter no es visible al usuario pero está incluido en la entrada. Luego de que el programa lee el primer carácter, el próximo que se procesará es el próximo en la línea, aunque no corresponda al carácter que explícitamente quiere entrar el usuario. Esta situación requiere que se busquen métodos para descartar los caracteres no deseados. En el ejemplo que mostramos próximamente se presenta una alternativa para utilizar el carácter entrado explícitamente por el usuario y descartar los demás que componen la línea. Para hacer esto se utilizará el método charAt(). Este método permite extraer de un string el carácter que se encuentra en la posición indicada por el argumento entre paréntesis. Por ejemplo, la instrucción elCaracter = elString.charAt(3); extrae del string elString el caracter que se encuentra en la posición 3 y almacena el mismo en la variable elCarater. Es importante señalar que las posiciones comienzan en la posición 0, o sea que el primer carácter del string se encuentra en la posición 0 (no en la 1). //Programa para mostrar el uso de la estructura switch //cuando los valores utilizados para realizar las //selecciones son de tipo char import java.util.Scanner; class switchStructUsingChars { public static void main(String args[]) { Scanner input = new Scanner( System.in ); char alternativaChar; //variable que contendrá el
  • 36. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 //caracter seleccionado //por el usuario String linea = ""; do { System.out.println(" M E N U"); System.out.println("a. Saludo"); System.out.println("b. Despedida"); System.out.println("c. Comentario"); System.out.println("x. Salir del programa"); //Se lee la línea completa en donde el usuario //entró la alternativa ya que Scanner no provee //para leer un sólo caracter. linea = input.next(); //El método charAt() en la próxima instrucción //permite extraer de un string el caracter que //se encuentra en la posición indicada por el //argumento. //En este caso se utiliza para extraer el que //se encuentra en la posición 0 del string //que es donde se encuentra el caracter entrado //por el usuario. Las otras posiciones contienen //otros caracteres como el que indica el final //de la línea. alternativaChar = linea.charAt(0); switch (alternativaChar) { case 'a': System.out.println("Hola, que gusto verte."); break; case 'b': System.out.println("Nos vemos luego."); break; case 'c': System.out.println("Qué bonito está el día!"); break; default: System.out.print("La alternativa seleccionada"); System.out.println(" no es válida. Favor seleccionar"); System.out.println("otra alternativa.");
  • 37. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 break; } } while (alternativaChar != 'x'); } } Ejemplo de la ejecución del programa ÏÏ§Ï M E N U ÏϧÏa. Saludo ÏϧÏb. Despedida ÏϧÏc. Comentario ÏϧÏx. Salir del programa ¼¼§Ïa ÏϧÏHola, que gusto verte. ÏÏ§Ï M E N U ÏϧÏa. Saludo ÏϧÏb. Despedida ÏϧÏc. Comentario ÏϧÏx. Salir del programa ¼¼§Ïb ÏϧÏNos vemos luego. ÏÏ§Ï M E N U ÏϧÏa. Saludo ÏϧÏb. Despedida ÏϧÏc. Comentario ÏϧÏx. Salir del programa ¼¼§Ïc ÏϧÏQué bonito está el día! ÏÏ§Ï M E N U ÏϧÏa. Saludo ÏϧÏb. Despedida ÏϧÏc. Comentario ÏϧÏx. Salir del programa ¼¼§Ïd ÏϧÏLa alternativa seleccionada no es válida. Favor seleccionar ÏϧÏotra alternativa. ÏÏ§Ï M E N U ÏϧÏa. Saludo ÏϧÏb. Despedida ÏϧÏc. Comentario ÏϧÏx. Salir del programa ¼¼§Ïx ÏϧÏLa alternativa seleccionada no es válida. Favor seleccionar ÏϧÏotra alternativa.
  • 38. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 10.7 Problemas de Práctica 1. Diseñe un programa que lea dos números e indique si la suma de ambos es mayor o si el producto de ambos es mayor. 2. Diseñe un programa que imprima los números del 1000 al 0 en decrementos de 4. 3. Diseñe un programa que lea un número e indique si el mismo es igual a cero, es positivo, o es negativo. 4. Codifique el siguiente flujograma start A=5 B=20 A>B print A*B A=A+2 B=B-3 print A,B end 5. Codifique el siguiente flujograma
  • 39. COMP 2315 : Programación Estructurada Estructuras de Control José Navarro 2011 start end print “ro” print “alfa” print “beta” print “delta” input A,B B<9 A>B A>5