Tratamientos secuenciales I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 8 Versión 1.0.0.

Slides:



Advertisements
Presentaciones similares
Desarrollo de Aplicaciones para Internet
Advertisements

Árboles binarios. Algoritmos básicos
CICLOS EN C.
TÉCNICO EN PROGRAMACIÓN DE SOFTWARE Instructor: Ingeniero Adrián Guerrero Taborda
Programación en Matlab
Control de flujo: Bucles
Estructuras de Datos Arreglos.
Estructuras de Control.
Grafos..
Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.
Entrada y Salida ES.leerChar (); ES.leerEntero (); ES.leerEnteroLargo (); ES.leerFloat (); ES.leerDouble (); System.out.print System.out.println.
Listas. Utilización de un TAD Lista. Interfaz del TAD LISTA public interface Lista { void crearNodo (); /*Crea un nuevo nodo en el TadLista*/ int devolverClave.
Estructuras de Decisión
2011/1 - CLASE 12. AGENDA 1 Introducción 2 Sentencia while 3 Sentencia for 14 Sentencia do-while 5 Instrucciones Especiales 6 Ciclos anidados.
Algoritmos y Programación III 4. Colecciones, excepciones Carlos Fontela, 2006.
Ing. Esp. Ricardo Cujar. Permite la ejecución de una sentencia, dada una determinada condición. If(condición){ sentencia(s) a ejecutar en caso de que.
CONSTANTES DENTRO DE UN CÁLCULO O EN LOS PASOS PARA SOLUCIONAR UN PROBLEMA, EXISTIRÁN VALORES QUE NUNCA VAN A CAMBIAR Y SE LOS CONOCE COMO CONSTANTES.
PARCIAL 2. LENGUAJE DE PROGRAMACIÓN UN LENGUAJE SE PUEDE DEFINIR COMO UN CONJUNTO DE PALABRAS Y FORMAS DE EXPRESIÓN POR MEDIO DE LAS CUALES SE COMUNICAN.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Tratamientos Secuenciales Generalizados II Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 19 Versión
NÚMEROS ALEATORIOS DEPARTAMENTO DE INFORMATICA UNSL-2007.
OperadorSignificadoEjemplos +Se usa para sumar valores numéricos (3+4)*(5-2) -Se usa para restar valores numéricos 7 – 2 50 – 35 *Se usa para.
Cálculo simbólico con GeoGebra David Benítez Mojica Universidad de Caldas Innatituto Geogebra del Tolima.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS ORGANIZACIÓN.
Estructuras de Decisión en Visual Basic 6.0
Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
FUNDAMENTOS DE PROGRAMACIÓN VARIABLES, CONSTANTES Y TIPOS DE DATOS EN C.
GENERICIDAD Es una propiedad que permite definir una clase o función sin especificar el tipo de datos de uno o mas de sus parámetros (Módulos Parametrizados).
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
Lenguaje de programación: Lua Fundamentos de lenguaje de programación. Iván Cardemil Patricio Tudela Camilo Rojas Llosect Moscoso.
Unidad 6 Polimorfismo.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
1 Control de Flujo Introducción a la Informática Departamento de Sistemas Universidad del Cauca 2006.
Tema – 5 Construcciones condicionales Introducción En un programa es usual ejecutar unas instrucciones u otras en función de unas condiciones especificadas.
Clase II Estructuras dinámicas (TAD) Listas Enlazadas. ¿A que llamamos estructuras dinámicas? ¿Por qué son necesarias? Ventajas y Desventajas que tendremos.
Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento.
1 Clase 4: primeros programas (2ª parte) iic1102 – introducción a la programación.
Implementación de Iterables Construcción de Iterables virtuales o basados en otros iterables Fundamentos de Programación Departamento de Lenguajes y Sistemas.
El lenguaje de programación C - Operadores - Isidro González Caballero ( Introducción a la Física Computacional.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Excepciones Diseño y manejo de excepciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 5 Versión
Tipos SortedSet, Map y SortedMap Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 16.
Diseño de tipos Igualdad, representación, código, copia y relación de orden Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Introducción al Lenguaje C (II) Cadenas de caracteres, archivos de cabecera, lectura y escritura Fundamentos de Programación Departamento de Lenguajes.
1 Clase 6: control (1ª parte) iic1102 – introducción a la programación.
Programación de Algoritmos Autor: Luis Eduardo Villavicencio Prof.: Ing. Danilo Jaramillo.
Entrada y Salida en C++, Estructuras de Control Prof. Manuel B. Sánchez.
METODOS DE PROGRAMACION I Ing. Vania Flores Pinto.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Iterables virtuales Concepto, Metodología de desarrollo y Ejemplos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
Criterios de ordenación y Guava Comparator, Comparable y Ordering Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: COLAS.
Tratamientos Secuenciales Generalizados I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 18 Versión
Diseño de tipos: clase PolinomioEntero Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 8 Versión
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
 Do- While y Do- Until Las instrucciones Do-while y Do-until permiten repetir un bloque de código mientras cierta condición sea True o hasta que cierta.
Computación I :: Prof. Yeniffer Peña Introducción al C Presentación Computación I.
Funciones, expresiones y control en Alice
Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos Fundamentos de Programación Departamento.
GUICEG018EM31-A16V1 Generalidades de números reales EM-31.
2012-BM5A. Unos tips antes de empezar: C# es Case Sensitive (sensible a mayúsculas) Pepe ≠ pepe ≠ pEpE Las asignaciones se hacen con “=” y las comparaciones.
PPTCEG020EM31-A16V1 Resolución de problemas en los racionales EM-31.
DML Transact SQL Sesión III Agrupando y resumiendo información.
Funciones y paso de parámetros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 24.
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.
Unidad V: Estatutos en Basic De control o selección if. De ciclos: Do, for, while. Otros estatutos. Solución de problemas aplicando estatutos de control.
1 Clase 5: primeros programas (3ª parte) iic1102 – introducción a la programación.
Árboles binarios. Algoritmos básicos
Tratamientos secuenciales I
Transcripción de la presentación:

Tratamientos secuenciales I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 8 Versión 1.0.0

UD8: Tratamientos secuenciales I Índice  Introducción  Objetivo  Estructura lógica  Metodología - Resolución de problemas  Tratamientos:  Operaciones aritméticas:  “suma/producto”  Preguntas sobre propiedades:  “existe/para todo”  Máximos, mínimos

UD8: Tratamientos secuenciales I Introducción  Conceptos necesarios, ya vistos:  Diseño de tipos => creación de objetos.  Diseño de programas iterativos => uso de estructuras de control iterativas o “bucles” (for clásico, for extendido, while)  Uso de agregados de objetos: List, Set, etc.  Conceptos nuevos:  Extraer información útil para un usuario final sobre los datos contenidos en un agregado de objetos.

UD8: Tratamientos secuenciales I Objetivo  Dado un agregado de objetos (un List, un Set, etc.), nos planteamos preguntas del tipo:  ¿cuánto vale la suma de los …?  ¿y el producto de los que verifican que …?  ¿existe algún objeto que verifique …?  ¿todos los objetos que cumplen que … verifican...?  ¿cuál es el valor más grande de los que … ?  ¿según el orden … cuál es mayor que … ?  actualiza todos los objetos que …  etc.  Cada una de esas preguntas y otras similares pueden implementarse a través de métodos con una ESTRUCTURA COMÚN

UD8: Tratamientos secuenciales I Estructura lógica – Ejemplo I  ¿Cómo se calcula la suma de los cuadrados de los números enteros contenidos en un Vector de Enteros?  Como el agregado es un Vector usamos un for extendido para recorrerlo. El código lo concretamos en un método que tomando un Vector como parámetro devuelve el resultado esperado. public static Integer sumaCuadrados(Vector v){ Integer suma=0; for (Integer e: v){ suma = suma + e*e; } return suma; } public static Integer sumaCuadrados(Vector v){ Integer suma=0; for (Integer e: v){ suma = suma + e*e; } return suma; }

UD8: Tratamientos secuenciales I Estructura lógica – Ejemplo II  Sumar los cuadrados de los enteros contenidos en un vector o en una secuencia que son múltiplos de 3. public static Integer sumaCuadradosMultiplos3(Vector v){ Integer suma=0; for(Integer e: v){ if(Enteros.esMultiplo(e,3)){ suma = suma + e*e; } return suma; } public static Integer sumaCuadradosMultiplos3(Vector v){ Integer suma=0; for(Integer e: v){ if(Enteros.esMultiplo(e,3)){ suma = suma + e*e; } return suma; } public static Integer sumaCuadradosIntervaloMultiplos3(Integer a, Integer b, Integer c){ if(!(b>a && c>0)) throw new IllegalArgumentException(); Integer suma=0; for(Integer e= a; e<=b; e=e+c){ if(Enteros.esMultiplo(e,3)) suma = suma + e*e; } return suma; } public static Integer sumaCuadradosIntervaloMultiplos3(Integer a, Integer b, Integer c){ if(!(b>a && c>0)) throw new IllegalArgumentException(); Integer suma=0; for(Integer e= a; e<=b; e=e+c){ if(Enteros.esMultiplo(e,3)) suma = suma + e*e; } return suma; }

UD8: Tratamientos secuenciales I Estructura lógica  ¿Cuál es entonces nuestro esquema? Elementos a destacar:  Acumulador: es una variable que acumula el resultado calculado hasta ese momento. Se inicializa al valor adecuado para la secuencia o el agregado vacío y es del tipo del resultado que queramos calcular. En el ejemplo, la variable es suma que se inicializa a cero y es de tipo Integer, como el resultado.  Filtro: es una expresión lógica sin efectos laterales que nos sirve para escoger los elementos del agregado sobre los que vamos a hacer el cálculo. En este caso es la expresión Enteros.esMultiplo(e,3).  Expresión: es una expresión que a partir de cada objeto del agregado calcula el valor que se va acumulando. En este caso la expresión es e*e.

UD8: Tratamientos secuenciales I Metodología - Resolución de problemas Opciones: 1. Resolución mediante construcción directa de un bucle (for extendido). 2. Generalización del código: diseño con tipos genéricos e identificando las partes variables del método. Éstas se pasarán como parámetros. En el caso de que el agregado sea un Vector, las partes variables son: el agregado, el filtro y la expresión. A CONTINUACIÓN … CLASE COLECCIONES (segunda parte de la asignatura)

UD8: Tratamientos secuenciales I Operaciones aritméticas Sumatorio Operador: + Elemento Neutro: 0 ESQUEMA: Double suma = 0.0; for(T o: it){ if(…){ suma = suma + … ; } return suma;

UD8: Tratamientos secuenciales I Operaciones aritméticas public static Integer suma(List l){ Integer suma = 0; for(Integer e: l) suma = suma + e; return suma; } Iteración nºe suma … 0

UD8: Tratamientos secuenciales I Operaciones aritméticas public static Integer suma (List l){ Integer suma = 0; //mostrar(“suma”+suma); for(Integer e: l){ suma = suma + e; //mostrar(e); //mostrar(“suma”+suma); } return suma; } Iteración nºe suma … (0+7) 2 9 (0+7) ((0+7)+9)+4 … etc …

UD8: Tratamientos secuenciales I Operaciones aritméticas Producto Operador: * Elemento Neutro: 1 ESQUEMA: Double prod = 1.0; for(T o: it){ if(…){ prod = prod * … ; } return prod;

UD8: Tratamientos secuenciales I Preguntas sobre propiedades PQ! PP || QP && Q true falsetrue false truefalse true false truefalse (Repasemos cómo funcionan los operadores lógicos) TABLA DE VERDAD:

UD8: Tratamientos secuenciales I Preguntas sobre propiedades Propiedad: ¿para todo elemento se verifica? Operador: && Elemento Neutro: true ESQUEMA: Boolean r = true; for(T o: it){ if(…){ r = r && … ; } return r;

UD8: Tratamientos secuenciales I Preguntas sobre propiedades Propiedad: ¿existe algún elemento que verifica que …? Operador: || Elemento Neutro: false ESQUEMA: Boolean r = false; for(T o: it){ if(…){ r = r || … ; } return r;

UD8: Tratamientos secuenciales I Preguntas sobre propiedades // ¿Existe algún número par en v? public static Boolean existePar (List l){ Boolean res = false; for(Integer e: l) res = res || (e%2==0); return res; } Iteración nº ¿e es par? res 7 7

UD8: Tratamientos secuenciales I Preguntas sobre propiedades // ¿Existe algún número par en v? public static Boolean existePar (List l){ Boolean res = false; for(Integer e: l) res = res || (e%2==0); return res; } Iteración nº ¿e es par? res 0--- false 1falsefalse || false -> false 2falsefalse || false -> false 3true false || true -> true false true || false -> true … etc … ¿Cómo sería un método que responda si todos los elementos son números pares?

UD8: Tratamientos secuenciales I Preguntas sobre propiedades // ¿Existe algún número par en v? public static Boolean existePar (List l){ Boolean res = false; for(Integer e: l) res = res || (e%2==0); return res; } Nota: Tratamiento no eficiente pues encuentra un elemento que cumple la propiedad y sin embargo sigue con las comprobaciones. ¿cómo podemos conseguir la eficiencia?

UD8: Tratamientos secuenciales I Preguntas sobre propiedades //Versión eficiente nº1: (uso de break) public static Boolean existeParEficienteN1 (List l){ Boolean res = false; for(Integer e: l){ res = res || (e%2==0); if(e%2==0) break; } return res;} //Versión eficiente nº2: (“variable de frenado” dentro de un while) public static Boolean existeParEficienteN2 (List l){ Boolean res = false; int i=0; while(i<l.size() && !res){ if(l.get(i)%2==0){ res = true; } i++;//¿qué ocurre si olvidamos esta instrucción? }return res;}

UD8: Tratamientos secuenciales I Preguntas sobre propiedades ¿para todo …? VERSIÓN EFICIENTE ESQUEMA: Boolean r = true; for(T o: it){ if(…){ r = r && … ; if(!r){ break; } return r;

UD8: Tratamientos secuenciales I Preguntas sobre propiedades ¿existe …? VERSIÓN EFICIENTE ESQUEMA: Boolean r = false; for(T o: it){ if(…){ r = r || … ; if(r){ break; } return r;

UD8: Tratamientos secuenciales I Máximos, mínimos máximo vs. mínimo: Elemento neutro: null Operador: operación comparación 2 a 2 ESQUEMA: T a=null; for(T e:it) //a = (a==null? e: Utiles.max(e,a)); if(a==null) a = e; else a = Utiles.max(e,a); return a; (análogo para el mínimo)

UD8: Tratamientos secuenciales I Máximos, mínimos máximo vs. mínimo: (versión con filtrado) Elemento neutro: null Operador: operación comparación 2 a 2 ESQUEMA: T a=null; for(T e:it) if(…){ a = (a==null? e: Utiles.max(e,a)); } if(a==null) throw new NoSuchElementException(“…”); return a; (análogo para el mínimo)

UD8: Tratamientos secuenciales I Máximos, mínimos Iteración nº ¿mayor(a,res)->? resultado resultado ->7--- (7,9)->9resultado ->9 (9,4)->9 resultado ->9 … etc …

UD8: Tratamientos secuenciales I Máximos, mínimos //El ejemplo anterior:(versión “intuitiva”) public static Integer maxValor(List l){ //Primer candidato el primer elemento Integer res = l.get(0); for(Integer e:l){ //¿Nuevo elemento mayor? Si fuera así, lo cambio if(res.compareTo(e)<0)//if(res<e) res = e; } return res; }

UD8: Tratamientos secuenciales I Máximos, mínimos /*El ejemplo anterior: *(versión basada en operador binario máximo de dos *elementos)*/ public static Integer maxValor_version2(List l){ Integer a=null; for(Integer e:l) a = a==null? e: Utiles.max(e,a); return a; }

UD8: Tratamientos secuenciales I Máximos, mínimos public class Utiles{ /*Método auxiliar para calcular el máximo de dos *elementos: tipos genéricos (ampliando a *supertipos) usando orden natural del tipo */ public static >E max(E e1, E e2){ return e1.compareTo(e2)>= 0 ? e1 : e2; } // … }

UD8: Tratamientos secuenciales I Máximos, mínimos El esquema para el máximo y el mínimo puede ser mejorado si el tratamiento del primer elemento es incluido en el máximo binario: //Versión “robusta” de max binario public static > T max(T o1, T o2) { T o=null; if(o1!=null && o2!=null){ if(o1.compareTo(o2)>=0) o=o1; else o=o2; } else { if(o1==null) o=o2; if(o2==null) o=o1; } return o; }

UD8: Tratamientos secuenciales I Máximos, mínimos máximo vs. mínimo: versión mejorada El tratamiento del primer elemento está incluido en el operador binario Utiles.max(-,-). ESQUEMA: T a=null; for(T e:it) a = Utiles.max(e,a); } return a; Nota 1: la opción de filtrado se puede añadir de manera análoga a como se hizo con la versión anterior Nota 2: el uso del operador Utiles.max(-,-) en su versión robusta evita el disparo de excepciones cuando haya valores perdidos (null) en el agregado. (análogo para el mínimo)

UD8: Tratamientos secuenciales I Búsquedas Búsqueda Operador: = Elemento Neutro: -- ESQUEMA: T b = null; for(T e: it){ if(...){ b=e; break; } return b;