La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y Programación Orientada a Objetos

Presentaciones similares


Presentación del tema: "Diseño y Programación Orientada a Objetos"— Transcripción de la presentación:

1 Diseño y Programación Orientada a Objetos
Conferencia # 4: TDA Matriz de enteros Facultad Ing. Informática ISPJAE

2 Contenido Conceptos generales
Trabajo con arreglos de múltiples dimensiones en Java TDA Matriz de enteros

3 Bibliografía Bruce Eckel Thinking in Java. Tercera Edición. 2002.
Zukowski John. “Programación Java 2. J2SE 1.4”. Volumen 1. Cap. 6. Pág H.M.Dietel:”Como programar en C/C++”. Capítulo 17, epígrafe 17.8 Bjarne Stroustrup “The C++ Programming Language”. Ayuda en línea del Eclipse 3.2

4 ¿Cuál estructura de datos usar para almacenar:?
Notas de n estudiantes en 1 asignatura Notas de n estudiantes en m asignaturas … n … n 1 m R/ Arreglo lineal R/ Arreglo matricial

5 Nota del estudiante i en la asignatura j
Arreglo Matricial Nota del estudiante i en la asignatura j 0 1 … i … n 1 j m Notas n*m notas Asignaturas Estudiantes

6 Arreglo matricial en C++
1 2 3 4 x int x[5][3]; stack x[1][2]= 6 6 [fila][columna] x zona contigua *3 => 15*4bytes

7 Arreglo multidimensional en Java
Un arreglo de arreglos. Un arreglo de referencias a otros arreglos. Cada nueva dimensión se comporta como una colección de otros arreglos internos.

8 Arreglo multidimensional en Java
x Físico X Lógico

9 Arreglo multidimensional en Java
x X Lógico Físico

10 Arreglo multidimensional en Java
x x Lógico Físico

11 Arreglo multidimensional en Java
Declaración Sintaxis Ejemplos: <tipo>[][] <identif.>; int[][] m; <tipo>[] <identif.> []; int [] m[]; <tipo> <identif.> [][]; int m[][];

12 Arreglo multidimensional en Java
stack heap m int[][] m; m= new int[3][2]; stack heap m m[0] m[2] m[1]

13 Arreglo multidimensional en Java
stack heap m int[][] m; m= new int[3][]; m[0]= new int[2] m[2]= new int[3] stack heap m null m[0] m[2] m[1] null null

14 Arreglo multidimensional en Java
stack heap m null m[0] m[2] m[1] m.length  3 m[0].length  2 m[2].length  3

15 Arreglo multidimensional en Java
stack heap m null m[0] m[2] m[1] 3 1 m[0][0]= 3 m[2][1]= 1

16 ¿Fila? ¿Columna? m null stack heap m null stack heap 3 m[0] m[1] 1
1 3 stack heap m null 1 3

17 Inicialización int[][] m2 = { {1, 2},{4, 5, 6} }; m null stack heap

18 Arreglo multidimensional de objetos
Rectangle[][] mR; mR= new Rectangle[3][] ; for(int i= 0; i < mR.length; i++) { mR[i]= new Rectangle[2]; for (int j= 0; j < mR[i].length; j++) mR[i][j]= new Rectangle() ; }; ¿Cómo queda la memoria?

19 TDA: Matriz de enteros

20 Campos Un arreglo de dos dimensiones Orden de la matriz:
Cantidad de filas: cantidad de arreglos (tamaño de la colección de referencias) Cantidad de columnas: cantidad de elementos de cada arreglo (tamaño de las otras colecciones)

21 Métodos Para la construcción Para manipulación de los datos:
lectura/escritura Álgebra interna (sin colaborar con otros objetos) Álgebra externa (en colaboración con otros objetos de la propia clase)

22 Consideraciones Arreglo de referencias: 1ra columna, cantidad elementos = cantidad filas Todos los arreglos igual capacidad:  siempre = cantidad de columnas. Solo se puede añadir/eliminar filas/columnas, pero no elementos aislados. Se utiliza una clase auxiliar para manipular posiciones: RowCol

23 public class RowCol { private int row, int col; public RowCol(int row, int col) { this.row = row; this.col = col; } public int getRow() {return row;} public void setRow(int row) { if (row >= 0) this.row = row; } public int getCol() {return col;} public void setCol(int col) { if (col >= 0) this.col = col;} }

