Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 29.09.2018
Сообщений: 147

Сложения матриц разных размеров

06.10.2019, 22:59. Показов 4360. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
написал программу для сложения матриц, но только одинаковых размеров, что нужно переделать чтобы добавить матрицу 3х2 до 2х3?
в таком виде записаны матрицы в файлах
1; 2;
-3; 4;

-2; 4;
3; 1;

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
public class Matrix
    {
        public const int n = 2;
 
        public void Matrix1(int[,] M1)
        {
            string file = @"C:\Users\Yariik\Desktop\Матриця1.txt";
            //try
            //{
                string[] line = File.ReadAllLines(file);
                for (int i = 0; i < line.Length; i++)
                {
                    string[] resistanse1 = line[i].Split(';');
                    for (int j = 0; j < line.Length; j++)
                    {
                        M1[i, j] = int.Parse(resistanse1[j]);
                        Console.Write("{0,3};", M1[i, j]);
                    }
                    Console.WriteLine();
                }
            //}
            //catch (Exception error) { Console.WriteLine("Error:\nВ методi {0} - {1}", error.TargetSite, error.Message); }
            Console.ReadKey();
        }
 
        public void Matrix2(int[,] M2)
        {
            string file = @"C:\Users\Yariik\Desktop\Матриця2.txt";
            //try
            //{
                string[] line = File.ReadAllLines(file);
                for (int i = 0; i < n; i++)
                {
                    string[] resistanse = line[i].Split(';');
                    for (int j = 0; j < n; j++)
                    {
                        M2[i, j] = int.Parse(resistanse[j]);
                        Console.Write("{0,3};", M2[i, j]);
                    }
                    Console.WriteLine();
                }
            //}
            //catch (Exception error) { Console.WriteLine("Error:\nВ методi {0} - {1}", error.TargetSite, error.Message); }
            Console.ReadKey();
        }
 
        public int[,] Addition(int[,] matrix1, int[,] matrix2)
        {
            //if (matrix1.GetLength(0) != matrix2.GetLength(0)) throw new Exception("Матриці не можна додати");
            int[,] resultMatrix = new int[matrix1.GetLength(0), matrix2.GetLength(1)];
            for (int i = 0; i < matrix1.GetLength(0); i++)
            {
                for (int j = 0; j < matrix2.GetLength(1); j++)
                {
                    resultMatrix[i, j] = matrix1[i, j] + matrix2[i, j];
                }
            }
            return resultMatrix;
        }
 
        public int[,] Multiplication(int[,] matrix1, int[,] matrix2)
        {
            if (matrix1.GetLength(1) != matrix2.GetLength(0)) throw new Exception("Матриці не можна перемножити");
            int[,] resultMatrix2 = new int[matrix1.GetLength(0), matrix2.GetLength(1)];
            for (int i = 0; i < matrix1.GetLength(0); i++)
            {
                for (int j = 0; j < matrix2.GetLength(1); j++)
                {
                    for (int k = 0; k < matrix2.GetLength(0); k++)
                    {
                        resultMatrix2[i, j] += matrix1[i, k] * matrix2[k, j];
                    }
                }
            }
            return resultMatrix2;
        }
 
        public void Print(int[,] resultMatrix)
        {
            for (int i = 0; i < resultMatrix.GetLength(0); i++)
            {
                for (int j = 0; j < resultMatrix.GetLength(1); j++)
                {
                    Console.Write("{0,3} ", resultMatrix[i, j]);
                }
                Console.WriteLine();
            }
        }
 
        static void Main(string[] args)
        {
            int[,] M1 = new int[n,n];
            int[,] M2 = new int[n,n];
            Matrix X1 = new Matrix();
            Console.WriteLine("Матриця 1:");
            X1.Matrix1(M1);
            Console.WriteLine("\nМатриця 2:");
            X1.Matrix2(M2);
            Console.WriteLine("\nРезультат додавання матриць:");
            int[,] M3 = X1.Addition(M1, M2);
            X1.Print(M3);
            Console.WriteLine("\nРезультат множення матриць:");
            int[,] M4 = X1.Multiplication(M1, M2);
            X1.Print(M4);
            Console.ReadKey();
        }
    }
Добавлено через 20 минут
как я понял нам нужно в начале считать размер матрицы и передать к-во столбцов и строк на 92,93 строку вместо n. Как я понял это можно сделать с методом GetLength(0) для столбцов и GetLength(1) для строк соответственно, но как это реализовать пока хз
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.10.2019, 22:59
Ответы с готовыми решениями:

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

Перегрузка методов сложения матриц
Задание: Создать класс квадратная матрица , поля класса - размерность и элементы матрицы. Методы класса: проверки, является ли матрица...

