Как написать перегрузку функций для векторов и матриц? Доброго времени суток!
Есть задание, которое требует реализовать класс матрицу и класс вектор. В моем случае, матрица - дочерняя от вектора.
Следующим, что нужно реализовать, так это перегрузку функций, которые умножают матрицу на матрицу; вектора на матрицу; матрицу на вектор; число на матрицу и тд. Если честно, я понятие не имею как это реализовать.
Написал функцию ARRAYxARRAY которая просто умножает элементы рядка на элементы столбика. НО, как сделать, что бы объекты, например, MATRIX и VECTOR использовать с этой функцией. И как потом еще перегрузить функцию для других операций(вектора*матрицу/матрицу*вектор).using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class Vector {
protected int row, column;
protected int[,] ARRAY;
protected int ROW {
get { return row; }
set { row = value; }
}
protected int COLUMN {
get { return column; }
set { column = value; }
}
public Vector() {
}
public Vector(int row, int column) {
this.row = ROW;
this.column = COLUMN;
ARRAY = new int[this.COLUMN, this.ROW];
}
public void EnterVector() {
Console.WriteLine("Choose type of vector:" +
"\nvector-row = [1]" +
"\nvector-col = [2]");
int variant = int.Parse(Console.ReadLine());
if (variant == 1) {
COLUMN = 1;
Console.Write("Enter the numbers of vector elements: ");
ROW = int.Parse(Console.ReadLine());
}
else if (variant == 2) {
ROW = 1;
Console.Write("Enter the numbers of vectror elements: ");
COLUMN = int.Parse(Console.ReadLine());
}
ARRAY = new int[COLUMN, ROW];
for (int col = 0; col < COLUMN; col++) {
for (int row = 0; row < ROW; row++) {
Console.Write("Enter the element of matrix cell[" + (col + 1) + ":" + (row + 1) + "]: ");
ARRAY[col, row] = int.Parse(Console.ReadLine());
}
}
}
public void Display() {
for (int col = 0; col < COLUMN; col++) {
Console.WriteLine("\n");
for (int row = 0; row < ROW; row++) {
Console.Write("{0}\t", ARRAY[col, row]);
}
}
Console.WriteLine();
}
public void ARRAYxARRAY(int[,] firstMatrix, int[,] secondMatrix, int[,] mult, int rowFirst, int columnFirst, int rowSecond, int columnSecond) {
for (int i = 0; i < rowFirst; i++) {
for (int j = 0; j < columnSecond; j++) {
mult[i, j] = 0;
}
}
for (int i = 0; i < rowFirst; i++) {
for (int j = 0; j < columnSecond; j++) {
for (int k = 0; k < columnFirst; k++) {
mult[i, j] += firstMatrix[i, k];
}
}
}
}
~Vector() {
Console.WriteLine("Vector has been denied.");
}
}
class Matrix : Vector {
public Matrix() {
}
public Matrix(int row, int column) {
this.row = ROW;
this.column = COLUMN;
ARRAY = new int[this.COLUMN, this.ROW];
}
public void EnterMatrix() {
Console.Write("Enter the numbers of matrix columns: ");
COLUMN = int.Parse(Console.ReadLine());
Console.Write("Enter the numbers of matrix rows: ");
ROW = int.Parse(Console.ReadLine());
ARRAY = new int[COLUMN, ROW];
for (int col = 0; col < COLUMN; col++) {
for (int row = 0; row < ROW; row++) {
Console.Write("Enter the element of matrix cell[" + (col + 1) + ":" + (row + 1) + "]: ");
ARRAY[col, row] = int.Parse(Console.ReadLine());
}
}
}
~Matrix() {
Console.WriteLine("Matrix has been denied.");
}
}
class Program
{
static void Main()
{
Vector VECTOR = new Vector();
VECTOR.EnterVector();
Console.Write("The vector is: ");
VECTOR.Display();
Console.WriteLine("");
Matrix MATRIX = new Matrix();
MATRIX.EnterMatrix();
Console.Write("\nThe matrix is: ");
MATRIX.Display();
//////////////////////////////
}
}

21 Авг 2019 в 07:00
159 +1
0
Ответы
1

Для реализации перегрузки функций для умножения матриц и векторов, вам нужно будет изменить ваш класс Vector и добавить методы для умножения.

В классе Vector вы можете добавить метод Multiply для умножения вектора на вектор, вектора на матрицу и матрицы на вектор. В методе Multiply вы можете определить логику умножения в зависимости от переданных параметров.

Примерно так:

public class Vector {
// остальной код класса Vector оставляем без изменений
public int[,] Multiply(int[,] matrix) {
// реализация умножения вектора на матрицу
}
public int[] Multiply(int[] vector) {
// реализация умножения вектора на вектор
}
// дополнительный метод для умножения матрицы на вектор
public int[] Multiply(Matrix matrix) {
// реализация умножения матрицы на вектор
}
}

Затем в методе Main вашей программы вы можете вызывать эти методы для умножения векторов и матриц:

Vector vector = new Vector();
vector.EnterVector();
Console.Write("The vector is: ");
vector.Display();
Matrix matrix = new Matrix();
matrix.EnterMatrix();
Console.Write("\nThe matrix is: ");
matrix.Display();
// Умножение вектора на матрицу
int[,] resultMatrix = vector.Multiply(matrix.GetArray());
// Вывод результата
// ...
// Умножение матрицы на вектор
int[] resultVector = vector.Multiply(matrix);
// Вывод результата
// ...

Таким образом, вы сможете перегрузить функции для умножения векторов и матриц и использовать их в вашей программе.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 683 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир