You are on page 1of 19

LCDO. ABDON CABRERA TORRES, MSC.

Programacion Estructurada: 2do. semestre

Estructuras de control
Objetivos Aprender a utilizar las sentencias if para modificar la secuencia de ejecucin de un programa. Familiarizarse con los operadores lgicos y de comparacin de java, y aprender a utilizarlos para describir condiciones complejas. Aprender a utilizar la sentencia switch para alterar la secuencia de ejecucin de un programa. Reconocer operaciones repetitivas, entender los diferentes tipos de ciclos que existen en java y aprender a seleccionar el tipo de ciclo ms adecuado para cada problema que requiera una evaluacin repetitiva Aprender cmo y cundo anidar un ciclo dentro de otro ciclo. Aprender a utilizar variables boolean. Aprender a validar datos de entrada.

Introduccin
Las estructuras de control controlan el flujo de ejecucin de un programa. Las instrucciones o sentencias se organizan en tres tipos de estructuras de control: Secuencial Seleccin ( decisin ) Repeticin Hasta el momento se ha utilizado el tipo secuencial.

Estructura de seleccin if
En java la estructura de control de seleccin principal es una sentencia if. La sentencia if tiene tres alternativas o formatos posibles . El formato ms sencillo tiene la siguiente sintaxis: if ( e x p r e s i o n l o g i c a ) { sentencia } Expresin lgica: determina si la accin se ha de ejecutar sentencia: Se ejecuta si la expresin lgica es verdedera sta sintaxis se utiliza cuando se quiere hacer una cosa o no hacer nada. Otra forma de representar la sentencia if es:

LCDO. ABDON CABRERA TORRES, MSC.

Programacion Estructurada: 2do. semestre

if ( c o n d i c i o n ) { sentencia ( s ) ; } Condicion: Es una expresin lgica Sentencia: es cualquier sentencia ejecutable que se ejecutar solo si la condicin es verdadera Debe considerar que cada bloque de sentencias debe ir encerrado en un juego de llaves
============================================================================= EJEMPLO #8 =============================================================================

