lunes, 15 de abril de 2013

Arreglo Bidimensional Consola C# (Suma y multiplicacion matricial)




//  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: