Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 28.02.2021
Сообщений: 211

Не правильно умножается матрица на матрицу

31.08.2022, 12:19. Показов 488. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
 
 
namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var A = new Matrix();
            A.Read();
 
            var B = new Matrix();
            B.Read();
 
            A.Mult(A.Data, B.Data);
            A.Write();
 
            Console.ReadKey();
        }
    }
    class Matrix
    {
        public int Rows { get; private set; }
        public int Columns { get; private set; }
        public double[,] Data { get; private set; }
 
 
        public void Read()
        {
            string[] RowColumns = Console.ReadLine().Split(' ');
            Rows = int.Parse(RowColumns[0]);
            Columns = int.Parse(RowColumns[1]);
            Data = new double[Rows, Columns];
 
 
            for (int i = 0; i < Data.GetLength(0); i++)
            {
                var row = Console.ReadLine().Split(' ');
                for (int j= 0; j < Data.GetLength(1); j++)
                {
                    Data[i, j] = double.Parse(row[j]);
                }
            }
 
        }
 
        public double[,] Mult (double[,] A, double [,] B)
        {
            for (int i = 0; i < A.GetLength(0); i++)
            {
                for (int j = 0; j < B.GetLength(1); j++)
                {
                    Data[i, j] = 0;
                    for (int k = 0; k < A.GetLength(1); k++)
                    {
                       Data[i, j] += A[i, k] * B[k, j];
                    }
                }
            }
            return Data;
        }
 
        public void Write()
        {
            for (int i = 0; i < Data.GetLength(0); i++)
            {
                var row = string.Empty;
                for (int j = 0; j < Data.GetLength(1); j++)
                {
                    row += Data[i, j] + " ";
                }
                Console.WriteLine(row.Trim());
            }
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.08.2022, 12:19
Ответы с готовыми решениями:

Почему матрица на вектор умножается быстрее чем вектор на матрицу?
Почему матрица на вектор умножается быстрее чем вектор на матрицу?

матрица на вектор, вроде правильно, а вектор на матрицу? посмотрите пожалуйста?
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int main() { ...

Дана матрица А размерности (n*n). Получить матрицу С(А*Аt)/2, где At-транспонированная матрица.
Дана матрица А размерности (n*n). Получить матрицу С(А*Аt)/2, где At-транспонированная матрица. Заполнить с помощью датчика случайных чисел.

2
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
31.08.2022, 13:10
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
class Matrix
{
    public int Rows { get; private set; }
    public int Columns { get; private set; }
    public double[,] Data { get; private set; }
    public void Read()
    {
        Console.WriteLine("---------------------------");
        Console.Write("Введите количество строк и столбцов через пробел: ");
        string[] RowColumns = Console.ReadLine().Split(' ');
        Rows = int.Parse(RowColumns[0]);
        Columns = int.Parse(RowColumns[1]);
        Data = new double[Rows, Columns];
        for (int i = 0; i < Data.GetLength(0); i++)
        {
            Console.Write($"Введите значения {i + 1} строки через пробел: ");
            var row = Console.ReadLine().Split(' ');
            for (int j = 0; j < Data.GetLength(1); j++)
            {
                Data[i, j] = double.Parse(row[j]);
            }
        }
        Console.WriteLine("---------------------------");
    }
    public void Write()
    {
        Console.WriteLine("---------------------------");
        if(this.Data != null)
        {
            for (int i = 0; i < Data.GetLength(0); i++)
            {
                var row = string.Empty;
                for (int j = 0; j < Data.GetLength(1); j++)
                {
                    row += Data[i, j] + " ";
                }
                Console.WriteLine(row.Trim());
            }
        }
        else
        {
            Console.WriteLine("Матрица не создана");
        }
        Console.WriteLine("---------------------------");
    }
    public static Matrix Mult(Matrix A, Matrix B)
    {
        //мы должны не изменять исходную матрицу, а создать новую, которая будет являться произведением матриц
        var C = new Matrix();
        //Проверка на согласованность матриц
        //Две матрицы можно перемножить между собой тогда и только тогда, когда количество столбцов первой матрицы равно количеству строк второй матрицы
        if (A.Data.GetLength(1) == B.Data.GetLength(0))
        {
            /*
             Умножение матриц A и B размерами m×n и n×k есть операция нахождения матрицы C размера m×k, все элементы которой равны
             cij = ai1 · b1j + ai2 · b2j + ... + ain · bnj
             */
            C.Rows = A.Data.GetLength(0);
            C.Columns = B.Data.GetLength(1);
            C.Data = new double[C.Rows, C.Columns];
            for (int i = 0; i < C.Data.GetLength(0); i++)
            {
                for (int j = 0; j < C.Data.GetLength(1); j++)
                {
                    C.Data[i, j] = 0;
                    for (int n = 0; n < A.Data.GetLength(1); n++)
                    {
                        C.Data[i, j] += A.Data[i, n] * B.Data[n, j];
                    }
                }
            }
        }
        return C;
    }
}
static void Main(string[] args)
{
    var A = new Matrix();
    A.Read();
    var B = new Matrix();
    B.Read();
    var C = Matrix.Mult(A, B);
    C.Write();
    Console.ReadLine();
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
---------------------------
Введите количество строк и столбцов через пробел: 3 2
Введите значения 1 строки через пробел: 2 1
Введите значения 2 строки через пробел: -3 0
Введите значения 3 строки через пробел: 4 -1
---------------------------
---------------------------
Введите количество строк и столбцов через пробел: 2 3
Введите значения 1 строки через пробел: 5 -1 6
Введите значения 2 строки через пробел: -3 0 7
---------------------------
---------------------------
7 -2 19
-15 3 -18
23 -4 17
---------------------------
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
---------------------------
Введите количество строк и столбцов через пробел: 2 2
Введите значения 1 строки через пробел: 4 2
Введите значения 2 строки через пробел: 9 0
---------------------------
---------------------------
Введите количество строк и столбцов через пробел: 2 2
Введите значения 1 строки через пробел: 3 1
Введите значения 2 строки через пробел: -3 4
---------------------------
---------------------------
6 12
27 9
---------------------------
0
0 / 0 / 1
Регистрация: 28.02.2021
Сообщений: 211
31.08.2022, 16:25  [ТС]
iLinks, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2022, 16:25
Помогаю со студенческими работами здесь

Дана матрица A(n,n). Матрица B(n,n) получена из матрицы а по формуле. Вычислить матрицу
Есть вся программа. Но нету output. Помогите, что в нём написать ? #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace...

Дана матрица A(n,n). Матрица B(n,n) получена из матрицы а по формуле. Вычислить матрицу
Дана матрица A(n,n). Матрица B(n,n) получена из матрицы а по формуле. Вычислить матрицу. #include &lt;iostream&gt; #include...

Дана матрица А. Транспонировать матрицу. Вывести на экран исходную и результирующую матрицу
Дана матрица А(10х10). Транспонировать матрицу. Вывести на экран исходную и результирующую матрицу.

Получить матрицу AB, матрица А дана, матрицу В высчитать
Дана квадратная матрица А порядка n. Получить матрицу AB; элементы матрицы B вычисляются по формуле Bij= 1/(i+j-1), если i&lt;j; 0,...

Задана квадратная матрица. Получить транспонированную матрицу и проверить является ли исходная матрица симметричной относительно главной диагонали
Задана квадратная матрица. Получить транспонированную матрицу и проверить является ли исходная матрица симметричной относительно главной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru