// ClaseMatriz
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Matrices_Consola
{
class ClaseMatriz
{
// Tamaño de la matriz
private readonly int maxrenglones; // Máximo de renglones
private readonly int maxcolumnas; // Máximo de columnas
private int renglones; // Cantidad de renglones de la matriz
private int columnas; // Cantidad de columnas de la matriz
private double[,] Matriz; // Declaración de la matriz
public int MaxRenglones()
{
return (maxrenglones);
}
public int MaxColumnas()
{
return (maxcolumnas);
}
public int Renglones
{
get
{
return (renglones);
}
set
{
renglones = value;
}
}
public int Columnas
{
get
{
return (columnas);
}
set
{
columnas = value;
}
}
// Propiedad para acceder a la celda [r,c] de la matriz
public double this[int r, int c]
{
get
{
return (Matriz[r,c]);
}
set
{
Matriz[r, c] = value;
}
}
public ClaseMatriz(int r, int c) // Constructor con parámetros
{
maxrenglones = r;
maxcolumnas = c;
Renglones = r;
Columnas = c;
Matriz = new double[maxrenglones, maxcolumnas]; // Creación de la matriz
}
private bool EstaVacia()
{
if (Renglones == 0 || Columnas == 0)
return (true);
else
return (false);
}
// Método que devuelve una cadena con el dibujo de la matriz
public string Mostrar()
{
string Resultado = "";
if (!EstaVacia()) // Si no está vacía ...
{
for (int r = 0; r <= Renglones - 1; r++)
{
Resultado=Resultado+"\n";
for (int c = 0; c <= Columnas - 1; c++)
Resultado=Resultado + Matriz[r, c] + "\t";
}
}
else
Resultado="\nMatriz vacía ...";
return (Resultado);
}
// Sobrecarga del operador + (suma)
public static ClaseMatriz operator +(ClaseMatriz A, ClaseMatriz B)
{
ClaseMatriz MatrizC = new ClaseMatriz(A.Renglones,A.Columnas); // Creación de un objeto local
for (int r = 0; r <= A.Renglones - 1; r++)
for (int c = 0; c <= A.Columnas - 1; c++)
MatrizC[r, c] = A[r, c] + B[r, c]; // Suma matricial
return (MatrizC); // Devuelve la matriz con el resultado de la suma
}
// Sobrecarga del operador * (multiplicación)
public static ClaseMatriz operator *(ClaseMatriz A, ClaseMatriz B)
{
ClaseMatriz MatrizC = new ClaseMatriz(A.Renglones, B.Columnas); // Creación de un objeto local
double suma = 0.0;
for (int i = 0; i <= A.Renglones-1; i++)
for (int k = 0; k <= B.Columnas-1; k++)
{
suma = 0.0;
for (int j = 0; j <= A.Columnas-1; j++)
suma = suma + A[i,j] * B[j,k];
MatrizC[i,k] = suma;
}
return (MatrizC);
}
}
}
//Program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Matrices_Consola
{
class Program
{
static ClaseMatriz MatrizA = new ClaseMatriz(10,10);
static ClaseMatriz MatrizB = new ClaseMatriz(10,10);
static void Main(string[] args)
{
UInt16 opcion = 0;
do
{
Console.Clear();
Console.WriteLine("MATRICES\n");
Console.WriteLine("1.- Capturar Matriz A");
Console.WriteLine("2.- Capturar Matriz B");
Console.WriteLine("3.- Mostrar Matriz A");
Console.WriteLine("4.- Mostrar Matriz B");
Console.WriteLine("5.- Suma Matricial");
Console.WriteLine("6.- Multiplicación Matricial");
Console.WriteLine("0.- Salir");
Console.Write("\nOpción ? ");
opcion = UInt16.Parse(Console.ReadLine());
switch (opcion)
{
case 1 : Capturar(MatrizA); break;
case 2 : Capturar(MatrizB); break;
case 3 : MostrarMatriz(MatrizA); break;
case 4 : MostrarMatriz(MatrizB); break;
case 5 : Sumar(); break;
case 6 : Multiplicar(); break;
}
} while (opcion != 0);
}
public static void Sumar()
{
Console.Clear();
Console.WriteLine("SUMA MATRICIAL \n\n");
if (MatrizA.Renglones != MatrizB.Renglones || MatrizA.Columnas != MatrizB.Columnas)
{
Console.WriteLine("No se pueden sumar ya que las matrices tienen dimensiones diferentes ...");
Console.WriteLine("\n\n<<< Oprima cualquier tecla para continuar >>>");
Console.ReadKey();
}
else
{
ClaseMatriz MatrizC = new ClaseMatriz(MatrizA.Renglones, MatrizA.Columnas);
// Creación de un objeto local
MatrizC = MatrizA + MatrizB;
// Realiza la suma matricial con el operador + sobrecargado
MostrarMatriz(MatrizC); // Muestra la matriz con el resultado
}
}
public static void Multiplicar()
{
Console.Clear();
Console.WriteLine("MULTIPLICACIÓN MATRICIAL \n\n");
if (MatrizA.Columnas!= MatrizB.Renglones)
{
Console.WriteLine("No se pueden sumar ya que las columnas de A son diferentes de los renglones de B ...");
Console.WriteLine("\n\n<<< Oprima cualquier tecla para continuar >>>");
Console.ReadKey();
}
else
{
ClaseMatriz MatrizC = new ClaseMatriz(MatrizA.Renglones, MatrizB.Columnas);
// Creación de un objeto local
MatrizC = MatrizA * MatrizB;
// Realiza la multiplicación matricial con el operador * sobrecargado
MostrarMatriz(MatrizC); // Muestra la matriz con el resultado
}
}
public static void Capturar(ClaseMatriz M)
{
Console.Clear();
Console.WriteLine("CAPTURA DE DATOS DE LA MATRIZ\n");
do
{
Console.Write("\nRenglones ? ");
M.Renglones = int.Parse(Console.ReadLine());
if (M.Renglones < 1 || M.Renglones > M.MaxRenglones())
Console.WriteLine("\nCapture un valor entre 1 y " + M.MaxRenglones());
} while (M.Renglones < 1 || M.Renglones > M.MaxRenglones());
do
{
Console.Write("\nColumnas ? ");
M.Columnas = int.Parse(Console.ReadLine());
if (M.Columnas < 1 || M.Columnas> M.MaxColumnas())
Console.WriteLine("\nCapture un valor entre 1 y " + M.MaxColumnas());
} while (M.Columnas < 1 || M.Columnas > M.MaxColumnas());
for (int r = 0; r <= M.Renglones - 1; r++)
for (int c = 0; c <= M.Columnas - 1; c++)
{
Console.Write("\n[" + r + "," + c + "] ? ");
M[r, c] = int.Parse(Console.ReadLine());
}
}
public static void MostrarMatriz(ClaseMatriz M)
{
Console.Clear();
Console.WriteLine(M.Mostrar()); // Invoca el método Mostrar
Console.WriteLine("\n\nOprima cualquier tecla para continuar");
Console.ReadKey();
}
}
}
No hay comentarios.:
Publicar un comentario
Es muy importante tu comentarios: