sentencias de repetición programación. objetivos implementar control con repeticiones en un...

41
Sentencias de repetición Programación

Upload: lucia-gomez-escobar

Post on 02-Feb-2016

250 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Sentencias de repetición

Programación

Page 2: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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

Page 3: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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

Page 4: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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;

}

SentenciaCuerpo del bucle

Expresión booleana

Page 5: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Diagrama de flujo

numero<= 20

suma = suma + numero;numero = numero + 1;

int suma = 0; numero = 1;

verdadero

falso

Page 6: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Valores de las variables en el ciclo

numero: 1 suma= 1numero: 2 suma= 3numero: 3 suma= 6numero: 4 suma= 10numero: 5 suma= 15numero: 6 suma= 21numero: 7 suma= 28numero: 8 suma= 36numero: 9 suma= 45numero: 10 suma= 55

numero: 11 suma= 66numero: 12 suma= 78numero: 13 suma= 91numero: 14 suma= 105numero: 15 suma= 120numero: 16 suma= 136numero: 17 suma= 153numero: 18 suma= 171numero: 19 suma= 190numero: 20 suma= 210

Page 7: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Producto de impares

int producto = 1, numero = 1, contador = 20, ultimoNumero;

ultimoNumero = 2 * contador -1;

while (numero <= ultimoNumero) {

producto = producto * numero;

numero = numero + 2;

}

Page 8: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Diagrama de flujo

numero<= ultimoNumero

producto = producto * numero;numero = numero + 2;

int producto = 0; numero = 1;contado = 20;

ultimoNumero = 2*contador -1

verdadero

falso

Page 9: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Ciclos controlados por centinela

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 : ");

}

Lee la edad de una persona entre 0 y 130.

Page 10: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Diagrama de flujo

edad < 0 || edad > 130?

verdadero

falso

Se ha introducido una”edad inválida.

inténtelo de nuevo.

edad

edad

Page 11: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Ciclos controlados por centinela

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 : ");

}

Lee enteros y calcula la suma hasta que se teclea un número negativo

Page 12: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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.

Page 13: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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++;

contador++;

}

Page 14: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

float contador = 0.0f;

while (contador != 1.0f)

contador = contador + 0.3333333f;

}

float contador = 0.0f;

while (contador != 1.0f)

contador = contador + 0.33333333f;

}

Page 15: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

float contador = 0.0f;

while (contador <= 1.0f)

contador = contador + 0.3333333f;

}

float contador = 0.0f;

while (contador <= 1.0f)

contador = contador + 0.25f;

}

Page 16: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Error de fuera por uno OBOE

int contador = 1;

while (contador < 10)

...

contador++;

}

int contador = 0;

while (contador <= 10)

...

contador++;

}

Page 17: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

OBOE corregido

int contador = 0;

while (contador < 10)

...

contador++;

}

int contador = 1;

while (contador <= 10)

...

contador++;

}

Page 18: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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.

Page 19: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Preguntas rápidas1. ¿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--; }

Page 20: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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; }

Page 21: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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);

SentenciaCuerpo del bucle

Expresión booleana

Page 22: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Diagrama de flujo

numero<= 20

suma += numero;numero++;

int suma = 0; numero = 1;

verdadero

falso

Page 23: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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);

Page 24: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Condición complejaEl 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 100 mensaje.show(“Suma > 100”); }} while(!(num % 2 == 0 || num == 0 || suma > 100));

Page 25: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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);

Page 26: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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 100 mensaje.show(“Suma > 100”); repetir = false; }} while(repetir);

Page 27: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Preguntas rápidas1. 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-whilea. int contador = 0, suma = 0; while(contador < 10){ suma += contador; contador++; }b. int contador = 1, suma = 0; while(contador <= 30){ suma += contador; contador += 3; }

Page 28: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

La sentencia forLa sintaxis de la sentencia for es:

for(<inicio>; <expresión booleana>; <incremento>)

<sentencia>

for( i = 0 ; i < 20 ; i++ ){

numero = entrada.getInteger();

suma += numero;

}

inicioExpresión booleana

Incremento

Sentencia

Page 29: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Diagrama de flujo

i = 0;

i < 20

numero = entradagetInteger();suma += numero;

i++;

verdadero

falso

<Inicio>

<Expresiónbooelana>

<Sentencia>

<incremento>

Page 30: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Cálculo del factorial

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);

El factorial de n se define como: n! = 1*2*3...*(n-1)*n

Page 31: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Caída libreSe 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)

Page 32: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Programadouble 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");

Page 33: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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++)

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, ...

Los incrementos pueden ser por cualquier valor.

Page 34: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Preguntas rápidas1. 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; }

Page 35: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Preguntas rápidas

Escriba sentencias for, do-while y while para calcular las siguientes sumas y productos

a. 1 + 3 + 7 + ...+ (220 -1)

b. 1 + 1/2 + 1/3 + ... + 1/20

c. 1*2 + 2*3 + 3*4 + ... + 19*20

d. 1 x 2 x 4 x 8 x ... x 220

Page 36: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Lazos anidadosEs posible tener una lazo dentro de otro. A esto se le llama anidamiento.

int precio=100;salida.printLine(" 5 10 15 20 25");for(int ancho = 11; ancho <= 20; ancho++) { salida.print(ancho + " "); for(int longitud = 5; longitud <= 25; longitud+=5){ salida.print(" " + precio); } salida.skipLine(1);}

Page 37: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Tabla de multimplicarstatic 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(" 1 2 3”+ “ 5 6 7 8 9 10"); for(int i = 1; i <= 10; i++) { salida.print(i + " "); for(int j = 1; j <= 10; j++){ salida.print(" " + i*j); } salida.skipLine(1); }}

Page 38: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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; }

Page 39: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

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.

Page 40: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

algoritmoGenerar número secreto

num

num != secreto &&intentos != 6?

intentos = 0

intentos = intentos + 1

num == secreto?

FalloAcerto

inicio

fin

V V FF

num>secreto?

num<secreto? Alto

Bajo

VF

V

F

Page 41: Sentencias de repetición Programación. Objetivos Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones

Tarea1. 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.