Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera....

32
Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos una clase CuentaBancaria agrupando el codigo y el saldo. Un objeto de clase CuentaBancaria es una estructura de datos formada por componentes de tipo elemental. Una variable de tipo clase CuentaBancaria va a referenciar a una estructura de datos que mantiene Introducción a la Programación Orientada a Objetos Estructuras de Datos

Transcript of Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera....

Page 1: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera.

Cuando representamos una caja de ahorro bancaria definimos una clase CuentaBancaria agrupando el codigo y el saldo.

Un objeto de clase CuentaBancaria es una estructura de datos formada por componentes de tipo elemental.

Una variable de tipo clase CuentaBancaria va a referenciar a una estructura de datos que mantiene dos valores numéricos.

Introducción a la Programación Orientada a Objetos

Estructuras de Datos

Page 2: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Cuando representamos un círculo definimos una clase Circulo agrupando componentes de diferentes tipos.

Un objeto de clase Circulo es una estructura de datos formada por una componente de tipo elemental y una de tipo clase.

Una variable de tipo clase Circulo referencia a una estructura de datos.

Introducción a la Programación Orientada a Objetos

Estructuras de Datos

Page 3: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Un arreglo es una estructura de datos homogénea y lineal.

Es una estructura de datos porque agrupa a varios valores, que pueden ser accedidos individualmente.

Es homogénea porque todos los valores son del mismo tipo.

El lineal porque todos los valor ocupan posiciones contínuas, de modo que cada uno tiene un que le sigue, excepto el último y todos tienen uno anterior, excepto el primero.

Introducción a la Programación Orientada a Objetos

Page 4: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

ArreglosUn arreglo queda asociado a una única variable.

Cada valor es un elemento o componente del arreglo y puede accederse a través de un subíndice.

El subíndice representa la posición relativa del elemento dentro del arreglo.

Introducción a la Programación Orientada a Objetos

Un lenguaje que soporte arreglos debe brindar operaciones para:

•Declarar una variable•Crear la estructura•Acceder a sus componentes

Page 5: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Hallar una representación adecuada para las temperaturas mínimas registradas durante un período en una estación meteorológica.

Declarar la variable

<TipoBase> [ ] <Identificador>;

float [] tMin;

Introducción a la Programación Orientada a Objetos

Page 6: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Hallar una representación adecuada para las temperaturas mínimas registradas durante un período en una estación meteorológica.

Crear la estructura

<Identificador> = new <TipoBase> [<Exp>];

tMin = new float [7];

Introducción a la Programación Orientada a Objetos

Page 7: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Hallar una representación adecuada para las temperaturas mínimas registradas durante un período en una estación meteorológica.

0 1 2 3 4 5 6

Acceder a sus componentes

<Identificador> [<Exp>]

Introducción a la Programación Orientada a Objetos

tMin[3]

Page 8: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

0 1 2 3 4 5 6

5.2

tMin[3] = 5.2;x = tMin[3];

tMin[3]

es una variable subindicada de tipo float

Introducción a la Programación Orientada a Objetos

Page 9: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

i = 0;tMin[i] = -2;tMin[i+1] = ES.leerFloat();max = tMin[i];tMin[i+1] = tMin[i];System.out.prinln(tMin[i]);

Introducción a la Programación Orientada a Objetos

La expresión que computa el subíndice tiene que producir un valor dentro del rango (0,6).

En ejecución, si el cómputo produce un valor que está fuera del rango establecido, Java produce una excepción y el programa termina anormalmente.

Page 10: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

0 1 2 3 4 5 6

Un arreglo tiene una longitud que queda fija en el momento de la creación y se almacena en una variable llamada length.

tMin.length

Introducción a la Programación Orientada a Objetos

Page 11: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Leer las temperaturas mínimas y almacenarlas en el arreglo

Arreglos

tMin[0] = ES.leerFloat();tMin[1] = ES.leerFloat();tMin[2] = ES.leerFloat();tMin[3] = ES.leerFloat();tMin[4] = ES.leerFloat();tMin[5] = ES.leerFloat();tMin[6] = ES.leerFloat();

for (int i=0; i<tMin.length; i++) {

tMin[i]=ES.leerFloat();

}Introducción a la Programación Orientada a Objetos

Page 12: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Mostrar las temperaturas mínimas almacenadas en un arreglo

Arreglos

for (int i=0;i<tMin.length;i++) {

System.out.println(tMin[i]);

}

Introducción a la Programación Orientada a Objetos

Page 13: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Calcular en cuántas días hubo heladas

Introducción a la Programación Orientada a Objetos

Corresponde a un patrón conocido

valor 0para i tomando valores entre 1 y n leer s si s cumple la propiedad p valor valor + 1

contador 0n cantidad de elementospara i tomando valores entre 0 y n-1 si tMin[i] cumple la propiedad p contador contador + 1

Page 14: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

int cantHeladas = 0; for (int i=0;i<tMin.length;i++) if (tMin[i]<0) cantHeladas++;

Calcular en cuántas días hubo heladas

Introducción a la Programación Orientada a Objetos

Es un recorrido exhaustivo

Page 15: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Decidir si algún día heló