Оператор сложения целочисленных матриц
Помогите с проблемой, пожалуйста. Нужно написать оператор сложения двух целочисленных матриц. Написал вот так. Можно ли еще...

28
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
10.10.2019, 07:32
Студворк — интернет-сервис помощи студентам
Mirage2000, покажите как вставили.
Можно скрин с ошибками.
0
0 / 0 / 0
Регистрация: 29.09.2018
Сообщений: 147
10.10.2019, 07:36  [ТС]
Элд Хасп,
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
10.10.2019, 08:02
Mirage2000, блин!
Пишу со смарта - лишнее определение типов!
C#
16
17
public Matrix Addition (Matrix matrix) => Addition (this, matrix);
public static Matrix operator + (Matrix mA, Matrix mB) => Addition( mA, mB);
1
0 / 0 / 0
Регистрация: 29.09.2018
Сообщений: 147
10.10.2019, 08:18  [ТС]
Элд Хасп,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
блин
мой косяк так же! элементарную ошибку не заметил. Все работает
И как на последок сделать сериализацию? и какую лучше использовать, XML?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
10.10.2019, 11:12
Mirage2000, XML и JSON сериализация рассчитаны на одномерные массивы.
В вашем случае лучше использовать двоичную.

Если по условию задания требуется текстовая сериализация (XML, JSON, txt), то лучше сериализацивать не сам тип, а сохранять возврат ToString (), а обратно из строковых данных получить через парсинг.
Это всё уже настроено, надо только записать данные в текстовый файл и прочитать обратно.
1
0 / 0 / 0
Регистрация: 29.09.2018
Сообщений: 147
10.10.2019, 11:52  [ТС]
Элд Хасп, вот сделал двоичную сериализацию, но в файле набор символов, можно как то преобразовать к нормальному состоянию?
C#
1
2
3
4
5
6
7
8
            result3 = Matrix.Multiplication(matrix1, matrix2);
            Console.WriteLine(result3);
 
            var binFormat = new BinaryFormatter();
            using (FileStream fStream = new FileStream("Multiplication.txt", FileMode.OpenOrCreate))
            {
                binFormat.Serialize(fStream, result3);
            }
Добавлено через 16 минут
Элд Хасп, можете еще пожалуйста пояснить работу парсеров именно в контексте нашего кода?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
10.10.2019, 15:01
Mirage2000, двоичная - там не символы, а двоичные коды!
Если нужно получить символы, то нужна какая-то из текстовых сериализаций.

Работа парсеров - это создание экземпляра из строкового им представления.
C#
1
2
3
4
5
6
string value = "2 3.4 5 7.8 9 0.1"; // Строковое линейное представление элементов матрицы
Matrix matrix = Matrix. Parse (3, 2, value); // получение экземпляра из линейного строкового представления
string view = matrix. ToString (); // получение строкового представления матрицы
Console. Write Line (view); // вывод на консоль - можно в файл
Matrix model = Matrix Parse (view); //  Получение экземпляра из сохранённого строкового представления
Console. Write Line (matrix==model); // Сравнение исходного экземпляра и восстановленного из сохранённого представления
1
0 / 0 / 0
Регистрация: 29.09.2018
Сообщений: 147
10.10.2019, 15:48  [ТС]
Элд Хасп, а как мне спарсить например результат сложения в string представление? при условии что ми не передаем строку
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
10.10.2019, 16:50
Лучший ответ Сообщение было отмечено Mirage2000 как решение

Решение

Mirage2000, получаете матрицу-результат сложения.
И её методом ToString получаете представление.

Добавлено через 3 минуты
C#
1
2
3
4
5
6
Matrix matr1 = new Matrix (...);
Matrix matr2 = new Matrix (...);
 
 
Matrix result = matr1 + matr2;
Console. Write Line (result. ToString ()):
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2019, 16:50

Програмная реализация алгоритма сложения трех матриц
Люди добрые, помогите пожалуйста!!:cry: Мне для курсовой работы нужно написать прогу(( а я не пойму как ее делать((( P.S.:...

Результат поэлементного сложения, вычитания и произведения матриц
В первой строке задано число N. Затем задаются две матрицы размером NxN. На экран вывести результат поэлементного сложения матриц, ...

На экран вывести результат поэлементного сложения матриц
В первой строке задано число N. Затем задаются две матрицы размером NxN. На экран вывести результат поэлементного сложения матриц, ...

Как сделать умножения,сложения, двух матриц с обобщением?
Привет, не могли бы вы мне помочь, у меня есть задача, и я не могу понять, как это сделать вообще ... Я должен сделать в C # cложение,...

Конкатенация массивов разных размеров
Здравствуйте, товарищи. Суть такова: есть два массива, например: a {1 , 5 ,4} b {2 , 2 } Нужно получить массив сложением элементов...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru