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

Реализовать возможность сложения двух матриц (в виде отдельной функции)

11.10.2012, 14:08. Показов 1576. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите изменить программу добавив следующий функционал:
-Возможность сложения 2-х матриц (реализовать в виде отдельной функции)
-Возможность вычитания 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication14
{
    class Program
    {
        static void Main(string[] args)
        {//приложение для выполнения арифметических операций над матрицами
 
            Console.WriteLine("Введите матрицу 3x3");
            //создаем новую матрицу размером 3х3
            double[,] matrix1 = ReadMatrix();
 
            Console.WriteLine("Введите матрицу 3х3");
            //создаем вторую матрицу
            double[,] matrix2 = ReadMatrix();
 
            double[,] c;
            c = Multiply(matrix1, matrix2);
            
            Console.WriteLine("Произведение матриц равно:");
 
            //Отображение матрицы в консоле
            ShowMatrix(c);
           
            }
 
        private static void ShowMatrix(double[,]c)
        {
            for (int i = 0; i <3; i++)
            {
                for (int j = 0; j <3; j++)
                {
                    Console.Write("{0}", c[i, j]);
                }
                //новая строка матрицы-переносим курсор
                Console.WriteLine("");
            }
        }
 
        private static double[,] Multiply(double[,] matrix1, double[,] matrix2)
        {
            double[,] c;
            //GetLength(0)-число строк, matrix2.GetLength(1)-число столбцов
            c = new double[matrix1.GetLength(0), matrix2.GetLength(1)];
            for (int i = 0; i < matrix1.GetLength(0);i++)
            {
                for (int j = 0; j<matrix2.GetLength(1); j++)
                {
                    double sum = 0;
                    for (int r = 0; r<matrix1.GetLength(1); r++)
                    {
 
                        //a(i,r)*b(r,i)
                        sum += matrix1[i, r] * matrix2[r, j];
                    }
                    c[i, j] = sum;
                }
            }
            return c;
        }
 
        private static double[,] ReadMatrix()
        {
            //data-переменная для сохранения матрицы в строковом представлении
            string data = "";
            string line;
            //Считываем всю матрицу
            for (; ; )
            {
                line = Console.ReadLine();
                //если пользователь ничего не ввел, а просто
                //нажал Enter - выходим из цикла
                if (line == "") break;
                //добавляем к результирующей строке признак конца строки
                data += line + "\n";
            }
            //получаем массив строк
            string[] dataX = data.Split(new string[] { "\n" },
                                    StringSplitOptions.RemoveEmptyEntries);
            //array-результирующий массив
            double[,] array = null;
            for (int i = 0; i < dataX.Length; i++)
            {
                //dataX[i]-это i-тая строка, разбиваем ее на составляющие числа
                string[] dataY = dataX[i].Split(new string[] { "" },
                                            StringSplitOptions.RemoveEmptyEntries);
                //если i==0, первая интерация - инициализируем массив array
                if (i == 0) array = new double[dataX.Length, dataY.Length];
 
                for (int j = 0; j < dataY.Length; j++)
                {
                    array[i, j] = Convert.ToDouble(dataY[j]);
                }
            }
            return array;
 
 
            
        }
 
       
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.10.2012, 14:08
Ответы с готовыми решениями:

Реализовать функции сложения, вычитания и умножения матриц
Задание: Разработать программу для работы с двумя матрицами. Реализовать функции сложения, вычитания и умножения матриц. Размерность и...

Вычисление произведения двух матриц (матрицы реализовать в виде динамических массивов)
написать программу для вычисления произведения двух матриц.матрицы реализовать в виде динамических массивов.программа работает неправильно...

Вычислить произведение двух матриц и оформить ее в виде функции
Сразу скажу, я криворукий, только учусь, не ругайтесь. Задание простое: вычислить произведение двух матриц и оформить ее в виде функции. У...

10
122 / 120 / 47
Регистрация: 14.09.2012
Сообщений: 276
11.10.2012, 16:21
прибавить матрицу легко.создаешь третью матрицу для записи ответа и пишешь
C#
1
2
3
4
5
6
7
8
9
10
11
12
int x = 5;
int y = 5;
int[,] matrix = new int[x,y];
for (int i = 0; i < x; i++)
{
    for (int j = 0; j < y; j++)
    {
        matrix[i, j] = matrix1[i, j] + matrix2[i, j];
        Console.Write(matrix[i, j] + " ");
    }
    Console.WriteLine();
}
что бы отнять от матрицы поменяй плюс на минус. а в функцию думаю вы сами сможете положить если тот код написали
1
2 / 2 / 2
Регистрация: 04.10.2012
Сообщений: 277
11.10.2012, 16:26  [ТС]
можешь по подробней написать а то я пока нуб в этой теме!((
0
 Аватар для buntar
543 / 544 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
11.10.2012, 16:27
сейчас транспонирование допишу
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace наследование
{
    class Program
    {
        static void Main(string[] args)
        {
            int [,] A = { {0,1,2},
                          {3,4,5},
                          {6,7,8} };
 
            int [,] B = { {7,8,9},
                          {6,-9,-7},
                          {1,2,0} };
 
            int[,] C = new int[3, 3];
            Matr matrix = new Matr();
 
            Console.WriteLine("Матрица А:");
            matrix.ShowMatrix(A);
 
            Console.WriteLine("Матрица B:");
            matrix.ShowMatrix(B);
 
            Console.WriteLine("Сумма матриц А и В:");
            matrix.SumTwoMatrix(A, B, C);
            matrix.ShowMatrix(C);
 
            Console.WriteLine("Вычитание матриц В и А:");
            matrix.SubstracTwoMatrix(B, A, C);
            matrix.ShowMatrix(C);
 
            Console.ReadKey();
 
        }
    }
    class Matr
    {
        public void SumTwoMatrix(int[,] FirstMatrix, int[,] SecondMatrix, int[,] ResultMatrix)
        {
            if (FirstMatrix.GetLength(0) != SecondMatrix.GetLength(0) || FirstMatrix.GetLength(1) != SecondMatrix.GetLength(1))
                Console.WriteLine("Размерности матриц не {0} и {1} равны!", FirstMatrix, SecondMatrix);
            else
            {
                for (int i = 0; i < FirstMatrix.GetLength(0); i++)
                    for (int j = 0; j < SecondMatrix.GetLength(1); j++)
                        ResultMatrix[i, j] = FirstMatrix[i, j] + SecondMatrix[i, j];
            }
        }
 
        public void SubstracTwoMatrix(int[,] FirstMatrix, int[,] SecondMatrix, int[,] ResultMatrix)
        {
            if (FirstMatrix.GetLength(0) != SecondMatrix.GetLength(0) || FirstMatrix.GetLength(1) != SecondMatrix.GetLength(1))
                Console.WriteLine("Размерности матриц не {0} и {1} равны!", FirstMatrix, SecondMatrix);
            else
            {
                for (int i = 0; i < FirstMatrix.GetLength(0); i++)
                    for (int j = 0; j < SecondMatrix.GetLength(1); j++)
                        ResultMatrix[i, j] = FirstMatrix[i, j] - SecondMatrix[i, j];
            }
        }
 
        public void ShowMatrix(int[,] Matrix)
        {
            for (int i = 0; i < Matrix.GetLength(0); i++)
            {
                for (int j = 0; j < Matrix.GetLength(1); j++)
                    Console.Write("{0} ", Matrix[i, j]);
 
                Console.WriteLine();
            }
        }
    }
}
1
2 / 2 / 2
Регистрация: 04.10.2012
Сообщений: 277
11.10.2012, 16:31  [ТС]
а чтоб в консоле самому вводить матрицы как это сделать?
0
 Аватар для buntar
543 / 544 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
11.10.2012, 16:36
транспонирование (для матрицы с одинаковой размерностью):
C#
1
2
3
4
5
6
7
8
9
10
11
12
        public void TransponseMatrix(int[,] FirstMatrix)
        {
            int[,] temp = new int[FirstMatrix.GetLength(0), FirstMatrix.GetLength(1)];
 
            for (int i = 0; i < FirstMatrix.GetLength(0); i++)
                for (int j = 0; j < FirstMatrix.GetLength(1); j++)
                    temp[i, j] = FirstMatrix[j, i];
 
            for (int i = 0; i < FirstMatrix.GetLength(0); i++)
                for (int j = 0; j < FirstMatrix.GetLength(1); j++)
                    FirstMatrix[i, j] = temp[i, j];
        }
вводить с клавиатуры:
C#
1
2
3
4
5
6
7
int [,] qwe = new int [5,6];
for (int i = 0; i < qwe.GetLength(0); i++)
     for (int j = 0; j < qwe.GetLength(1); j++)
        {
          Console.Write("Введите [{0},{1}] элемент:", i,j);
          qwe[i, j] = Int32.Parse(Console.ReadLine());
         }
1
2 / 2 / 2
Регистрация: 04.10.2012
Сообщений: 277
11.10.2012, 16:43  [ТС]
а как полностью программа выглядеть будет?
0
 Аватар для buntar
543 / 544 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
11.10.2012, 16:47
как-то так:
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace наследование
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] A = new int[3, 3];
            for (int i = 0; i < A.GetLength(0); i++)
                for (int j = 0; j < A.GetLength(1); j++)
                {
                    Console.Write("Введите [{0},{1}] элемент:", i, j);
                    A[i, j] = Int32.Parse(Console.ReadLine());
                }
 
            int[,] B = new int[3, 3];
            for (int i = 0; i < B.GetLength(0); i++)
                for (int j = 0; j < B.GetLength(1); j++)
                {
                    Console.Write("Введите [{0},{1}] элемент:", i, j);
                    B[i, j] = Int32.Parse(Console.ReadLine());
                }
 
            int[,] C = new int[3, 3];
            Matr matrix = new Matr();
 
            Console.WriteLine("Матрица А:");
            matrix.ShowMatrix(A);
 
            Console.WriteLine("Матрица B:");
            matrix.ShowMatrix(B);
 
            Console.WriteLine("Сумма матриц А и В:");
            matrix.SumTwoMatrix(A, B, C);
            matrix.ShowMatrix(C);
 
            Console.WriteLine("Вычитание матриц В и А:");
            matrix.SubstracTwoMatrix(B, A, C);
            matrix.ShowMatrix(C);
 
            Console.WriteLine("Транспонирование матрицы С:");
            matrix.TransponseMatrix(C);
            matrix.ShowMatrix(C);
 
            Console.ReadKey();
 
        }
    }
    class Matr
    {
        public void SumTwoMatrix(int[,] FirstMatrix, int[,] SecondMatrix, int[,] ResultMatrix)
        {
            if (FirstMatrix.GetLength(0) != SecondMatrix.GetLength(0) || FirstMatrix.GetLength(1) != SecondMatrix.GetLength(1))
                Console.WriteLine("Размерности матриц не {0} и {1} равны!", FirstMatrix, SecondMatrix);
            else
            {
                for (int i = 0; i < FirstMatrix.GetLength(0); i++)
                    for (int j = 0; j < SecondMatrix.GetLength(1); j++)
                        ResultMatrix[i, j] = FirstMatrix[i, j] + SecondMatrix[i, j];
            }
        }
 
        public void SubstracTwoMatrix(int[,] FirstMatrix, int[,] SecondMatrix, int[,] ResultMatrix)
        {
            if (FirstMatrix.GetLength(0) != SecondMatrix.GetLength(0) || FirstMatrix.GetLength(1) != SecondMatrix.GetLength(1))
                Console.WriteLine("Размерности матриц не {0} и {1} равны!", FirstMatrix, SecondMatrix);
            else
            {
                for (int i = 0; i < FirstMatrix.GetLength(0); i++)
                    for (int j = 0; j < SecondMatrix.GetLength(1); j++)
                        ResultMatrix[i, j] = FirstMatrix[i, j] - SecondMatrix[i, j];
            }
        }
 
        public void TransponseMatrix(int[,] FirstMatrix)
        {
 
            int[,] temp = new int[FirstMatrix.GetLength(0), FirstMatrix.GetLength(1)];
 
            for (int i = 0; i < FirstMatrix.GetLength(0); i++)
                for (int j = 0; j < FirstMatrix.GetLength(1); j++)
                    temp[i, j] = FirstMatrix[j, i];
 
            for (int i = 0; i < FirstMatrix.GetLength(0); i++)
                for (int j = 0; j < FirstMatrix.GetLength(1); j++)
                    FirstMatrix[i, j] = temp[i, j];
        }
 
        public void ShowMatrix(int[,] Matrix)
        {
            for (int i = 0; i < Matrix.GetLength(0); i++)
            {
                for (int j = 0; j < Matrix.GetLength(1); j++)
                    Console.Write("{0} ", Matrix[i, j]);
 
                Console.WriteLine();
            }
        }
    }
}
1
2 / 2 / 2
Регистрация: 04.10.2012
Сообщений: 277
11.10.2012, 17:10  [ТС]
Спасибо огромное!!! а можно сделать вариант ввода чисел визуально представляющий матрицу?
0
 Аватар для buntar
543 / 544 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
11.10.2012, 17:12
Цитата Сообщение от Dant-90 Посмотреть сообщение
а можно сделать вариант ввода чисел визуально представляющий матрицу?
А не многовато-ли для одной темы?
Все можно, но мне уже некогда.
1
2 / 2 / 2
Регистрация: 04.10.2012
Сообщений: 277
11.10.2012, 17:13  [ТС]
ясно! но все равно спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.10.2012, 17:13
Помогаю со студенческими работами здесь

Реализовать перегрузку оператора сложения пользовательского класса Ellipse для сложения двух полуосей эллипса
Нужно дополнить прогу конструктором\деструктором и перегруженой операцией, чтоб &quot;+&quot; делал сложение двух полуосей элипса: ...

Добавьте возможность сложения (сложения через оператор сложения) для дроби с целым числом. (не только с дробью)
Есть код, не могу написать как складывать дробь с целым числом, а не только с дробью. + Создайте дочерний класс OperationsOnFraction и...

Функции сложения матриц и умножения матриц на число
Найти k – количество нечетных чисел ниже побочной диагонали матрицы T и m – количество нечетных чисел матрицы C.Если k&gt;m, найти...

Реализовать функцию сложения матриц
Дорогие друзья у меня такой вопрос я написал класс class Matrix { private: int size; int det; double** matrix;

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru