viernes, 25 de noviembre de 2011

Matrices Bidimensionales (Clase propia)

En esta ocasión explica como crear una clase Matriz cuya instancia nos facilite trabajar con arreglos de dos dimensiones, además incluye métodos que realizan operaciones básicas con una sola matriz

La clase Matriz es la siguiente:


class Matriz
{
int[,] _mat;
int _renglones;
int _columnas;

public Matriz()
{
_mat = new int[3, 3];
_renglones = 3;
_columnas = 3;
}

Esta propiedad nos devuelve el número de renglones que posee la matriz
public int Renglones
{
get { return _renglones; }
}
Esta propiedad nos devuelve el numero de columnas que posee la matriz


public int Columnas
{
get { return _columnas; }
}

public Matriz(int renglones, int columnas)
{
_mat = new int[renglones, columnas];
_renglones = renglones;
_columnas = columnas;
}

public int this[int renglon, int columna]
{
get { return _mat[renglon, columna]; }
set { _mat[renglon, columna] = value; }
  }
Este metodo nos devuelve el promedio de la diagonal de la matriz en caso de que sea cuadrada
 


public int Diagonal()
{
if (_renglones != _columnas)
return 0;
int prom = 0;
for (int i = 0; i < _renglones; i++)
prom += _mat[i, i];
prom /= _columnas;
return prom;
}
Este método nos devuelve el promedio de la diagonal invertida de la matriz en caso de que sea cuadrada


public int DiagonalInvertida()
{
if (_renglones != _columnas)
return 0;
int prom = 0;
int col = _columnas-1;
for (int i = 0; i < _renglones; i++)
prom += _mat[i, col--];
prom /= _columnas;
return prom;
}

}
Aqui incluyo un pequeño programa que hace uso de esta matriz:

class Program
{
static void Main(string[] args)
{
int r = Leer("renglones");
int c = Leer("Columnas");
Matriz m = new Matriz(r, c);
LlenarMatriz(m);
MostrarMatriz(m);
Promedios(m);
Console.ReadKey();


}

public static void Promedios(Matriz m)
{
int d = m.Diagonal();
int i = m.DiagonalInvertida();
if (d != 0)
Console.WriteLine("El promedio de la diagonal es: " + d.ToString());
else
Console.WriteLine("No se puede obtener el promedio de diagonal");
if (i != 0)
Console.WriteLine("El promedio de la diagonal invertida es: " + i.ToString());
else
Console.WriteLine("No se puede obtener el promedio de diagonal invertida");
}

public static void MostrarMatriz(Matriz m)
{
string linea = "";
for (int i = 0; i < m.Renglones; i++)
{
for (int j = 0; j < m.Columnas; j++)
{
linea += m[i, j].ToString() + "\t";
}
Console.WriteLine(linea);
linea = "";
}
}

public static void LlenarMatriz(Matriz m)
{
Random r = new Random();
for (int i = 0; i < m.Renglones; i++)
for (int j = 0; j < m.Columnas; j++)
m[i, j] = r.Next(10, 99);
}


public static int Leer(string leerQue)
{
while (true)
{
Console.WriteLine("Numero de {0}", leerQue);
int a = Int32.Parse(Console.ReadLine());
if (a < 3 || a > 10)
{
Console.WriteLine("Error...");
Console.Clear();
continue;
}
else
return a;
}
}
} 
 Si deseas revisar con más detenimiento el proyecto puedes descargarlo completo en el siguiente enlace:
http://www.mediafire.com/?i9djv9pecoxwvie

No hay comentarios:

Publicar un comentario