Sentencias de Repeticion

4,354 views
4,127 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,354
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
58
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • CS1101X Programming Methodology
  • Sentencias de Repeticion

    1. 1. Clase 6
    2. 2. Clase 6: Sentencias de RepeticiónDespués de haber estudiado este capítulo usted podrá:  Implementar sentencias de repetición en su programa utilizando while, do-while y for.  Implementar sentencias de repetición utilizando: while, do-while y for.  Implementar sentencias de control genéricas  Realizar sentencias de repetición anidadas  Elegir la sentencia de repetición adecuada según el problema  Generar números aleatorios  Lograr que el usuario interactúe con la máquina en una sesión SI-NO para continuar ejecutando el programa 2
    3. 3. Definición Las sentencias de repetición son un bloque de código que son ejecutadas por un cierto número de veces hasta que se cumpla una condición. Repeticiones controladas por contador: terminan la ejecución del bloque después que este ha sido ejecutado por un número de veces determinado Repeticiones controladas por centinela: termina la ejecución del bloque después que un valor diseñado como centinela ha sido encontrado. Las sentencias de repetición son llamadas LOOP o BUCLE. 3
    4. 4. Sentencia while//este programa realiza la suma de los 100 primerosnúmerosint sum = 0, number = 1;while ( number <= 100 ) { sum = sum + number; Estas sentencias son Estas sentencias son ejecutadas mientras que ejecutadas mientras que la variable number sea la variable number sea number = number + 1; menor ooigual que 100 menor igual que 100}System.out.print(“La Suma es: “ + suma); 4
    5. 5. Sintaxis para la sentencia while while ( <expresión booleana> ) { <sentencia 1> <sentencia 1> <sentencia n> } Expresión Booleana Expresión Booleana while ( number <= 100 ) { sum = sum + number;Sentencias Sentencias(loop body) (loop body) number = number + 1; } 5
    6. 6. Flujo de Control while int sum = 0, number = 1 int sum = 0, number = 1 number = number + 1; sum = sum + number; number = number + 1; sum = sum + number; number <= 100 ? number <= 100 ? false true 6
    7. 7. Mas Ejemplos Sigue sumando11 int sum = 0, number = 1; Sigue sumando números 1, 2, 3, … números 1, 2, 3, … hasta que la variable hasta que la variable while ( sum <= 1000000 ) { sum sea mayor aa sum sea mayor 1,000,000. 1,000,000. sum = sum + number; number = number + 1; }22 int producto = 1, numero = 1, Calcula el producto de Calcula el producto de contador = 20, ultimoNumero; los 20 primeros enteros los 20 primeros enteros ultimoNumero = 2 * contador - 1; while (numero <= ultimoNumero) { producto = producto * numero; numero = numero + 2; } 7
    8. 8. Encontrando el Maximo Comun Divisor public int mcdBruteforce(int m, int n) { // assume m, n >= 1 int menor = Math.min(m, n); int mcd; int i = 1; while (i <= menor) { if (m%i == 0 && n%i == 0) { mcd = i; } i++; } return mcd; } 8 Aproximación directa
    9. 9. Encontrando el Maximo Comun Divisor public int gcd(int m, int n) { // no importa si n o m // es mayor, este metodo; // trabaja bien // // assume m, n >= 1 int r = n % m; while (r != 0) { n = m; m = r; r = n % m; } return m; } 9 Solución mas eficiente
    10. 10. Ejemplo: Probando datos de ingresoString inputStr; Primera lectura Primera lecturaint edad;inputStr = JOptionPane.showInputDialog(null,“Su edad (entre 18 y 90):");edad = Integer.parseInt(inputStr);while (edad < 18 || edad > 90) { JOptionPane.showMessageDialog(null, “Se ingreso una edad no valida. Por favor vuelva a intentarlo"); inputStr = JOptionPane.showInputDialog(null,“Su edad (entre 18 y 90):"); edad = Integer.parseInt(inputStr);} Segunda lectura Segunda lectura 10
    11. 11. Operadores cortos utilessuma = suma + numero; Es equivalente a suma += numero; Operador Uso Significado += a += b; a = a + b; -= a -= b; a = a – b; *= a *= b; a = a * b; /= a /= b; a = a / b; %= a %= b; a = a % b; 11
    12. 12. Tenga cuidado con los errores 1. Cuidado con el error “por uno” 2. Asegúrese que el cuerpo del loop contiene sentencias que eventualmente harán que el loop finalice 3. Si quiere ejecutar el cuerpo del loop N veces, entonces inicialice el contador en 0 y utilice una condicion que evalue contador <N, o inicialice el contador en 1 y evalue contador <=N 12
    13. 13. Loop Error #1 - Loop Infinito Error Error 1 1 int producto = 0; Estas sentencias se Estas sentencias se ejecutaran por siempre. ejecutaran por siempre. La expresion boolena La expresion boolena while ( producto < 500000 ) { nunca será falsa. nunca será falsa. Para solucionar el Para solucionar el product = product * 5; problema producto debe problema producto debe } inicializarse en 11 inicializarse en 2 2 int contador = 1; Error Error while ( contador != 10 ) { La expresión boolena La expresión boolena nunca sera falsa. nunca sera falsa. contador = contador + 2; Para solucionar el Para solucionar el problema count debe ser problema count debe ser } inicializado en 11 inicializado en 13
    14. 14. Loop Error #2 – error por uno  Objetivo : Ejecute el cuerpo del loop 10 veces11 count = 1; 2 2 count = 1; while ( count < 10 ){ while ( count <= 10 ){ . . . . . . count++; count++; } }33 count = 0; 4 4 count = 0; while ( count <= 10 ){ while ( count < 10 ){ . . . . . . count++; count++; } } 1 y 1 3 exiben el error por uno. 3 14
    15. 15. La sentencia do-while int sum = 0, number = 1; do { Estas sentencias son Estas sentencias son sum = sum + number; ejecutadas hasta que la ejecutadas hasta que la variable sum sea menor variable sum sea menor number++; ooigual que 100 igual que 100 } while ( sum <= 100 ); 15
    16. 16. Sintaxis do-while do <sentencias> while ( <expresion booleana> ) ; do { sum = sum + number; Sentencias Sentencias number++; (loop body) (loop body) } while ( sum <= 100 ); Expresion booleana Expresion booleana 16
    17. 17. Flujo de Control do-while int sum = 0, number = 1 int sum = 0, number = 1 sum = sum + number sum = sum + number number++; number++; true sum <= 100 sum <= 100 false 17
    18. 18. Bucle y Control de Media Repetición Bucle y Control de Media Repeticiόn puede ser utilizado para evaluar la condicion de terminacion de un bucle en medio del cuerpo del bucle. Es implementado utilizando las palabras reservadas while, if, and break. 18
    19. 19. Ejemplo: Bucle-y-MedioControlString name;while (true){ name = JOptionPane.showInputDialog(null, “Tu nombre"); if (name.length() > 0) break; JOptionPane.showMessageDialog(null, "Ingreso no valido." + “Debe ingresar al menos un caracter.");} 19
    20. 20. Errores en Bucles-y-MedioControl Ponga atenciόn en dos cosas cuando utilice Bucles-y-MedioControl:  El peligro de un bucle infinito. La expresión booleana del while es true, la cual siempre evaluará a true. Si olvidamos incluir una sentencia if para romper el bucle, terminaremos en un bucle infinito.  Multiple exit points. It is possible, although complex, to write a correct control loop with multiple exit points (breaks). It is good practice to enforce the one-entry one-exit control flow. 20
    21. 21. Bucle: Sentencia break (1/4) int i = 1; int sum = 0; sum is 21 while (sum < 20) { sum += i; i is 7 ++i; } System.out.println("sum is " + sum); System.out.println("i is " + i); int i = 1; int sum = 0; while (sum < 20) { sum += i; sum is 6 if (sum % 2 == 0) break; i is 3 ++i; } System.out.println("sum is " + sum); System.out.println("i is " + i); 21
    22. 22. Bucle: Sentencia break (2/4) int i = 1; int sum = 0; sum es 15 while ( true ) { sum += i; i es 5 if (sum > 10) break; Note: Sin el break, es ++i; un bucle infinito! } System.out.println("sum is " + sum); System.out.println("i is " + i); int i = 0; int sum = 0; Trate de while (sum <= 10) { evitar el uso ++i; de break, a sum += i; menos que } sea System.out.println("sum is " + sum); necesario. System.out.println("i is " + i); 22
    23. 23. Bucle: Sentencia break (3/4) Random number = new Random(); int i; i is 43 while (true) { i is 2 i = number.nextInt(100); i is 12 System.out.println("i is " + i); i is 95 if (i >= 80) break; } Random class will be discussed later. 23
    24. 24. Bucle: Sentencia break (4/4) break causa que el control salga del bucle mas interno en el que esta contenido.. int a = 1; while (a < 5) { a is 1, b is 1 int b = 1; a is 1, b is 2 while (b < 5) { a is 2, b is 1 System.out.println("a is " + a a is 2, b is 2 + ", b is " + b); a is 3, b is 1 if (b == 2) break; a is 3, b is 2 ++b; a is 4, b is 1 } ++a; a is 4, b is 2 } 24
    25. 25. Bucle: Sentencia continue (1/2) Algunas veces podríamos querer ir inmediatamente a la siguiente iteracion, sin ejecutar el resto de las sentencias en el cuerpo del bucle. Esto puede ser realizado utilizando continue. Como break, continue solo causa que el control vaya a la siguiente iteracion en el bucle mas interno que lo contiene. 25
    26. 26. Bucle: Sentencia continue(2/2) int i = 0; i is 1 i is 2 while (i <= 6) { ++i; i is 4 if (i == 3) continue; i is 5 System.out.println("i is " + i); i is 6 } i is 7 int i = 1; int sum = 0; while (sum < 20) { sum += i; sum is 23 if (sum % 2 == 0) continue; i is 6 ++i; } System.out.println("sum is " + sum); System.out.println("i is " + i); 26
    27. 27. Random Numbers (1/2) Random number generation is discussed in section 3.8 of your textbook. We learn another way here, using the Random class. Notes:  Need to import java.util.*;  Random( ): constructs a new random number generator Random whose seed is based on the current time.  int nextInt(int n): returns the next pseudo-random, from the interval [0, 1, … n-1], uniformly distributed value of a Random object.  Refer to the API specification for the complete description of class Random. 27
    28. 28. Random Numbers (2/2)import java.util.*;public class Random1 { public static void main(String[] args) { Random num = new Random(); for (int i=0; i<5; i++) { System.out.println("Next random number is " + num.nextInt(100)); } } Next random number is 48} Next random number is 14 Next random number is 89 Next random number is 7 Next random number is 44 28
    29. 29. Diálogo de Confirmación dialogo de confirmación puede ser utilizado para que el usuario elija si quiere seguir con la ejecución del programa o no. JOptionPane.showConfirmDialog(null, /*prompt*/ "Play Another Game?", /*dialog title*/ "Confirmation", /*button options*/ JOptionPane.YES_NO_OPTION); 29
    30. 30. Ejemplo: Diálogo de Confirmación boolean sigaJugando = true; int seleccion; while (sigaJugando){ //codigo que realiza un juego viene aqui // . . . seleccion = JOptionPane.showConfirmDialog(null, “Quiere volver a jugar?", "Confirmacion", JOptionPane.YES_NO_OPTION); sigaJugando = (seleccion == JOptionPane.YES_OPTION); } 30
    31. 31. AdicionalPreguntas de Examen
    32. 32. Considere el siguiente códigoint i = 1;while (i <= n) { if (i % n == 0) { ++i; }} System.out.println(i);(a) Cual es la salida si n es 0?(b) Cual es la salida si n es 1?(c) Cual es la salida si n es 3? 32
    33. 33. Que retorna el siguiente método,asumiendo que n es 12345? public static int metodoX(int n) { int sum = 0; while (n > 0) { sum += n % 100; n /= 100; } return sum; }A. 9B. 15C. 69D. 123E. 168 33
    34. 34. La sentencia for int i, sum = 0, number; for (i = 0; i < 20; i++) { number = scanner.nextInt( ); sum = sum + number; } Estas sentencias son Estas sentencias son ejecutadas 20 veces ejecutadas 20 veces ((i i= 0, 1, 2, … , ,19). = 0, 1, 2, … 19). Utilizamos for cuando sabemos cuantas veces se va a realizar la repetición 34
    35. 35. Syntax sentencia forfor ( <inicializacion>; <expresion booleana>; <incremento> ){ <sentencias>} Expresión ExpresiónInicializacion Inicializacion Incremento Incremento Booleana Booleana for ( i = 0 ; i < 20 ; i++ ) { number = scanner.nextInt(); Sentencias Sentencias sum = sum + number; (loop body) (loop body) } 35
    36. 36. false true i i= 0; = 0; i i< 20 ? < 20 ? ber =ber = . .. .. .; ; = sum + number; Control Flow of for= sum + number; ++; i i++; 36
    37. 37. i++ or ++i?for ( i = 0; i < 20; i++ ) { ...} Alguna diferencia?for ( i = 0; i < 20; ++i ) { ... Aqui es lo mismo…} Solo cuando es parte de una expresion..si son diferentes 37
    38. 38. Compare for y while for ( Init ; Expression ; Increment ) Action Init Si realmente odian utilizar WHILE por alguna razon…. while ( Expression ) pueden reescribirla { Action Increment } 38
    39. 39. Sentencia while //este programa realiza la suma de los 100 primeros numeros int sum = 0, number = 1; while ( number <= 100 ) { sum = sum + number; number = number + 1; } 39
    40. 40. Seguimiento de la ejecución (1/12) i 0for (int i = 0; i < 3; ++i) { System.out.println("i es " + i);}System.out.println(“terminamos"); 40
    41. 41. Seguimiento de la ejecución(2/12) i 0 for (int i = 0; i < 3; ++i) { System.out.println("i es " + i); } System.out.println(“terminamos"); 41
    42. 42. Seguimiento de la ejecución(3/12) i 0for (int i = 0; i < 3; ++i) { System.out.println("i es " + i);}System.out.println(“terminamos"); Output: i es 0 42
    43. 43. Seguimiento de la ejecución(4/12) i 1for (int i = 0; i < 3; ++i) { System.out.println("i es " + i);}System.out.println(“terminamos"); Output: i es 0 43
    44. 44. Seguimiento de la ejecución(5/12) i 1for (int i = 0; i < 3; ++i) { System.out.println("i es " + i);}System.out.println(“terminamos"); Output: i es 0 44
    45. 45. Seguimiento de la ejecución(6/12) i 1for (int i = 0; i < 3; ++i) { System.out.println("i es " + i);}System.out.println(“terminamo"); Output: i es 0 i es 1 45
    46. 46. Seguimiento de la ejecución(7/12) i 2for (int i = 0; i < 3; ++i) { System.out.println("i es " + i);}System.out.println(“terminamos"); Output: i es 0 i es 1 46
    47. 47. Seguimiento de la ejecución(8/12) i 2for (int i = 0; i < 3; ++i) { System.out.println("i es " + i);}System.out.println(“terminamos"); Output: i es 0 i es 1 47
    48. 48. Seguimiento de la ejecución(9/12) i 2for (int i = 0; i < 3; ++i) { System.out.println("i es " + i);}System.out.println(“terminamos"); Output: i es 0 i es 1 i es 2 48
    49. 49. Seguimiento de la ejecución(10/12) i 3for (int i = 0; i < 3; ++i) { System.out.println("i es " + i);}System.out.println(“terminamos"); Output: i es 0 i es 1 i es 2 49
    50. 50. Seguimiento de la ejecución(11/12) i 3for (int i = 0; i < 3; ++i) { System.out.println("i es " + i);}System.out.println(“terminamos"); Output: i es 0 i es 1 i es 2 50
    51. 51. Seguimiento de la ejecución(12/12) 3for (int i = 0; i < 3; ++i) { System.out.println("i es " + i);}System.out.println(“terminamos"); Output: Utilzar siempre i dentro del loop i es 0 i es 1 i es 2 terminamos 51
    52. 52. Mas ejemplos 1 1 for (int i = 0; i < 100; i += 5) i i= 0, 5, 10, … ,,95 = 0, 5, 10, … 95 2 2 for (int j = 2; j < 40; j *= 2) j j= 2, 4, 8, 16, 32 = 2, 4, 8, 16, 32 3 3 for (int k = 100; k > 0; k--) ) k = 100, 99, 98, 97, ..., 1 k = 100, 99, 98, 97, ..., 1 52
    53. 53. Factorial  Definition:  1 if n = 0 n!=  1 × 2 ×  × n if n ≥ 1 int nFactorial = 1; for (int i = 2; i <= n; ++i) { nFactorial *= i; } 53
    54. 54. Alcance de Variable Considere: int valorActual = 2; for (int i = 0; i < 5; ++i) { System.out.println(valorActual); valorActual = valorActual* 2; } System.out.println("i is " + i); Que muestra valor actual al final? Que muestra i? 54
    55. 55. For anidados Es cuando utilizamos un for dentro de otro for. 55
    56. 56. 56
    57. 57. Generando la Tabla int precio; for (int ancho = 11; ancho <=20, ancho++){ for (int largo = 5, largo <=25, largo+=5){ INNEROUTER precio = ancho * largo * 19; //$19 x metro cuadrado System.out.print (" " + precio); } //finalizada una fila se va a la siguiente System.out.println(""); } 57
    58. 58. For anidados (1/2) i is 0for (int i = 0; i < 3; ++i) { j is 0 j is 1 System.out.println("i is " + i); j is 2 j is 3 for (int j = 0; j < 4; ++j) { i is 1 System.out.println(" j is " + j); j is 0 } j is 1 j is 2} j is 3 i is 2 j is 0 j is 1 j is 2 j is 3 58
    59. 59. For anidados (2/2)for (int i = 0; i < 3; ++i) { System.out.println("i is " + i); for (int j = 0; j < i; ++j) { System.out.println(" j is " + j); }}Cual es la salida? 59
    60. 60. Fin Clase 6 60

    ×