Перемножение и сложение матриц разных размерностей - C#

Узнай цену своей работы

Формулировка задачи:

Делал я значит задание на перемножение матриц разных размерностей. А второе задание, сложение матриц. Я сразу посмотрел, как их складывать и понял, что легко, вроде бы 3x3 и 2x2 и тд....Поменять знак в 1 задание и все...А теперь я понял, что не так все просто. Мы же можем складывать 3x2 и 2x3... Перевернуть 3х2, и получится 2х3+2х3...Как это можно сделать? чтобы, строки и стобцы поменяли свои значения? Код у меня в форме, скинуть, если кто возьмется мне помочь-я смогу. Помогите пожалуйста.

Решение задачи: «Перемножение и сложение матриц разных размерностей»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Яп10_вар_3._4__1_часть
{
    public partial class Form1 : Form
    {
        double[,] matrix1, matrix2, matrix3;
        public Form1()
        {
            InitializeComponent();
        }
 
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Matrix.matrixADD(Convert.ToInt32(textBox1.Text), out matrix1);
                add(matrix1, dataGridView1, Convert.ToInt32(textBox1.Text));
            }
            catch
            {
                textBox1.Text = null;
                MessageBox.Show("Некорректный ввод");
                dataGridView1.Columns.Clear();
                dataGridView1.Rows.Clear();
                dataGridView2.Columns.Clear();
                dataGridView2.Rows.Clear();
                dataGridView3.Columns.Clear();
                dataGridView3.Rows.Clear();
            }
        }
        public static void add(double[,] matrix, DataGridView dataGridView, int n)//указываем таблицу в который пишем количество строк и столбцов
        {
            dataGridView.RowCount = n;
            dataGridView.ColumnCount = n;
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    dataGridView.Rows[i].Cells[j].Value = matrix[i, j]; //пишем значения из массива в ячейки таблицы
                }
            }
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                Matrix.matrixUMN(Convert.ToInt32(textBox1.Text), matrix1, matrix2, out matrix3);
                add(matrix3, dataGridView3, Convert.ToInt32(textBox1.Text));
            }
            catch
            {
                textBox1.Text = null;
                MessageBox.Show("Некорректный ввод");
                dataGridView1.Columns.Clear();
                dataGridView1.Rows.Clear();
                dataGridView2.Columns.Clear();
                dataGridView2.Rows.Clear();
                dataGridView3.Columns.Clear();
                dataGridView3.Rows.Clear();
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                Matrix.matrixADD(Convert.ToInt32(textBox1.Text), out matrix2);
                add(matrix2, dataGridView2, Convert.ToInt32(textBox1.Text));
            }
            catch
            {
                textBox1.Text = null;
                MessageBox.Show("Некорректный ввод");
                dataGridView1.Columns.Clear();
                dataGridView1.Rows.Clear();
                dataGridView2.Columns.Clear();
                dataGridView2.Rows.Clear();
                dataGridView3.Columns.Clear();
                dataGridView3.Rows.Clear();
            }
        }
 
        class Matrix
 
        {
            public static void matrixADD(int n, out double[,] matrix)
            {
                Random rd = new Random();
                matrix = new double[n, n];
                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        matrix[i, j] = rd.Next(1, 10);
                    }
                }
            }
            public static void matrixUMN(int n, double[,] matrix1, double[,] matrix2, out double[,] matrix3)
            {
                matrix3 = new double[n, n];
                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < n; j++)
                    {
                        for (int k = 0; k < n; k++)
                        {
                            matrix3[i, j] += matrix1[i, k] * matrix2[k, j];
                        }
                    }
                }
            }
 
        }
                }
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы