
Описание программы
Внешний вид программы (рис. 1) представляет собой форму с пунктами меню, кнопками, полями для ввода и вывода данных, а также рабочую область, в которой хранятся данные матриц.
Меню состоит из трех пунктов: «Файл», «Операции», «Справка». В свою очередь меню «Файл» состоит из пункта «Закрыть», позволяющего закрыть программу. Меню «Операции» состоит из пунктов «Сложение», «Вычитание», «Умножение», «Генерация». Меню «Справка» состоит из пунктов «Об авторе» и «Помощь».
Для начала работы необходимо выбрать размерность матриц кнопками «Уменьшить» или «Увеличить». В программе предусмотрена работа с матрицами от 2х2 до 8х8. Но размерность матриц можно изменить легко, поправив небольшой участок в коде программы. Теперь нам нужно внести данные в матрицы. Для этого есть два способа.
1. Из-за того что в проекте мы использовали подключаемый модуль Microsoft FlexGrid, дающий нам возможность выводить матрицы в удобном виде, но не позволяющий редактировать данные напрямую, то мы используем поле для редактирования ячеек. Для редактирования выбираем ячейку, при этом данные переносятся в поле для редактирования, изменяем данные и нажимаем Enter. После нажатия кнопки курсор перемещается в следующую ячейку и для удобства редактирования данные, перемещенные из ячейки, выделяются.
2. Через меню Операции — Сгенерировать можно сгенерировать либо матрицу А, матрицу В или обе матрицы. Сгенерированные матрицы также можно отредактировать.
Для умножения матриц необходимо нажать на кнопку «*» на форме. Для сложения и вычитания следует на жать на форме кнопки «+» и «−» соответственно. Для того чтобы умножать A*B и B*A на форму добавлена кнопка «Обменять» для обмена матриц местами. Для поиска определителя необходимо нажать на кнопку «Опр-ль», для поиска обратной матрицы — кнопку «Обрат.», для вывода транспонированной матрицы — «Трансп.». Для умножения матрицы на число выше матрицы есть поле для ввода числа и кнопка «Умножить» — вводим число и нажимаем на кнопку «Умножить». Все результаты записываются в матрицу С.
Выйти из программы можно в любой момент, нажав на кнопку «Выход» в разделе меню.
Рис. 1. Внешний вид программы.
Блок-схема
Рис. 2. Блок-схема данной программы
Листинг программы
Самым интересным участком в коде программы — это вычисление определителя. Интересен он тем, что реализован с использовании рекурсии и данный блок используется в дальнейшем в программе для поиска обратной матрица. Ниже представлена функция для поиска определителя, а также блок схема (рис. 3).
private double Det(int[,] arr, int n)
{
double Determ = 0;
if (n == 2)
Determ = arr[0, 0] * arr[1, 1] - arr[0, 1] * arr[1, 0];
else
if (n == 3)
Determ = arr[0, 0] * arr[1, 1] * arr[2, 2] + arr[0, 1] * arr[1, 2] * arr[2, 0] + arr[2, 1] * arr[1, 0] * arr[0, 2] - arr[0, 2] * arr[1, 1] * arr[2, 0] - arr[0, 1] * arr[1, 0] * arr[2, 2] - arr[1, 2] * arr[2, 1] * arr[0, 0];
else
{
for (int i = 0; i < n; i++)
{
int[,] tmp = new int[n - 1, n - 1];
for (int j = 1; j < n; j++)
for (int k = 0; k < n; k++)
if (k != i)
if (k > i)
tmp[j - 1, k - 1] = arr[j, k];
else
tmp[j - 1, k] = arr[j, k];
Determ = Determ + arr[0, i] * Math.Pow(-1, i + 2) * Det(tmp, n - 1);
}
}
return Determ;
}
Рис. 3. Блок-схема наиболее интересной части программы: нахождение определителя.