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

Создать класс «Квадратная матрица»

26.02.2014, 23:11. Показов 3466. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Определить класс «Квадратная матрица». В классе реализовать методы, позволяющие: вычислять определитель матрицы, транспонировать матрицу, получать обратную матрицу, проверять, не является ли матрица вырожденной, перемножать на другую матрицу.
Операции сложения и умножения матриц реализовать как перегрузки соответствующих операций.
В программе продемонстрировать использование объектов класса «Квадратная матрица».
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.02.2014, 23:11
Ответы с готовыми решениями:

Создать класс объектов квадратная матрица 3х3
Создать класс объектов квадратная матрица 3х3 Среди n объектов определить номер матрицы с наибольшей суммой диагональных элементов.

Создать класс Матрица — массивы массивов из класса Вектор
Добрый вечер, помогите с программой: есть класс Вектор: class Vector { private int hIndex; public int...

Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо
Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо. Дополнительно есть марка,...

4
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
27.02.2014, 09:34
Что уже сделали?
0
4 / 4 / 2
Регистрация: 09.02.2009
Сообщений: 87
27.02.2014, 10:29
http://msdn.microsoft.com/ru-r... us%29.aspx
0
0 / 0 / 0
Регистрация: 26.02.2014
Сообщений: 2
01.03.2014, 22:46  [ТС]
Помогите подправить код, некорректно выводит данные, не могу понять, что не так.
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
using System;
 
namespace Mat
{
    class SquareMatrix
    {
        // Размер
        private int dim;
        // Данные. Один массив содержит dim * dim элементов матрицы
        private double[] data;
        // свойстов, только читаем
        public int dimension
        {
            get
            {
                return dim;
            }
        }
        // Конструктор
        public SquareMatrix(int d)
        {
            // Размерность больше 0
            if (d <= 0)
                throw new ArgumentException("Invalid dimension");
            dim = d;
            data = new double[d * d];
            // Занулить
            for (int i = 0; i < d * d; i++)
                data[i] = 0.0;
        }
        // Установить значение ячейки
        public void SetAt(int x, int y, double val)
        {
            // Не вышли ли за границы?
            if (x < 0 || y < 0 || x > dim - 1 || y > dim - 1)
                throw new ArgumentException("Invalid dimension");
            data[y * dim + x] = val;
        }
        // Взять значение ячейки
        public double GetAt(int x, int y)
        {
            // Не вышли ли за границы?
            if (x < 0 || y < 0 || x > dim - 1 || y > dim - 1)
                throw new ArgumentException("Invalid dimension");
            return this.data[y * this.dim + x];
        }
 
        // Сложение
        public static SquareMatrix operator +(SquareMatrix l, SquareMatrix r)
        {
            if (l.dim != r.dim)
                throw new ArithmeticException("Invalid matrices");
            int d = l.dim, y, x;
            SquareMatrix res = new SquareMatrix(d);
            for (y = 0; y < d; y++)
            {
                for (x = 0; x < d; x++)
                {
                    res.data[y * d + x] = l.data[y * d + x] + r.data[y * d + x];
                }
            }
            return res;
        }
        // Вычитание
        public static SquareMatrix operator -(SquareMatrix l, SquareMatrix r)
        {
            if (l.dim != r.dim)
                throw new ArithmeticException("Invalid matrices");
            int d = l.dim, y, x;
            SquareMatrix res = new SquareMatrix(d);
            for (y = 0; y < d; y++)
            {
                for (x = 0; x < d; x++)
                {
                    res.data[y * d + x] = l.data[y * d + x] - r.data[y * d + x];
                }
            }
            return res;
        }
       
        // Поделить матрицу на число(надо для обратной)
        public static SquareMatrix operator /(SquareMatrix l, double divisor)
        {
            if (divisor == 0.0)
                throw new ArithmeticException("Деление на ноль");
            SquareMatrix res = new SquareMatrix(l.dim);
            int x, y;
            for (y = 0; y < l.dim; y++)
                for (x = 0; y < l.dim; x++)
                    res.SetAt(x, y, l.GetAt(x, y) / divisor);
            return res;
        }
        // Умножение матриц
        public static SquareMatrix operator *(SquareMatrix l, SquareMatrix r)
        {
            if (l.dim != r.dim)
                throw new ArithmeticException("Invalid matricies");
            int d = l.dim;
            SquareMatrix res = new SquareMatrix(d);
            int x, y, i;
            for (y = 0; y < d; y++)
            {
                for (x = 0; x < d; x++)
                {
                    res.data[y * d + x] = 0.0;
                    for (i = 0; i < d; i++)
                        res.data[y * d + x] += l.data[y * d + i] * r.data[i * d + x];
                }
            }
            return res;
        }
        // Транспонирование
        public SquareMatrix Transpone()
        {
            SquareMatrix res = new SquareMatrix(dim);
            int x, y;
            // Просто отзеркалим
            for (y = 0; y < dim - 1; y++)
                for (x = 0; x < dim - 1; x++)
                    res.SetAt(x, y, GetAt(y, x));
            return res;
        }
        // Подматрица, полученная вычеркиванием строчки и столбца(надо дальше)
        public SquareMatrix Submatrix(int noCol, int noRow)
        {
            if (dim == 1)
                throw new ArithmeticException();
            // Подматрица меньше исходной на 1 строчку и колонку
            SquareMatrix res = new SquareMatrix(dim - 1);
            int x, y;
            // Сначала копирем до вычеркнутой строчки
            for (y = 0; y < noRow; y++)
            {
                // до вычеркнутой колонки
                for (x = 0; x < noCol; x++)
                {
                    res.SetAt(x, y, GetAt(x, y));
                }
                // после вычеркнутой колонки
                for (x = noCol + 1; x < dim; x++)
                {
                    res.SetAt(x - 1, y, GetAt(x, y));
                }
            }
            // копируем после вычеркнутой строчки
            for (y = noRow + 1; y < dim; y++)
            {
                // до вычеркнутой колонки
                for (x = 0; x < noCol; x++)
                {
                    res.SetAt(x, y - 1, GetAt(x, y));
                }
                // после вычеркнутой колонки
                for (x = noCol + 1; x < dim; x++)
                {
                    res.SetAt(x - 1, y - 1, GetAt(x, y));
                }
            }
            return res;
        }
        // Вырожеднная?
        public bool IsSingular()
        {
            // Равен ли определитель 0
            return (Determinant() == 0);
        }
        // Определитель
        public double Determinant()
        {
            // Частные простые случаи
            if (dim == 1)
                return GetAt(0, 0);
            if (dim == 2)
                return GetAt(0, 0) * GetAt(1, 1) - GetAt(1, 0) * GetAt(0, 1);
            double res = 0.0;
            int x;
            // Умножение элементов столбика(первого) на соответсвующие полматрицы с нужным знаком
            for (x = 0; x < dim; x++)
            {
                int sign = ((0 + x) % 2 == 0) ? 1 : -1;
                SquareMatrix sub = Submatrix(x, 0);
                res += sign * GetAt(x ,0) * sub.Determinant();
            }
            return res;
        }
        // Обратная матрица
        public SquareMatrix Reverse()
        {
            // Того же размера
            SquareMatrix res = new SquareMatrix(dim);
            int x, y;
            double det = Determinant();
            if (det == 0.0)
                throw new ArithmeticException("Не существует обратной матрицы ибо определитель =0");
            for (y = 0; y < dim; y++)
            {
                for (x = 0; x < dim; x++)
                {
                    SquareMatrix minor = Submatrix(x, y);
                    int sign = ((x + y) % 2 == 0) ? 1 : -1;
                    res.SetAt(x, y, sign * GetAt(x, y) * minor.Determinant());
                }
            }
            // Транспонируем
            res = res.Transpone();
            // Разделть каждый элемент
            res = res / det;
            return res;
        }
        // Напечатать матрицу
        public void PrintMatrix()
        {
            int y, x;
            for (y = 0; y < dim; y++)
            {
                for (x = 0; x < dim; x++)
                {
                    System.Console.Write(data[y * dim + x]);
                    System.Console.Write("  ");
                }
                System.Console.WriteLine();
            }
        }
 
    }
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Матрица 3х3, инициализирована 0
                SquareMatrix m = new SquareMatrix(3);
                // установим некоторые данные
                m.SetAt(0, 0, 3);
                m.SetAt(1, 1, 2);
                m.SetAt(2, 2, 2);
                m.SetAt(2, 1, 1);
                m.SetAt(1, 2, 1);
                m.PrintMatrix();
                Console.Write(m.Determinant());
                Console.Write(m.Reverse());
                Console.Write(m.Transpone());
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
            Console.WriteLine();
            Console.ReadKey(); 
        }
    }
}
Добавлено через 1 час 31 минуту
Все разобралась, сама исправила)
0
4 / 4 / 2
Регистрация: 09.02.2009
Сообщений: 87
01.03.2014, 22:54
Отлично
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2014, 22:54
Помогаю со студенческими работами здесь

Квадратная матрица
Нужно сформировать квадратную матрицу порядка n по заданному образцу (n-чётное) http://s005.***********/i211/1001/ea/a8f90495d338.png

C# Квадратная матрица
Хочу вывести на консоль квадратную матрицу, а у выводит одну цифру public static void Main(string args) { ...

квадратная матрица
Пытаюсь задать квадратную матрицу, не получается, подскажите, что не так Console.Write(&quot;Число строк и столбцов R=&quot;); ...

Квадратная матрица
Здарова форумчани!!! Нужна помощь, решил задачю по матрице на Паскале, а вот перевести её на С# не могу.... Сформировать квадратную...

Квадратная матрица
Нужна помощь...Помогите код написать на С#? Спасибо) Дана квадратная матрица порядка М. Обнулить элементы матрицы, лежащие ниже...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь 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. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru