@embiid

Как написать перегрузку функций для векторов и матриц?

Доброго времени суток!

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

        //////////////////////////////
    }
}
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 2
Griboks
@Griboks Куратор тега C#
У вас ошибка. Вектор - частный случай матрицы. Делаете перегрузку операторов c# для класса матрицы (это каждый маломайский программист сможет) по чуть ли не школьным формулам, аля Cij=Aij+Bij.
Затем, если вдруг по какой-то колдунской причине Путин лично попросил вас добавить ключевое слово Vector в пространство имён, наследуете вектор от матрицы. Соответственно, все функции автоматически наследуются, и не надо мудрить.
Ответ написан
@youkerni
Unity3D developer
С трудом понимаю что Вы пытаетесь сделать.
Еще меньше понимаю то, как Вы это пытаетесь сделать.

Однако, судя по всему, Вам нужно ознакомиться с перегрузкой операторов.
Вот пара статей по этой теме:
https://metanit.com/sharp/tutorial/3.36.php
https://professorweb.ru/my/csharp/charp_theory/lev...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы