Descargar la presentación
La descarga está en progreso. Por favor, espere
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.
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.