24 public class IntMatrix {
public static final int DEFAULT_ROW_CAPACITY= 5; DEFAULT_COL_CAPACITY= 5; private int[][] data; private int colCount; private int rowCount;

25 public IntMatrix(int rowCapacity,
int colCapacity ) { if (rowCapacity <= 0 || colCapacity <= 0) data=new int[DEFAULT_ROW_CAPACITY] [DEFAULT_COL_CAPACITY]; else data= new int[rowCapacity] [colCapacity]; } public IntMatrix(){…} public IntMatrix(int[][] source ){…}

26 public IntMatrix(int[][] source,
int rowCount, int colCount) {…} public IntMatrix(IntMatrix source){…} public void set(int row,int col,int item) { if(row < rowCount && col < colCount) data[row][col] = item; } public int get(int row, int col) { return data[row][col];

27 private void ensureColCapacity(int minCap) { int[][] newData;
if(minCap > 0) newData= new int[data.length][colCount minCap)]; else newData= new int[data.length][colCount + DEFAULT_COL_CAPACITY)]; for(int i= 0 ; i < rowCount ; i++) System.arraycopy(data[i], 0, newData[i], 0, colCount); data = newData; }

28 public int sum(int row1, int col1, int row2, int col2) {
for(int i= row1; i <= row2; i++) for(int j = col1; j <= col2; j++) sum+= data[i][j]; return sum; }

29 public int sum() { return sum(0, 0, rowCount-1, colCount-1); } public IntMatrix sum(IntMatrix matrix) { // estudio independiente

30 public IntArray deleteCol(int col) {
IntArray deletedCol= new IntArray(getRowCount()); for(int i= 0; i < rowCount; i++) deletedCol.add(data[i][col]); for(int j= col + 1; j < colCount; j++) data[i][j-1]=data[i][j]; clear(0,colCount-1,rowCount-1,colCount-1); colCount--; return deletedCol; }

31 public RowCol indexBiggerValue(
int row1, int col1, int row2, int col2) { int bigger= data[row1][col1]; RowCol rowCol= new RowCol(row1,col1); for (int i = row1; i <= row2; i++) for (int j = col1; j <= col2; j++) if (data[i][j] > bigger) { bigger = data[i][j]; rowCol.setRow(i); rowCol.setCol(j); } return rowCol; }

32 IntMatrix como instancia miembro
Caso de estudio: Ventas de un medicamento

33 Estudio de un medicamento. Se conoce:
unidades vendidas en cada farmacia de una provincia durante cada mes del año. promedio histórico de ventas en cada trimestre del año. Requisitos funcionales: Conocer dado un mes cuántas unidades se vendieron en la provincia. Conocer las farmacias donde se vendió la mayor cantidad de unidades. Conocer los trimestres en que se vendió por encima del promedio histórico.

34 Venta de Farmacia 1 en Diciembre
Enero Diciembre Farm 1 200 100 550 320 70 286 854 324 Farm n Venta de Farmacia 1 en Diciembre Histórico trimestral

35 Solución public class SalesMedicin { FloatArray historical;
IntMatrix sales;

36 Solución sales.addRowZero(countPharm); sales.addColZero(12);
public SalesMedicin(int countPharm) { this.historical = new FloatArray(4); this.sales= new IntMatrix(countPharm,12); sales.addRowZero(countPharm); sales.addColZero(12); }

37 Requisitos funcionales
Conocer dado un mes cuántas unidades se vendieron en la provincia. public int salesMonth(int month){ return sales.sum(0, month-1, sales.getRowCount()-1, month-1); }

38 Requisitos funcionales
b) Conocer las farmacias donde se vendió la mayor cantidad de unidades.

39 public IntArray pharmBiggerSales() {
IntArray pharSales= sales.sumForRow(0,0, sales.getRowCount()-1, sales.getColCount()-1); IntArray pharBigg= new IntArray(); int index= pharSales.indexBiggerValue();

40 int bigg= pharSales.get(index);
for(int i= 0; i< pharSales.getCount(); i++) if (pharSales.get(i) == bigg) pharBigg.add(i); return pharBigg; }

41 Requisitos funcionales
c) Conocer los trimestres en que se vendió por encima del promedio histórico.

42 public IntArray trimesterMoreSales() {
IntArray trimester= new IntArray(); int sum= 0; float average; for(int month= 0; month < 12; month++) { for(int phar= 0; phar < sales.getRowCount(); phar++) sum += sales.get(phar, month); if((month+1)%3 == 0) { if(sum > historical.average()) trimester.add((month+1)/3); sum= 0; } } return trimester; }

43 Conclusiones Importancia de implementar TDAs

44 Estudio Independiente
Completar implementación del TDA Matriz de enteros. Comprobar con las implementaciones del doc. Completar implementación del caso de estudio: Ventas de un medicamento

45 Estudio Independiente
Obtener la combinación lineal de m vectores de Rn con los escalares λ1,…, λm. . Proponer diseño para el caso de estudio: Departamento de personal.


Descargar ppt "Diseño y Programación Orientada a Objetos"

Presentaciones similares


Anuncios Google