Матричный калькулятор

В данном разделе представлены два матричных калькулятора) Первый - сделан как можно проще, а Второй уже более менее похож на настоящий калькулятор матрицы реализован с помощь КЛАССА ДЛЯ РАБОТЫ С МАТРИЦАМИ(для простоты реализации изначально работает с матрицами 3х3 записанных в DataGridView).

ПЕРВЫЙ ВАРИАНТ)

Данная программа корректно работает только с квадратными матрицами. Матрицы заполняются случайными числами. Самое важное тут то, что она умеет считать определитель, а все остальное элементарные вещи и базовые понятия, которые не должны вызывать у вас трудностей) Все массивы выводятся в label

З.Ы. Перемножение матриц происходит неправильно...  Правильный алгоритм перемножения выложил в раздел Массивы... Исправлять тут ничего не буду... Также во ВТОРОМ ВАРИАНТЕ, который представлен вместе с Классом есть правильный алгоритм перемножения матриц...

            label3.Text = "";
            label8.Text = "";
            label10.Text = "";
            label13.Text = "";
            label15.Text = "";
            int n=Convert.ToInt32(textBox1.Text);
            int m = Convert.ToInt32(textBox2.Text);
            int s = 0,s1=0;
            Random rnd = new Random();
            int[,] a=new int[n,m];
            int[,] b = new int[n, m];
            int[,] c = new int[n, m];
            int[,] f = new int[n, m];
            int[,] k = new int[n, m];


            for (int i = 0; i < n; i++)               //матрица1
            {
                for (int j = 0; j < m; j++)
                {
                    a[i, j] = rnd.Next(-44,53);
                    label3.Text += a[i, j]+" ";
                    if (i == j || i < j)
                        s += a[i, j];
                    if ((i == (n - 1) && (j == 0 || j == 1)) || (i == (n - 2) && j == 0))
                        s1 += a[i, j];
                }
               label3.Text+= Environment.NewLine;
            }


            for (int i = 0; i < n; i++)               //матрица2
            {
                for (int j = 0; j < m; j++)
                {
                    b[i, j] = rnd.Next(-44, 53);
                    label8.Text += b[i, j] + " ";
                }
                label8.Text += Environment.NewLine;
            }


            for (int i = 0; i < n; i++)                 //умножение и сложение
            {
                for (int j = 0; j < m; j++)
                {
                    c[i, j] = a[i,j]+b[i,j];
                    f[i, j] = a[i, j] * b[j, i];
                    label10.Text += c[i, j] + " ";
                    label13.Text += f[i, j] + " ";
                    if (j % n == (n-1)) label13.Text += Environment.NewLine;
                }
                label10.Text += Environment.NewLine;
            }
            label6.Text = s.ToString();
            label7.Text = s1.ToString();



            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    k[i, j] = a[j, i];
                }
            }
                                                          //Тран... матрицы
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    label15.Text+=k[i, j]+" ";
                }
                label15.Text += Environment.NewLine;
            }

            // определитель

            //переменная n(размерность иходной ''квадратной'' матрицы) должна получить значение до этого момента
           
            double[,] L = new double[n, n];
            double[,] U = new double[n, n];
//до этого момента массив A должен быть полностью определен
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    U[0, i] = a[0, i];
                    L[i, 0] = a[i, 0] / U[0, 0];
                    double sum = 0;
                    for (int kk = 0; kk < i; kk++)
                    {
                        sum += L[i, kk] * U[kk, j];
                    }
                    U[i, j] = a[i, j] - sum;
                    if (i > j)
                    {
                        L[j, i] = 0;
                    }
                    else
                    {
                        sum = 0;
                        for (int kk = 0; kk < i; kk++)
                        {
                            sum += L[j, kk] * U[kk, i];
                        }
                        L[j, i] = (a[j, i] - sum) / U[i, i];
                    }
                }
            }
            double det2 = 1;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                   
                    if (i == j) det2 *= U[i, j];
                }
            }
           
            label17.Text = det2.ToString();

Второй Вариант)))

Значения матриц вводятся вручную, матрицы имеют вид 3x3)))

