Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2018, 13:32   #1
laketych
Пользователь
 
Регистрация: 22.12.2015
Сообщений: 37
По умолчанию Как умножить две одинаковые матрицы?

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

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class Matrix
{
    protected int row, column;
    protected int[,] ARRAY;

    public int ROW {
        get { return row; }
        set { row = value; }
    }

    public int COLUMN {
        get { return column; }
        set { column = value; }
    }

    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 elements 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();
            for (int row = 0; row < ROW; row++) {
                Console.Write("{0}\t", ARRAY[col, row]);
            }
        }
        Console.WriteLine();
    }

    public void ARRAYxARRAY(int number, Matrix sMatrix) {
        for (int i = 0; i < COLUMN; i++) {
            for (int j = 0; j < ROW; j++) {
                ARRAY[i, j] += number * sMatrix.ARRAY[i, j];
            }
        }
    }

    public void ARRAYxARRAY(Matrix fMatrix, Matrix sMatrix) {
        for (int i = 0; i < COLUMN; i++) {
            for (int j = 0; j < ROW; j++) {
                ARRAY[i, j] = fMatrix.ARRAY[i, j] * sMatrix.ARRAY[i, j];
            }
        }
    }

    ~Matrix() {
        Console.WriteLine("Matrix has been denied.");
    }
}

class Vector : Matrix {
    public Vector() {

    }

    public Vector(int row, int column) {
        this.row = row;
        this.column = column;

        ARRAY = new int[this.COLUMN, this.ROW];
    }


    ~Vector() {
        Console.WriteLine("Vector has been denied.");
    }
}

class Program {
    static void Main() {
        Matrix MATRIX = new Matrix();
        MATRIX.EnterMatrix();
        Console.WriteLine("The matrix is: ");
        MATRIX.Display();

        Console.Write("enter the number to multiply by: ");
        int number = int.Parse(Console.ReadLine());
        MATRIX.ARRAYxARRAY(number, MATRIX);
        MATRIX.Display();

        MATRIX.ARRAYxARRAY(MATRIX, MATRIX);
        MATRIX.Display();
    }
}
laketych вне форума Ответить с цитированием
Старый 09.05.2018, 13:39   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

http://www.programmersforum.ru/showthread.php?t=319708
p51x на форуме Ответить с цитированием
Старый 09.05.2018, 15:12   #3
laketych
Пользователь
 
Регистрация: 22.12.2015
Сообщений: 37
По умолчанию

Один из вариантов, которые я пытался сделать, но ошибку пишет компилятор:
"Cannot apply indexing with [] to an expression of type Matrix".
Как ее уникнуть?

Код:
public void ARRAYxARRAY(Matrix fMatrix, Matrix sMatrix) {
        int rows1 = fMatrix.ROW, cols1 = fMatrix.COLUMN,
            rows2 = sMatrix.ROW, cols2 = sMatrix.COLUMN;

        if (cols1 == rows2) {
            Matrix tMatrix = new Matrix(rows1, cols2);
            for (int i = 0; i < rows1; i++) {
                for (int j = 0; j < cols2; j++) {
                    for (int k = 0; k < cols1; k++) {
                        tMatrix[i, j] += fMatrix[i, k] * sMatrix[k, j];
                    }
                }
            }
        }
        else {
            Console.WriteLine("Matrixes can`t be multiplied.");
        }
    }
laketych вне форума Ответить с цитированием
Старый 09.05.2018, 15:24   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от laketych Посмотреть сообщение
Как ее уникнуть?
Реализовать оператор для своего класса. Это не приходило в голову?
p51x на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти две одинаковые буквы в слове Alexandr- Помощь студентам 12 18.03.2013 11:01
Даны две матрицы.Есть ли в них одинаковые столбцы? NIKALEX1995 Помощь студентам 3 25.12.2012 22:36
как умножить матрицы rostik123 Visual C++ 4 19.10.2011 21:32
Объединить две одинаковые по структуре базы! myprog Microsoft Office Access 1 31.12.2010 00:00
умножить число на элементы матрицы KORT Помощь студентам 2 04.11.2007 02:06