Перемножение и сложение матриц разных размерностей - 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];
}
}
}
}
}
}
}