Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porFlorencio Mesa Modificado hace 10 años
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
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.