Как написать перегрузку функций для векторов и матриц? Доброго времени суток!
Есть задание, которое требует реализовать класс матрицу и класс вектор. В моем случае, матрица - дочерняя от вектора.
Следующим, что нужно реализовать, так это перегрузку функций, которые умножают матрицу на матрицу; вектора на матрицу; матрицу на вектор; число на матрицу и тд. Если честно, я понятие не имею как это реализовать.
Написал функцию 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

21 Авг 2019 в 07:00
183 +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 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир