Introducción a la Programación Orientada a Objetos Arreglos de 2 dimensiones TDA Matriz...

Post on 03-Feb-2016

218 views 0 download

Transcript of Introducción a la Programación Orientada a Objetos Arreglos de 2 dimensiones TDA Matriz...

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

Implementar un TDA Matriz que brinde operaciones para calcular el producto de un escalar por una matriz, la suma de dos matrices, establecer la matriz identidad, decidir si un matriz es cuadrada, decidir si una matriz es la matriz identidad, decidir si es una matriz simétrica.

La matriz se representa mediante un arreglo de dos dimensiones de números reales.

La clase que encapsula al arreglo brinda operaciones para establecer y obtener un elemento y para comparar, copiar y clonar matrices.

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

0 1 2 3 4 5

Matriz m1;…m1.obtenerElem (1,3);

public float obtenerElem (int f,int c){ return mr[f][c]; }

0

1

2

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

Matriz

real [] [] mr<<constructores>>Matriz (fMax,cMax : entero) <<comandos>>establecerElem (f,c : entero, elem : real)copy(m : Matriz)establecerIdentidad () invertirFilas(f1,f2:entero)xEscalar(r:real)

Asume que la posiciónes válida

Asume que se verificóque la matriz es

cuadrada

Asume que se verificóque f1 y f2 son válidas

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

Matriz

real [] [] mr

<<consultas>>existePos(f,c : entero) : booleanobtenerNFil () : enteroobtenerNCol () : enteroobtenerElem (f,c : entero) : realclone() :Matrizequals(m:Matriz): booleanesCuadrada () : booleanesIdentidad():booleanesTriangularSuperior():booleanesSimetrica():booleanesRala():boolean

Asume que la posiciónes válida

Más de la mitadde los elementos

son 0

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

Matriz

real [] [] mr

<<consultas>>cantElem (elem : real) : enteroestaElem(elem : real) : booleanmayorElemento () : realfilaMayorElemento () : enterovectorMayores () :Vectorsuma (m:Matriz) : Matrizproducto(m:Matriz):Matriztranspuesta():Matriz

Asume que se controlaron filas y col

Genera un vectorcon el mayor elemento

de cada fila

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

Establecer casos de prueba adecuados para cada consulta y comando.

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public class Matriz {

private float[][] mr;

\\ Constructor

public Matriz(int nfil,int ncol){

mr=new float[nfil][ncol];

}

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public int obtenerNfil () { return mr.length; }

public int obtenerNcol () { return mr[0].length; }

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public boolean existePos(int f, int c) { return (f>=0 && f < obtenerNfil()) && (c>=0 && c < obtenerNCol());}

public float obtenerElem(int f,int c){\\ Asume que la posición es válida return mr[f][c];}

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

\\ Comandospublic void establecerElemento (int f,int c,

float x) {\\Asume que la posición es válida

mr[f][c]= x;}

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public void establecerIdentidad () {

iniMatriz(); for (int j=0;j<obtenerNcol();j++) mr[j][j] = 1; }

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public void iniMatriz () { for (int i=0;i<obtenerNfil();i++)

for (int j=0;j<obtenerNcol();j++) mr[i][j] = 0; }

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public void establecerIdentidad () { for (int i=0;i<obtenerNfil();i++)

for (int j=0;j<obtenerNcol();j++) if (i==j) mr[i][j] = 1; else mr[i][j] = 0; }

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

6 0

-3 -9

3 6

0

1

2

0 1

2 0

-1 -3

1 2

0

1

2

0 1

r=3

Producto de matriz por escalar.

para cada posición i,j mri,j = mri,j*r

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public void xEscalar (float r) { for (int i=0;i<obtenerNfil();i++) for (int j=0;j<obtenerNcol();j++) mr[i][j] = mr[i][j] * r;}

para cada posición i,j mri,j = mri,j*r

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public void copy (Matriz m) {

mr = new float[m.obtenerNfil()][m.obtenerNcol()]; for (int i=0;i<obtenerNfil();i++) { for (int j=0;j<obtenerNcol();j++) mr[i][j] = m.obtenerElem(i,j); };

}

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public int cantElem (float ele) { int cant = 0; for (int i=0;i< obtenerNfil();i++) for (int j=0;j< obtenerNcol();j++) if (mr[i][j] == ele)

cant++ ; return cant; }

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public boolean estaElemento (float ele){ boolean hay= false; int i = 0; while (i<obtenerNfil() && !hay){ int j = 0; while (j < obtenerNcol()&& !hay){ hay = (mr[i][j] == ele); j++ ; } i++; } return hay;}

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public boolean esCuadrada () { return (obtenerNfil() == obtenerNcol()) ; }

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

0 1 2 3 4 5

0

1

2

3

4

5 esIdentidad(n)

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

0 1 2 3 4 5

0

1

2

3

4

5 esIdentidad(n)

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

0 1 2 3 4 5

0

1

2

3

4

5 esIdentidad(n)

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

0

0 1 2 3 4 5

0

0

0

1

2

3

4

5

0

0

0 0 0 0 0 1

esIdentidad(n)

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

0 1 2 3 4 5

0

1

2

3

4

5

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

Caso trivialUna matriz m de nxn con n = 1 es la matriz identidad si su único elemento es 1

Caso recursivoUna matriz m de nxn con n > 1 es la matriz identidad sim[i,n-1] = 0 para 0<= i < n-1m[n-1,j] = 0 para 0<= j < n-1m[n-1,n-1] = 1y la matriz m’ de (n-1)x(n-1) es la matriz identidad

Planteo Recursivo

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public boolean esIdent () { if (!esCuadrada()) return false; else return esIdentidad(obtNfil()); }private boolean esIdentidad (int n) { if (n == 0) return (mr[0][0] == 1); else return (mr[n-1][n-1] == 1 && esCeroFila(n-1) && esCeroColumna(n-1)&&

esIdentidad(n-1)); }

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public Matriz sumaMatriz (Matriz m) {

}

3 0

-3 -1

3 1

0

1

2

0 1

2 0

-1 -3

1 2

0

1

2

0 1

5 0

-4 -4

4 3

0

1

2

0 1

suma=new Matriz (obtNFil(),obtNCol());…return suma;

Introducción a la Programación Orientada a Objetos

Arreglos de 2 dimensionesTDA Matriz

public class Matriz {

private float[][] mr;

\\ Constructor

public Matriz (int nfil,int ncol){

mr =new float[nfil][ncol];

}

Introducción a la Programación Orientada a Objetos

Administración de Memoria

/≡

float [][] mr;

Se declara una variable mr que referenciará a un objeto de la clase array con componentes de tipo array con componentes de tipo float.

mr

Introducción a la Programación Orientada a Objetos

Administración de Memoria

mr = new float[5][3];

5length

3

3

3

3

3

mr

Introducción a la Programación Orientada a Objetos

Administración de Memoria

m1 = new Matriz(5,3);

5length

3

3

3

3

3

mr

m1