/** * * * @author: Adolfo Cabrera * @version 1.00 2011/4/20 * * Este programa permite ingresar un nmero e imprime El nmero es Par * si es que lo es, caso contrario no imprime nada, por cualquiera de los dos casos finalizar */ import java.util.Scanner; public class NumParImpar { public static void main(String[] args) { Scanner Dato = new Scanner(System.in); int numero,residuo; System.out.println("VALIDAR NUMERO PAR O IMPAR"); System.out.println(); System.out.print("Ingrese un nmero: "); numero=Dato.nextInt(); residuo=numero % 2; if (residuo==0) { System.out.println("El nmero es par"); } System.out.print(fin de proceso de verificacin); } // fin de main }// fin de clase NumParImp

LCDO. ABDON CABRERA TORRES, MSC.

Programacion Estructurada: 2do. semestre

============================================================================= EJERCICIO #9 =============================================================================

/******************************************************************************* * * @(#)PruebaOracion.java * * @objetivo: este programa verifica que exista un punto al final de la oracin * se utilizara el mtodo charAt() para comprobar el ltimo carcter * @author * @version 1.00 2012/4/21 ******************************************************************************** / import java.util.Scanner; public class PruebaOracion {

public static void main(String[] args) { Scanner dato = new Scanner(System.in); String oracion; int carUltPosicion; System.out.print("Introduzca una oracion: "); oracion = dato.nextLine(); carUltPosicion = oracion.length() - 1 ; if (oracion.charAt(carUltPosicion) != '.') { System.out.println("Captura Invalida: Su oracion requiere un punto.."); } } // fin de main } // fin de la clase PruebaOracion

LCDO. ABDON CABRERA TORRES, MSC.

Programacion Estructurada: 2do. semestre

Estructura de seleccin ifelse


Esta estructura se la utiliza cuando se quiere hacer una u otra cosa. Condicion: determina si la accin se ha de ejecutar Sentencia-1-v: Se ejecuta si la condicion es verdedera Sentencia-1-f: Se ejecuta si la condicion es false ======================================================== EJERCICIO #10

Sintaxis:
if ( condicion ) { sentencia-1-v; sentencia-2-v; .. sentencia-n-v; } else { sentencia-1-f; sentencia-2-f; .. sentencia-n-f; }

/************************************************* * @author: Adolfo Cabrera * @version 1.00 2011/4/20 * * Este programa permite ingresar un numero e imprime si es * par o impar *************************************************/ import java.util.Scanner; public class NumParImpar { public static void main(String[] args) { Scanner Dato = new Scanner(System.in); int numero,residuo; System.out.println("VALIDAR NUMERO PAR O IMPAR"); System.out.println(); System.out.print("Ingrese un nmero: "); numero=Dato.nextInt(); residuo=numero % 2; if (residuo==0) { System.out.println("El nmero es par"); } else { System.out.println("El nmero es impar"); System.out.println("fin de proceso de verificacin"); } // fin de main } // fin de clase NumParImpar

LCDO. ABDON CABRERA TORRES, MSC.

Programacion Estructurada: 2do. semestre

Estructuras ifelse anidadas


Hasta este punto, las sentencias if implementan decisiones que implican una o dos alternativas. Se puede utilizar la sentencia if para implementar decisiones que impliquen diferentes alternativas. Una sentencia if es anidada cuando la secuencia de la rama verdadera o la rama falsa es a su vez una sentencia if. Una sentencia if anidada se puede utilizar para implementar decisiones con varias alternativas o multialternativas.

Sintaxis: if ( condicion-1 ) { Sentencia(s)-1 } else if ( condicion-2 ) { Sentencia(s)-2 . } else if ( condicion-n ) { sentencia(s)-n } else { sentencia(s)-e }
============================================================================= EJERCICIO #11 ============================================================================= /** * * Para ingresar datos por teclado se utilizara una clase para que maneje * esta situacin. * La clase se encuentra en la libreria de utilidades que viene incorporada en el * JDK de java. la clase se llama Scanner.Para usar esta clase debe importarla * @author: Adolfo Cabrera * @version 1.00 2011/4/20 */ import java.util.Scanner; public class NotasConIf {

public static void main(String[] args) {

LCDO. ABDON CABRERA TORRES, MSC.

Programacion Estructurada: 2do. semestre Scanner Dato = new Scanner(System.in); int n1; int n2; int n3; int suma; float promedio; /* La linea a continuacion espera que el usuario ingrese el texto * Cuando presiona la tecla Enter, inmediatamente * los despliega en pantalla */ System.out.println("C A L C U L O D E C A L I F I C A C I O N E S"); System.out.println(); System.out.print("Ingrese el nombre: "); Dato.nextLine(); System.out.print("Nota del primer trimestre:" ); n1=Dato.nextInt(); System.out.print("Nota del segundo trimestre:" ); n2=Dato.nextInt(); System.out.print("Nota del tercer trimestre:" ); n3=Dato.nextInt(); suma = n1+n2+n3; promedio=suma/(float)3; //Impresion de los resultados System.out.println(); System.out.print("Suma total: "); System.out.println(suma); System.out.print("Promedio: "); System.out.print(promedio); //Averiguar por los promedios if (promedio>=18.5) System.out.println(" Sobresaliente"); else if (promedio>=15.5) System.out.println(" Muy Bueno"); else if (promedio>=13.5) System.out.println(" Bueno"); else if (promedio>=11.5) System.out.println(" Regular"); else System.out.println(" Insuficiente"); } //fin de main } // fin de clase NotasConIf

NOTA: no se puede utilizar el operador de comparacin == para comparar cadenas de caracteres.

LCDO. ABDON CABRERA TORRES, MSC.

Programacion Estructurada: 2do. semestre

Por ejemplo:
Scanner dato = new Scanner(System.in); String respuesta; System.out.print(Intreoduzca s o S : ); respuesta = dato.nextLine(); if ( respuesta == s || respuesta == S) { System.out.println(Eso es todo..); } Cuando se inserta en un mtodo main, esto compila, pero no funciona.

Razn: ambos son variables de referencia y apuntan a una direccin.

Solucin
Para solucionar este problema, se debe utilizar el mtodo equals para probar la igualdad de dos cadenas de caracteres. Este mtodo compara los objetos tipo String referenciados por una direccin de memoria. El siguiente fragmento presenta la solucin corregida:

If (respuesta.equals(s) || respuesta.equals(s)) { System.out.println(Eso es todo..); }

O, como una alternativa ms compacta, se puede utilizar el mtodo equalsIgnoreCase como se presenta a continuacin:

If (respuesta.equalsIgnoreCase(s) { System.out.println(Eso es todo..); }

Una tercera alternativa es utilizar el mtodo charAt de la clase String para convertir la cadena de entrada en un carcter y despus utilizar el operador == para comparar ese carcter con los caracteres literales S y s.

LCDO. ABDON CABRERA TORRES, MSC.

Programacion Estructurada: 2do. semestre

Char resp = respuesta.charAt(0); If ( resp == s || resp == s ) { System.out.println(Eso es todo..); }

SENTENCIA DE CONTROL switch La sentencia switch es una sentencia de java que se utiliza para seleccionar una de entre mltiples alternativas. La sentencia switch es especialmente til cuando la seleccin se basa en el valor de una variable simple o de una expresin simple denominada expresin de control o selector. El valor de sta expresin puede ser de tipo int o char, pero NO de tipo float ni double.
SINTAXIS switch ( <expression de control> ) { case constante: sentencia(s)-1 ; break ; case constante: sentencia(s)-2 ; break ; . . case constante: sentencia(s)-n ; break ; default : sentencia-d ; // es opcional } ============================================================================= EJERCICIO #12 =============================================================================

/** * * Programa que ingresa el nombre y el estado civil en codigo de 1 a 5 * y dependiendo del codigo presentar en letras el estado respectivo */ import java.util.Scanner; public class Estado_Switch {

LCDO. ABDON CABRERA TORRES, MSC.

Programacion Estructurada: 2do. semestre

public static void main(String[] args) { Scanner Dato = new Scanner(System.in); int estado; /* La linea a continuacion espera que el usuario ingrese el texto * Cuando presiona la tecla Enter, inmediatamente * los despliega en pantalla */ System.out.println("D A T O S P E R S O N A L E S"); System.out.println(); System.out.print("Ingrese el nombre: "); Dato.nextLine(); System.out.print("Codigo del estado civil (1-5):" ); estado=Dato.nextInt(); // Dependiendo del estado civil presentar un mensaje respectivo switch(estado) { case 1: System.out.println("Soltero");break; case 2: System.out.println("Casado");break; case 3: System.out.println("Viudo");break; case 4: System.out.println("Divorciado");break; case 5: System.out.println("Union Libre");break; default: System.out.println("Cdigo erroneo"); } System.exit(0); }// fin de main } //fin de clase Estado_Switch

NOTA: break provoca la finalizacin del grupo de sentencias y salta a la siguiente lnea de debajo de la llave de cierre del bloque switch

LCDO. ABDON CABRERA TORRES, MSC.

10

Programacion Estructurada: 2do. semestre

Estructuras de control.
Una de Las caractersticas de las computadoras que aumentan considerablemente su potencia, es su capacidad para ejecutar una tarea muchas veces con gran velocidad, precision y fiabilidad. java soporte tres tipos de estructuras de control: Los bucles while, do..while y for. Estas estructuras de control o sentencias repetitivas controlan el nmero de veces que una sentencia o lista de sentencias se ejecutan. El ciclo while Un bucle ( ciclo ) es cualquier construccin de programa que repite una sentencia o secuencia de sentencias un nmero de veces. La sentencia ( o grupo de sentencias ) que se repiten en un bloque se denomina cuerpo del bucle y cada repeticin del cuerpo del bucle se llama iteracin del bucle. Sintaxis: while ( condicin-bucle ) { sentencia-1 ; sentencia-2 ; Cuerpo del ciclo sentencia-n ; } // fin de while Como trabaja el ciclo while 1. Verifica la condicin del ciclo while 2. Si la condicin es verdadera, ejecuta el cuerpo del ciclo while y repite el paso 1 3. Si la condicin es falsa, salta hacia abajo del cuerpo del ciclo while y contina con la siguiente sentencia. ================================================================== EJEMPLO #13 ================================================================== /* * Programa que visualiza todos los * valores de x en forma decreciente desde el 10 */

LCDO. ABDON CABRERA TORRES, MSC.

11

Programacion Estructurada: 2do. semestre

public class generar { public static void main(String[] args) { int x=10; while (x>0) { System.out.println("x = " + x); x--; } ; System.out.println("Perfecto !!!"); System.exit(0); } // fin de main } // fin de clase generar

================================================================== EJEMPLO #14 ==================================================================

/** * Este programa crea un Registro de mesa de regalos para una boda. el programa * solicita al usuario informacin de dos cosas: un regalo y la tienda donde * puede comprarse. cuando el usuario ha introducido y almacenado los valores, * el programa imprime la lista del registro. * */ import java.util.Scanner; public class RegistroBoda { public static void main(String[] args) { Scanner dato = new Scanner(System.in); String registro = ""; char mas = 's';

LCDO. ABDON CABRERA TORRES, MSC.

12

Programacion Estructurada: 2do. semestre

while (mas == 's' || mas == 'S') { System.out.print("Introduzca el nombre del articulo: "); registro += dato.nextLine() + " - " ; System.out.print("Tienda: "); registro += dato.nextLine() + "\n"; System.out.println(); System.out.print("Algun otro articulo? (s/n): "); mas = dato.nextLine().charAt(0); } if ( !registro.equals("")) { System.out.println("\nRegistro de bodas: \n" + registro); } } // fin de main } // fin de clase RegistroBoda

Ejercicio Propuesto: Calcular el espacio total de un departamento (Area), indicndole la cantidad de cuartos que tiene el departamento.

El ciclo do..while
Un ciclo do se utiliza para especificar un bucle condicional que se ejecuta al menos una vez. Sintaxis: do { sentencia-1 ; sentencia-2 ; sentencia-n ; } while ( condicin-bucle)

LCDO. ABDON CABRERA TORRES, MSC.

13

Programacion Estructurada: 2do. semestre

Como trabaja el ciclo do 1. Ejecuta el cuerpo del ciclo do 2. Verifica la condicin final 3. Si la condicin es verdadera, vuelve a la parte de arriba del ciclo do y repite el paso 1 4. Si la condicin es falsa contina con la sentencia que aparece inmediatamente despus del ciclo. ================================================================== EJEMPLO #15 ================================================================== /******************************************** * @author * Programa que visualiza todos los * valores de x en forma decreciente desde el 10 ********************************************/ public class generar1 { public static void main(String[] args) { int x=10; do { System.out.println("x = " + x); x--; }while (x>0); System.out.println("Perfecto !!!"); System.exit(0); } // fin de main } // fin de clase

* * *

Ejercicio Propuesto: 1. Calcular el espacio total de un departamento (Area), indicndole la cantidad de cuartos que tiene el departamento. 2. Realizar un programa que genere un men de cinco opciones en la que la ltima opcin de la orden de finalizar el programa

LCDO. ABDON CABRERA TORRES, MSC.

14

Programacion Estructurada: 2do. semestre

El ciclo for
El ciclo for ( bucle for ) es un mtodo para ejecutar un bloque de sentencias un nmero fijo de veces, es cecir, cuando se sabe el nmero exacto de iteraciones antes de que inicie.: Sintaxis: for ( var_control = valor ; condicin ; incremento/decremento) { sentencia-1 ; sentencia-2 ; sentencia-n ; }

Como trabaja el ciclo for 1. Inicializacin de componentes: antes de quese ejecute la primera instruccin, dentro del ciclo, ejecutar la inicializacin del componente: var_control = valor 2. Condicin del componente Antes de que se realice cualquier iteracin, evaluar la condicin del componente: Si la condicin es verdadera, ejecutar el cuerpo del ciclo. Si la condicin es falsa, terminar el ciclo y pasar a la sentencia debajo de la llave de cierre del cuerpo del ciclo. 3. Actualizacin del componente: despus de cada ejecucin dentro del cuerpo del ciclo volver al encabezado del ciclo y ejecutar la actualizacin del componente. Posteriormente, volver a verificar la continuacin de la condicin del segundo componente, y si se satisface, ir al cuerpo del ciclo otra vez.

================================================================== EJEMPLO #16

/********************************** * Programa que visualiza todos los * valores de x=1 hasta x=10 * **********************************/

LCDO. ABDON CABRERA TORRES, MSC.

15

Programacion Estructurada: 2do. semestre

public class For_next1 { public static void main(String[] args) { int x; for(x=1;x<=10;x++) { System.out.println("x = " + x); } System.out.println("Okey !!!"); System.exit(0); } // fin de main } // fin de clase For_next1

SENTENCIAS break y continue La sentencia break termina la ejecucin de un bucle, de una sentencia switch, en general de cualquier sentencia. La sentencia continue ha hecho que la ejecucin vuelva a la cabecera del bucle for
================================================================== EJEMPLO #17 utilizando break ==================================================================

/** * Programa que visualiza todos los * valores de x con interrupcion, la sentencia break * interrumpe el proceso for y lo termina */
public class For_next2 { public static void main(String[] args) { int x;

LCDO. ABDON CABRERA TORRES, MSC.

16

Programacion Estructurada: 2do. semestre

for(x=1;x<=15;x++) { if (x>10) { System.out.println("ya supero la decena"); break; } System.out.println("x = " + x); } System.out.println("Okey !!!"); System.exit(0); } // fin de main } // fin de clase For_next2 ================================================================== EJEMPLO #18 uitilizando continue ==================================================================

/** * Programa que visualiza todos los * valores de x con interrupcion, la sentencia continue * salta al final del bucle pero continua el bucle */
public class For_next3 { public static void main(String[] args) { int x; for(x=1;x<=15;x++) { if (x>10) { System.out.println("ya supero la decena"); continue; } System.out.println("x = " + x); }

LCDO. ABDON CABRERA TORRES, MSC.

17

Programacion Estructurada: 2do. semestre

System.out.println("Okey !!!"); System.exit(0); } // fin de main } // fin de ciclo For:next3

Ciclos anidados
Un ciclo anidado es un ciclo que se encuentra en el interior de otro ciclo, Ejemplo: ================================================================== EJEMPLO #19 ciclo anidado ==================================================================

/************************************************************ * Este programa presenta la figura de un rectangulo * el tamao y el tipo de caracter utilizado para el grafico * es ingresado por teclado */ import java.util.Scanner; public class RectanguloCicloAnidado { public static void main(String[] args) { Scanner dato = new Scanner(System.in); int altura,anchura; char carImpresion; System.out.print("Altura del rectngulo: "); altura = dato.nextInt(); System.out.print("Ancho del rectngulo: "); anchura = dato.nextInt(); System.out.print("Introduzca el caracter a presentar en la figura:"); carImpresion = dato.next().charAt(0);

LCDO. ABDON CABRERA TORRES, MSC.

18

Programacion Estructurada: 2do. semestre

for (int fila = 1; fila <= altura; fila++) { for (int col = 1; col <= anchura; col++) { System.out.print(carImpresion); } System.out.println(); } } // fin de main } // fin de clase RectanguloCicloAnidado

Variables boolean Todas las condiciones que aparecen en las sentencias if y los ciclos se evalan como verdaderas o falsas. Java tambin puede evaluar una condicin con valores boolean, para esto, se debe definir una variable de ste tipo, es una variable que puede almacenar un valor de verdadero o falso. Para declarar una variable boolean, se debe especificar que es de ste tipo de la siguiente manera: Boolean nomVariable; ================================================================== EJEMPLO #20 ================================================================== public class variableBoolean { public static void main(String[] args) { boolean estado = false; if (estado) { System.out.println("El estado es verdadero"); } else { System.out.println("El estado es Falso"); } } //fin de main } // fin de clase variableBoolean

LCDO. ABDON CABRERA TORRES, MSC.

19

Programacion Estructurada: 2do. semestre

Resumen
Se puede alterar la secuencia de un programa usando la sentencia if. La eleccin entre las dos rutas alternativas la determina la veracidad de la condicin de las sentencia. Utilice la forma if, else if de la sentencia if para elegir entre tres o ms alternativas. Se deben utilizar parntesis de llavealrededor de dos o ms sentencias subordinadas dentro de una sentencia if, y es aconsejable utilizarlos aun cuando haya una sola sentencia subordinada. Los operadores de comparacin ( <, >, <=, >=, == y = ) tienen mayor prioridad que sus operadores lgicos and (&&) y or (||). Para negar el resultado de las operaciones lgicas && and y/o || or, debe encerrarse entre parntesisy precederlo con un operador !. Utilice la sentencia switch para elegir entre varias alternativas con base en identificadores de tipo int o char. Utilice case <nmero>: o case<carcter>: seguido de un break; para delimitar cada alternativa en una sentencia switch. Si la condicin en el encabezado de un ciclo while es verdadero, lo que est en el bloque subsiguiente se ejecuta y si la condicin contina siendo verdadera, la ejecucin se repite. Un ciclo do ejecuta su bloque (cuerpo) al menos una vez, y repite la ejecucin siempre que la condicin que aparece en el while final contine siendo verdadera. Un ciclo for ejecuta su bloque siempre y cuando la condicin en el segundo componente de su encabezado contine siendo verdadero. El primer componente en el encabezado inicializa una variable de cuenta antes de la primera ejecucin, y el tercer componente en el encabezado actualiza esa variable de conteo despus de cada ejecucin y antes de la siguiente evaluacin de la condicin del segundo componente. Se puede realizar iteraciones multidimensionables insertando un ciclo en otro ciclo. Para evitar la duplicacin y/o el desorden, se recomienda asignar expresiones lgicas complicadas a variables boolean, u utilizar esas variables en sentencias if o en condiciones de ciclos. Utilice validaciones de entrada de datos para evitar introducir datos errneos en los programas.

You might also like