Для начала Сам Код Класса для работы с матрицами)))


namespace Matrix
{
    class MyMatrix
    {
        int[,] a=new int[3,3];

        //передача значений
        public void Set(int i, int j, int znach)
        {
            a[i, j] = znach;
        }

        //сложение
        public static MyMatrix operator +(MyMatrix matrix1, MyMatrix matrix2)
        {
            MyMatrix NewMatrix = new MyMatrix();
            for (int i = 0; i < 3; i++)              
            {
                for (int j = 0; j < 3; j++)
                {
                    NewMatrix.a[i, j] = matrix1.a[i, j] + matrix2.a[i, j];
                }
            }
            return NewMatrix;
        }

        //вывод матрицы
        public string Visual(int i, int j)
        {
            return a[i, j].ToString();
        }

        //вывод всей и сразу.Хд
        public DataGridView FullVisual(DataGridView dt)
        {
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    dt.Rows[j].Cells[i].Value = a[i, j];
                }
            }
            return dt;
        }
        //вычитание
        public static MyMatrix operator -(MyMatrix matrix1, MyMatrix matrix2)
        {
            MyMatrix NewMatrix = new MyMatrix();
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    NewMatrix.a[i, j] = matrix1.a[i, j] - matrix2.a[i, j];
                }
            }
            return NewMatrix;
        }

        //транспонирование
        public MyMatrix Trans()
        {
            MyMatrix NewMatrix = new MyMatrix();
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    NewMatrix.a[i, j] = a[j, i];
                }
            }
            return NewMatrix;
        }

        //умножение
        public static MyMatrix operator *(MyMatrix matrix1, MyMatrix matrix2)
        {
            MyMatrix NewMatrix = new MyMatrix();
            for (int i = 0; i < 3; i++)
            {
                for (int k = 0; k < 3; k++)
                {
                    //int a = 0;
                    for (int j = 0; j < 3; j++)
                    {
                        //a += matrix1.a[j,k] * matrix2.a[i, j];
                        NewMatrix.a[i, k]+= matrix1.a[j, k] * matrix2.a[i, j];
                    }
                    //NewMatrix.a[i, k] = a;
                }
            }
            return NewMatrix;
        }

        //заполнение
        public void Zapoln(DataGridView grid)
        {
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    a[i, j] = Convert.ToInt32(grid.Rows[j].Cells[i].Value);
                }
            }
        }
    }
}


Далее программная реализация, поставленной задачи.хд

Теперь все, что написано вне класса, так сказать.хд


namespace Matrix
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 3; i++)
            {
                dataGridView1.Rows.Add();
                dataGridView2.Rows.Add();
                dataGridView3.Rows.Add();
                //dataGridView1.Rows[i].Cells[0].Value = i.ToString();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MyMatrix matrix1 = new MyMatrix();
            MyMatrix matrix2 = new MyMatrix();
            MyMatrix matrix3;
            matrix1.Zapoln(dataGridView1);
            matrix2.Zapoln(dataGridView2);
            matrix3 = (matrix1 + matrix2);
            matrix3.FullVisual(dataGridView3);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MyMatrix matrix1 = new MyMatrix();
            MyMatrix matrix2 = new MyMatrix();
            MyMatrix matrix3;
            matrix1.Zapoln(dataGridView1);
            matrix2.Zapoln(dataGridView2);
            matrix3 = (matrix1 - matrix2);
            matrix3.FullVisual(dataGridView3);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            MyMatrix matrix1 = new MyMatrix();
            MyMatrix matrix3;
            matrix1.Zapoln(dataGridView1);
            matrix3 = matrix1.Trans();
            matrix3.FullVisual(dataGridView3);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            MyMatrix matrix1 = new MyMatrix();
            MyMatrix matrix2 = new MyMatrix();
            MyMatrix matrix3;
            matrix1.Zapoln(dataGridView1);
            matrix2.Zapoln(dataGridView2);
            matrix3 = (matrix1 * matrix2);
            matrix3.FullVisual(dataGridView3);
        }
    }
}


Вот как-то так) Тут все работает правильно)