La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Sentencias de repetición

Presentaciones similares


Presentación del tema: "Sentencias de repetición"— Transcripción de la presentación:

1 Sentencias de repetición
Programación

2 Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones en un programa usando sentencias do-while Implementar control con repeticiones en un programa usando sentencias for Anidar la sentencia de control de repetición de un bucle dentro de otra sentencia de repetición Elegir la sentencia de control de repetición adecuada para una tarea determinada Preguntar al usuario por una respuesta de tipo si-no usando el AnswerBox Formatear los datos de salida usando la clase Format del paquete javabook

3 Introducción Las sentencias de repetición controlan un bloque de código para que se ejecute un número fijo de veces o hasta que se cumple una determinada condición. En java existen tres tipos de ciclos: while, do-while, for

4 La sentencia while La sintaxis de la sentencia while es:
while (<expresión booleana>) <sentencias> int suma = 0, numero = 1; while (numero <= 20) { suma = suma + numero; numero = numero + 1; } Expresión booleana Sentencia Cuerpo del bucle

5 Diagrama de flujo int suma = 0; numero = 1; verdadero numero <= 20
suma = suma + numero; numero = numero + 1; falso

6 Valores de las variables en el ciclo
numero: 11 suma= 66 numero: 12 suma= 78 numero: 13 suma= 91 numero: 14 suma= 105 numero: 15 suma= 120 numero: 16 suma= 136 numero: 17 suma= 153 numero: 18 suma= 171 numero: 19 suma= 190 numero: 20 suma= 210 numero: 1 suma= 1 numero: 2 suma= 3 numero: 3 suma= 6 numero: 4 suma= 10 numero: 5 suma= 15 numero: 6 suma= 21 numero: 7 suma= 28 numero: 8 suma= 36 numero: 9 suma= 45 numero: 10 suma= 55

7 Producto de impares int producto = 1, numero = 1, contador = 20, ultimoNumero; ultimoNumero = 2 * contador -1; while (numero <= ultimoNumero) { producto = producto * numero; numero = numero + 2; }

8 Diagrama de flujo int producto = 0; numero = 1; contado = 20; ultimoNumero = 2*contador -1 numero<= ultimoNumero verdadero producto = producto * numero; numero = numero + 2; falso

9 Ciclos controlados por centinela
Lee la edad de una persona entre 0 y 130. int edad; edad = entrada.getInteger("Su edad entre 0 y 130 : "); while (edad < 0 || edad > 130) { System.out.pritnln("Se ha introducido una edad inválida.“ "intentelo de nuevo."); edad = entrada.getInteger("Su edad entre 0 y 130 : "); }

10 edad inválida. inténtelo de nuevo.
Diagrama de flujo edad edad < 0 || edad > 130? verdadero Se ha introducido una” edad inválida. inténtelo de nuevo. falso edad

11 Ciclos controlados por centinela
Lee enteros y calcula la suma hasta que se teclea un número negativo int suma = 0, numero; numero = entrada.getInteger(“Teclee un entero : "); while (numero >= 0) { suma = suma + numero; System.out.println("suma = "+suma); numero = entrada.getInteger("Teclee un entero : "); }

12 Tarea 1. Escriba una sentencia while que sume los números del 10 al 50. 2. Escriba un lazo while que sume los cuadrados de los número del 1 al 40. 3. Escriba una sentencia while para calcular el promedio de un conjunto de valores. La entrada de datos deberá terminar con un valor negativo, ¿es un bucle controlado por contador o por centinela? Debe tener un contador del número de valores que se introducen.

13 Ciclos infinitos Cuando la condición de un ciclo while es siempre verdadera, se tiene un ciclo infinito. byte contador = 1; while (contador != 10){ contador++; }

14 float contador = 0.0f; while (contador != 1.0f) contador = contador f; } contador = contador f;

15 float contador = 0.0f; while (contador <= 1.0f) contador = contador f; } contador = contador f;

16 Error de fuera por uno OBOE
int contador = 1; while (contador < 10) ... contador++; } int contador = 0; while (contador <= 10)

17 OBOE corregido int contador = 0; while (contador < 10) ...
} int contador = 1; while (contador <= 10)

18 Comprobaciones en las sentencias de control de repetición
1. Asegúrese de que el cuerpo del bucle contiene una sentencia que hará terminar al bucle en algún momento. 2. Asegúrese de que el bucle se repite exactamente un número correcto de veces. 3. Se quiere ejecutar el cuerpo del bucle N veces, entonces inicie el contador a 0 y use la condición de prueba contador < N o inicie el contador a 1 use la condición de prueba contador <= N.

19 Preguntas rápidas 1. ¿Cuál de los siguientes es un bucle infinito?
a. int suma = 0, i = 0; while (i >= 0){ Suma += i; i++; } b. int suma = 0, i = 100; while (i != 0){ Suma += i; i--; }

20 2. Para cada una de las siguientes sentencias de lazo, determine el valor de la suma después de que se haya ejecutado el lazo. a. int contador = 0,suma = 0; while (contador < 10){ suma += contador; contador++; } b. int contador = 1,suma = 0; while (contador <= 30){ suma += contador; contador += 3; } c. int contador = 0,suma = 0; while (contador < 20){ suma += 3*contador; contador += 2; }

21 La sentencia do-while La sintaxis de la sentencia do-while es: do
<sentencias> while (<expresión booleana>); int suma = 0, numero = 1; do { suma += numero; numero++; } while (numero <= 20); Expresión booleana Sentencia Cuerpo del bucle

22 Diagrama de flujo int suma = 0; numero = 1; suma += numero; numero++;
<= 20 verdadero falso

23 Lazo con centinela int edad; do { edad = entrada.getInteger( "Su edad entre 0 y 130 : "); if(edad < 0 || edad> 130) System.out.prinln("Se ha introducido” ” una edad inválida." "intentelo de nuevo."); } while (edad < 0 || edad> 130);