Introducción a la Programación Orientada a Objetos

int cantHeladas = 0;

for (int i=0;i<tMin.length;i++)

if (tMin[i]<0)

cantHeladas++;

boolean huboHeladas = cantHeladas > 0;

Analizar la eficiencia

Page 16: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

boolean huboHeladas = false;

int i = 0;

while ((i<tMin.length)&&(!huboHeladas)){

if (tMin[i]<0)

huboHeladas=true;

i++;

}

Decidir si algún día heló

Introducción a la Programación Orientada a Objetos

Es un recorrido NO exhaustivo

Page 17: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

boolean huboHeladas = false;

for (int i=0;

(i<tMin.length&&(!huboHeladas));i++)

if (tMin[i]<0)

huboHeladas=true;

Introducción a la Programación Orientada a Objetos

Decidir si algún día heló

Es un recorrido NO exhaustivo

Page 18: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

float suma=0; float promedio;

for (int i=0;i<tMin.length;i++)

suma += tMin[i]; promedio = suma/tMin.length;

Calcular el promedio de las temperaturas mínimas

Introducción a la Programación Orientada a Objetos

Page 19: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

float max = tMin[0];

for (int i=1;i<tMin.length;i++) if (tMin[i]>max) max = tMin[i];

Calcular la temperatura máxima entre las mínimas

Introducción a la Programación Orientada a Objetos

Page 20: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

float max; for (int i=0;i<tMin.length;i++) if (i == 0) max = tMin[i]; else if (tMin[i]>max) max = tMin[i];

Calcular la temperatura máxima entre las mínimas

Introducción a la Programación Orientada a Objetos

No es una buena estrategia utilizar un condicional que solo se verifica en la primera iteración (o en la última)

Page 21: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Calcular el primer día que se produjo la temperatura máxima entre las mínimas

Introducción a la Programación Orientada a Objetos

int dia = 0;

for (int i=1;i<tMin.length;i++) if (tMin[i]>tMin[dia]) dia= i;

Page 22: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Calcular el último día que se produjo la temperatura máxima entre las mínimas

Introducción a la Programación Orientada a Objetos

int dia = 0;

for (int i=1;i<tMin.length;i++) if (tMin[i]>=tMin[dia]) dia= i;

Page 23: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Calcular la primera temperatura registrada mayor a una temperatura t. Si no existe, devolver t

Introducción a la Programación Orientada a Objetos

¿exhaustivo o NO exhaustivo?

Page 24: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

boolean encontre = false; int i = 0; float temp_mayor = t; while ((i<tMin.length) && (!encontre)) if (tMin[i]> t){ encontre=true; temp_mayor = tMin[i];} else i++;

Introducción a la Programación Orientada a Objetos

Calcular la primera temperatura registrada mayor a una temperatura t. Si no existe, devolver t

Page 25: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Calcular la última temperatura registrada mayor a una temperatura t. Si no existe, devolver t

Introducción a la Programación Orientada a Objetos

¿exhaustivo o NO exhaustivo?

Page 26: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

boolean encontre = false; int i = tMin.length-1; float temp_mayor = t; while ((i>=0) && (!encontre)) if (tMin[i]> t){ encontre=true; temp_mayor = tMin[i];} else i--;

Introducción a la Programación Orientada a Objetos

Calcular la última temperatura registrada mayor a una temperatura t. Si no existe, devolver t

Page 27: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Calcular a qué día corresponde la primera temperatura registrada mayor a una dada. Si no existe, devolver -1

boolean encontre = false; int i = 0; int dia = -1;

while ((i<tMin.length) && (!encontre)) if (tMin[i]> t){ encontre=true; dia = i;} else i++;

Introducción a la Programación Orientada a Objetos

Page 28: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Calcular en cuántos días se produjeron temperaturas mínimas mayores a t.

Introducción a la Programación Orientada a Objetos

int cont = 0;

for (int i=1;i<tMin.length;i++) if (tMin[i]>t) cont++;

Sigue el mismo patrón que contar la cantidad de heladas

Page 29: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Decidir si hubo al menos n días con temperaturas mínimas mayores a t

int i = 0; int cont= 0;

while ((i<tMin.length) && cont < n) if (tMin[i]> t) cont++; i++; } boolean hubo = cont == n;

Introducción a la Programación Orientada a Objetos

Page 30: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Arreglos

Decidir si hubo exactamente n días con temperaturas mínimas mayores a t

int i = 0; int cont= 0;

while ((i<tMin.length) && cont > n) if (tMin[i]> t) cont++; i++; } boolean hubo = cont == n;

Introducción a la Programación Orientada a Objetos

Page 31: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Introducción a la Programación Orientada a Objetos

Administración de Memoria

float [] tMin;tMin = new float[7];

tMin

Se crea un objeto y se asigna la referencia a la variable.

La variable mantiene una referencia asociada a un arreglo

7length

Page 32: Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.

Introducción a la Programación Orientada a Objetos

Administración de Memoria

float [] v,w;v = new float[5];w = v;

Una operación de asignación copia la dirección de memoria, no el contenido del arreglo

El operador relacional == compara referencias

v

w 7length