La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Computación I Primer Semestre 2006 Capítulo IV Ciclos y Colecciones (con un sabor a algoritmos)

Presentaciones similares


Presentación del tema: "Computación I Primer Semestre 2006 Capítulo IV Ciclos y Colecciones (con un sabor a algoritmos)"— Transcripción de la presentación:

1 Computación I Primer Semestre 2006 Capítulo IV Ciclos y Colecciones (con un sabor a algoritmos)

2 El objetivo de este capítulo es que los alumnos aprendar el uso y sintáxis de los ciclos en Java. Además aprender el uso de grupos de objetos o tipos nativos (llamese colección/lista/arreglo). Finalmente usar los ciclos para escribir algoritmos de uso frecuente en grupos (principalmente búsqueda y ordenamiento)

3 Ciclos Un ciclo es un trozo de programa que se repite mientras una condición sea verdadera Numero Premiar! Hay bingo? Si No Ej: Al jugar Bingo

4 Ciclo while … while (condición) { Instrucción; … } … Condición = expresión “booleana”

5 while, ejemplo factorial public int factWhile(int n) { int i = 1; int result = 1; while (i < n) { result = result * i; i++; } return result; } Hay errores, cuales ?

6 while, ejemplo factorial public int factWhile(int n) { if (n<0) { return (-1); } // error int i = 1; int result = 1; while (i <= n) { result = result * i; i++; } return result; } Si se define “0!=1”, porque no Necesito evaluar si n vale 0 ? “if (n ==0) { return (1); }” Si se define “0!=1”, porque no Necesito evaluar si n vale 0 ? “if (n ==0) { return (1); }” Que valor tiene i después del ciclo while? i?

7 Ciclo for … for(iniciación; condición; instrucción de post-ciclo) { Instrucción; … } …

8 for, ejemplo factorial public int factFor(int n) { if (n<0) { return (-1); } // error int result = 1; for (int i = 1; i <= n; i++) { result = result * i; } return result; } Que sucede si uso ? “for (int i = 0; i <= n; i++)” Que sucede si uso ? “for (int i = 0; i <= n; i++)”

9 Factorial recursivo, ejemplo avanzado public int factRecurs(int n) { if (n<0) { return (-1); } // error if (n == 0) { return (1); } return (n*factRecursv(n-1)); }

10 Ejercicio Dado un valor entero positivo n, calcule con un ciclo la función de Fibonacci para n: Función de Fibonacci:

11 Fibonacci con while (1/2) public int fibWhile(int n) { if ( n < 0 ) { return(-1); } //error int fibSub1 = 0; int fibSub2 = 1; int i = 1;

12 Fibonacci con while (2/2) while (i<n) { int aux = fibSub2; fibSub2 = fibSub2+fibSub1; fibSub1 = aux; i++; } return (fibSub2); } Porqué “i < n” y no “i <= n”?

13 Fibonacci con for (1/2) public int fibFor(int n) { if ( n < 0 ) { return(-1); } //error int fibSub1 = 0; int fibSub2 = 1;

14 Fibonacci con for (2/2) For (int i=0;i < n; i++) { int aux = fibSub2; fibSub2 = fibSub2+fibSub1; fibSub1 = aux; } return (fibSub2); } Que valor tiene i después del ciclo for?

15 Fibonacci recursivo ejemplo avanzado public int fibRecurs(int n) { if (n<0) { return(-1); } //error if (n==0) { return(0); } if (n==1) { return(1); } return (fibRecurs(n-2)+fibRecurs(n-1)); }

16 Ejemplo usando Fibonacci Golden rate Se define el golden rate de Fibonacci como: Implemente un método que calcule el golden rate con una precisión dada como parámetro * ojo: es una serie convergente, demuéstrelo si lo desea

17 Golden rate Que quiere decir precisión? –Que la diferencia entre un término de la serie y el anterior sea menor que valor dado (la precisión) Como resolvemos el problema? –Calculando sucesivamente el golden rate hasta que la diferencia entre dos sucesiones sea menor que la precisión dada como parámetro

18 Golden Rate public double goldenRatio(double pres) { int i = 1; double error=1000; double ratio=0; while (error>pres) { double aux = ratio; ratio = ((double)fibFor(i+1))/((double)fibFor(i)); error = Math.abs(ratio-aux); i++; } return(ratio); } Casting ¿Porque i desde 1 y no 0? ¿Se puede implementar usando for?

19 Ejercicios propuestos: Implemente métodos que resuelvan: Las sumatorias y usando while y for para ambos casos Calcular el máximo común divisor usando el método de Euclides (ver slide siguiente). Determinar si un número es primo (un primo es un número divisible sólo por si mismo) Descomponer un número en sus factores primos (hint: use el método anterior)

20 mcd de Euclides 10711029 Coloque el numero m á s grande a la izquierda y el otro a la derecha 102942 El residuo de 1071/1029 es 42. Coloque 42 en la derecha y traslade 1029 a la izquierda 4221 Se repite el paso anterior hasta que el numero de la derecha es 0 210El numero a la izquierda es el m á ximo com ú n divisor

21 Arreglos Un arreglo es un grupo “indexado” de elementos del mismo tipo. N elementos 0 321n-3 n-1 n-2 elemento índice Los arreglos siempre Empiezan con el índice 0! Los arreglos siempre Empiezan con el índice 0!

22 Declarando arreglos int numeros[]; Tipo Variable Indica que Es arreglo Inicializando arreglos numeros = new int[55]; Tamaño del arreglo

23 Modificando y accediendo a elementos del arreglo numeros[0] = 10; numeros[5] = 18; numeros[3] = 2; numeros[13]=numeros[3]*numeros[0]+numeros[5]; numeros[13]++; System.out.println(numeros[13]); Que valor se imprime en pantalla? Largo de un arreglo: numeros.length Largo de un arreglo: numeros.length En este ejemplo, cuánto vale numeros.lenght?

24 Arreglos de Objetos // declarar arreglo Factorial numeros[]; // inicializar arreglo numeros = new Factorial[n]; // inicializar elementos numeros[3] = new Factorial(); // acceder a funciones int x = numeros[3].factWhile(15);

25 Usando arreglos: Clase Pila Una Pila es un objeto al que se le agregan y sacan elementos, tal que el elemento a sacar es el último en ser puesto (conocido como orden LIFO, last in first out) poner sacar Pila

26 Implementación Clase Pila Se quiere implementar una clase Pila con los métodos poner y sacar para enteros. Que necesitamos ? Un arreglo de enteros para guardar los elementos Un índice que nos indique el último elemento agregado

27 Clase Pila(1/3) public class Pila { private int valores[]; private int last; public Pila(int n) { this.valores = new int[n]; this.last = -1; } …

28 public void poner(int elem) { if (last >= valores.length-1) { System.out.println("No puede agregar más elementos, la pila está llena"); } else { last++; valores[last] = elem; // otra: valores[++last] = elem; } … Clase Pila(2/3)

29 … public int sacar() { if (last < 0) { System.out.println("No puede sacar más elementos, la pila está vacía"); return(-1); } else { int aux = valores[last]; last--; return aux; // otra: return valores[last--]; } }… Clase Pila(3/3)

30 Usando arreglos: Clase Lista Una Lista es un objeto al que se le agregan y sacan elementos, tal que el elemento a sacar es el más anciano en ser puesto (conocido como orden FIFO, first in first out) Fila PonerSacar

31 Implementación Clase Lista Se quiere implementar una clase Lista con los métodos poner y sacar para enteros. Que necesitamos ? Un arreglo de enteros para guardar los elementos Un índice que nos indique el elemento a sacar (cabeza) Un índice que nos indique el próximo espacio para agregar (cola)

32 Listas cabeza cola cabeza cola cabeza cola En un momento la fila está: Poner: Sacar:

33 Listas cabeza cola Poner?, donde apuntará cola? ? cabeza cola


Descargar ppt "Computación I Primer Semestre 2006 Capítulo IV Ciclos y Colecciones (con un sabor a algoritmos)"

Presentaciones similares


Anuncios Google