24 Condición compleja El bucle termina cuando se reciba el valor centinela 0, cuando se introduzca un número par o cuando la suma sea mayor que 100. suma = 0; do { num = entrada.getInteger(“teclee un entero:”); if(num == 0)// centinela mensaje.show(“suma = “+suma); else if(num % 2 ==0)// número par mensaje.show(“Error: número par”); else{ suma += num; if(suma>100)//mayor que mensaje.show(“Suma > 100”); } } while(!(num % 2 == 0 || num == 0 || suma > 100));

25 La condición anterior se puede expresar como sigue haciendo uso de la equivalencia: !(a || b) <==> !a && !b (num % 2 != 0 && num != 0 && suma <= 100);

26 boolean repetir = true;
suma = 0; do { num = entrada.getInteger(“teclee un entero:”); if(num == 0){ // centinela mensaje.show(“suma = “+suma); repetir = false; } else if(num % 2 ==0){ // número par mensaje.show(“Error: número par”); repetir = false; } else{ suma += num; if(suma>100)//mayor que mensaje.show(“Suma > 100”); repetir = false; } } while(repetir);

27 Preguntas rápidas 1. Escriba una sentencia do-while para calcular la suma de los primeros 30 enteros positivos e impares. 2. Reescriba los siguientes bucles while como bucles do-while a. int contador = 0, suma = 0; while(contador < 10){ suma += contador; contador++; } b. int contador = 1, suma = 0; while(contador <= 30){ suma += contador; contador += 3; }

28 La sentencia for La sintaxis de la sentencia for es:
for(<inicio>; <expresión booleana>; <incremento>) <sentencia> Expresión booleana inicio Incremento for( i = 0 ; i < 20 ; i++ ){ numero = entrada.getInteger(); suma += numero; } Sentencia

29 numero = entradagetInteger();
Diagrama de flujo <Inicio> i = 0; falso <Expresión booelana> i < 20 verdadero <Sentencia> numero = entradagetInteger(); suma += numero; i++; <incremento>

30 Cálculo del factorial El factorial de n se define como: n! = 1*2*3...*(n-1)*n SimpleInput entrada = new SimpleInput(); int n, contador; float producto = 1; n = entrada.getInteger(" Teclee un entero "); for(contador = 1; contador <= n; contador++) { producto = producto * contador; System.out.println("numero: " + contador " producto= " + producto); } System.out.println("El factorial es " + producto);

31 Caída libre Se deja caer un objeto desde una altura H, la posición P del objeto en el instante t esta dada por, P = –16t2 + H El instante en que toca el suelo se encuentra haciendo P = 0 en la ecuación anterior y es igual a t = (H/16)

32 Programa double alturaInicial, posicion,tiempoContacto; SimpleInput entrada = new SimpleInput(); alturaInicial = entrada.getDouble(" Altura inicial: "); tiempoContacto = Math.sqrt(alturaInicial/16.0); System.out.println( " Tiempo t posicion en el instante t "); for(int instante=0;instante<tiempoContacto;instante++){ posicion = -16.0*instante*instante+alturaInicial; System.out.pritnln(" " + instante+" " + posicion); } System.out.println(tiempoContacto + " 0.00");

33 Declaración dentro del for
El elemento inicio del for se pueden declarar variables: for(int i = 0; i < 10; i++) En lugar de int i for(i = 0; i < 10; i++) Los incrementos pueden ser por cualquier valor. for(int i=0; i<100; i+=5) // i = 0, 5, 10, ... for(int j=2; j<40; j*=2) // j = 2, 4, 8, 16, 32 for(int k=100; k>0; k--) // k = 100, 99, 98, ...

34 Preguntas rápidas 1. Escriba un bucle for para calcular:
a. La suma de 1, 2, ..., 100 b. La suma de 2, 4, ..., 500 c. El producto de 3, 5, 7, ..., 25 2. Reescriba los siguientes bucles while usando sentencias for, a. int contador = 0, suma = 0; while(contador < 10){ suma += contador; contador++; } b. int contador = 1, suma = 0; while(contador <= 30){ suma += contador; contador += 3; }

35 Preguntas rápidas Escriba sentencias for, do-while y while para calcular las siguientes sumas y productos a (220 -1) b /2 + 1/ /20 c. 1*2 + 2*3 + 3* *20 d. 1 x 2 x 4 x 8 x ... x 220

36 Lazos anidados Es posible tener una lazo dentro de otro. A esto se le llama anidamiento. int precio=100; salida.printLine(" "); for(int ancho = 11; ancho <= 20; ancho++) { salida.print(ancho + " "); for(int longitud = 5; longitud <= 25; longitud+=5){ salida.print(" " + precio); } salida.skipLine(1); }

37 Tabla de multimplicar static public void main(String[] args){ MainWindow ventana = new MainWindow(); OutputBox salida = new OutputBox(ventana); ventana.show(); salida.setTitle("Tabla de multiplicar"); salida.show(); salida.printLine(" ”+ “ "); for(int i = 1; i <= 10; i++) { salida.print(i + " "); for(int j = 1; j <= 10; j++){ salida.print(" " + i*j); } salida.skipLine(1); } }

38 Preguntas rápidas 1. ¿Cuál será la suma después de ejecutar los siguientes for anidados? a. Int suma = 0; for(int i=0; i<5; i++){ suma = suma + i; for(int j=0; i<5; j++){ suma = suma + j; } b. Int suma = 0; for(int i=0; i<5; i++){ suma = suma + i; for(int j=i; i<5; j++){ suma = suma + j; }

39 El juego alto bajo Escriba una aplicación que permita jugar Alto-Bajo con el usuario. Se generarán números secretos aleatorios entre 1 y 100. Cuando el usuario propone un número, el programa responde Alto o Bajo dependiendo si es mayor o menor que el número secreto. El número máximo de intentos es 6.

40 Generar número secreto
algoritmo inicio Generar número secreto intentos = 0 intentos = intentos + 1 num != secreto && intentos != 6? V num F F V num>secreto? V num == secreto? F F V Alto num<secreto? Fallo Acerto Bajo fin

41 Tarea 1. Escriba un método que devuelva true si el argumento es un número primo. 2. Utilizando el método del problema 1 escriba un método que liste todos los primos entre 1 y N , donde N es tecleado por el usuario. 3. Una terna de números a, b, c es cuadrada perfecta si a2 + b2 = c2. Por ejemplo, 3, 4, 5 es una terna cuadrada perfecta. Escriba un programa para obtener todos las ternas cuadradas perfectas entre 1 y N, donde N es tecleado por el usuario. El programa no deberá repetir ternas, es decir, la terna 3, 4, 5 es la misma que la terna 4, 3, 5, y deberá imprimirse una sola vez.


Descargar ppt "Sentencias de repetición"

Presentaciones similares


Anuncios Google