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

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Archivos de Texto. Introducción Los archivos son una secuencia de bits que se guarda en el disco duro. La ventaja de utilizar archivos es que los datos.
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
Entendiendo la definición de clases
Te presento a Python Qué es Python? Lenguaje interpretado
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Colas y Listas Enlazadas
Arreglos: Vectores en JAVA
Recursión Se dice que un método es recursivo si forma parte de sí mismo o se define en función de sí mismo. La recursión es un medio particularmente poderoso.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Programación I Teoría VI: Recursividad
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Tema 6: Clases Antonio J. Sierra.
Programación de Computadores
Clase Teórica No. 4 Programación IV
Departamento de Informática Universidad Técnica Federico Santa María Capítulo 2 “Subprogramas/Funciones - Arreglos” Arreglos-Arrays.
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.

Estructura de Datos y Algoritmos
Capítulo 1 “Elementos de Programación”
ESTRUCTURA DE DATOS EN JAVA
Clase 10: Estructuras de datos y arreglos.
METODOLOGÍA DE LA PROGRAMACIÓN
ELO3201 Contenedores Biblioteca Estándar de Templates Agustín J. González ELO320 Contenido Contenedores: Vector, List, Deque, Stack, Queue, Priority Queue,
Computación II Repaso de java Karina Figueroa Mora.
Introducción al lenguaje de programación SLE 2
Material de apoyo Unidad 4 Estructura de datos
Análisis de algoritmos
Pilas y Colas Estructuras de Datos.
1. Desarrollo de Programas iterativos usando invariante
Estructuras de Control.
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
Análisis de Algoritmos 2
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
Estructura de Datos En C++
While En este ciclo el cuerpo de instrucciones se ejecuta mientras una condición permanezca como verdadera en el momento en que la condición se convierte.
Sentencias de repetición
Conceptos Avanzados de Programación
Punteros Recomendado: 1. Nivelación Funciones
Son estructuras de datos que almacenan y recuperan sus elementos atendiendo a un estricto orden (LIFO Last – in, first –out Ultimo en entrar – primero.
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Estructuras de datos Fundamentos de análisis y diseño de algoritmos.
Fundamentos de Programación
Capítulo 2 “Subprogramas/Funciones - Arreglos”
MÁXIMO COMÚN DIVISOR.
Unidad V Recursión. Objetivos del Aprendizaje Explicar el concepto de recursión. Discutir las diferentes condiciones que deben ser satisfechas para que.
Ingeniería en Software Facultad de Ingeniería 2014
Estructura de Datos..
Estructuras de Decisión
CICLOS EN C – PARTE 3.
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
ESTRUCTURAS LINEALES “LA PILA”
ESTRUCTURA DE CONTROL REPETITIVAS: WHILE, DO… WHILE
Pilas Grupo 4. 1 Stack o Pila Definición: Una pila es una estructura de datos, a la cual se le puede ingresar o sacar elementos por un sólo lado. También.
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
Listas Dinámicas.
PROGRAMACION DE APLICACIONES EN MEMORIA DEL COMPUTADOR = ALGORITMOS Y ESTRUCTURAS DE DATOS.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
Iterables virtuales Concepto, Metodología de desarrollo y Ejemplos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Recursividad.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
Criterios de divisibilidad
Transcripción de la presentación:

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

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)

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

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

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 ?

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?

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

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

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

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

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;

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”?

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

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?

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

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

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

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?

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)

mcd de Euclides Coloque el numero m á s grande a la izquierda y el otro a la derecha 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

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!

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

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?

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

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

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

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

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)

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

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

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)

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

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