- •Введение.
- •Условие задания
- •Текст программы
- •Класс обработчиков главного окна (MainWindow.Xaml.Cs)
- •Класс транспонирования матрицы (at.Cs)
- •Класс умножения матрицы на число k (Axk.Cs)
- •Класс получения канонического вида и ранга матрицы (Kan.Cs)
- •Класс чтения матриц из файла (Re.Cs)
- •Класс записи результатов вычислений в файл (wr.Cs)
- •Класс произведения матриц (Umn.Cs)
- •Класс сложения матриц (Plus.Cs)
- •Класс проверки входа в программу (Parol.Cs)
- •Класс получения определителя матрицы (Opr.Cs)
- •Класс получения разности матрицы (Minus.Cs)
- •Класс получения минора матрицы (Mab.Cs)
- •Класс копирования результата в матрицу (Copir.Cs)
- •Класс хранения матричных данных (Cache.Cs)
- •Описание кода программы
- •Класс обработчиков главного окна (MainWindow.Xaml.Cs)
- •Класс транспонирования матрицы (at.Cs)
- •Класс умножения матрицы на число k (Axk.Cs)
- •Класс получения канонического вида и ранга матрицы (Kan.Cs)
- •Класс чтения матриц из файла (Re.Cs)
- •Класс записи результатов вычислений в файл (wr.Cs)
- •Класс произведения матриц (Umn.Cs)
- •Класс сложения матриц (Plus.Cs)
- •Класс проверки входа в программу (Parol.Cs)
- •Класс получения определителя матрицы (Opr.Cs)
- •Класс получения разности матрицы (Minus.Cs)
- •Класс получения минора матрицы (Mab.Cs)
- •Главное окно (рис. 4)
- •Результаты работы программы
- •Заключение
- •Список литературы
Класс проверки входа в программу (Parol.Cs)
using System;
using System.Collections.Generic;
using System.Windows;
namespace Матрица_1_0
{
class Parol
{
public bool Dostup(string login, string parol)
{
List<string> log=new List<string>();
log.Add("Абхаликов");
log.Add("Булавский");
log.Add("Булыга");
log.Add("Горбенко");
log.Add("Дядичкин");
log.Add("Занько");
log.Add("Казак");
log.Add("Ким");
log.Add("Козлова");
log.Add("Кузнецов");
log.Add("Кульчик");
log.Add("Мурашко");
log.Add("Мусаев");
log.Add("Озолин");
log.Add("Рябчинская");
log.Add("Шаченок");
log.Add("Романовский");
log.Add("Якимович");
log.Add("Ходар");
log.Add("Сокольников");
log.Add("Рутковский");
log.Add("Серебренников");
log.Add("Скоробогатый");
log.Add("Чашинский");
List<string> par = new List<string>();
par.Add("Руслан");
par.Add("Иван");
par.Add("Владимир");
par.Add("Алла");
par.Add("Дмитрий");
par.Add("Роман");
par.Add("Алексей");
par.Add("Дмитрий");
par.Add("Виктория");
par.Add("Валерий");
par.Add("Сергей");
par.Add("Михаил");
par.Add("Эльдар");
par.Add("Никита");
par.Add("Надежда");
par.Add("Татьяна");
par.Add("Антон");
par.Add("Павел");
par.Add("Максим");
par.Add("Максим");
par.Add("Алексей");
par.Add("Владимир");
par.Add("Дмитрий");
par.Add("Александр");
for (int i = 0; i < log.Count; i++)
{
if (login == log[i])
{
if (parol == par[i])
{
MessageBox.Show("Вход выполнен!");
MessageBox.Show("Здравствуйте "+par[i]);
return true;
}
}
}
MessageBox.Show("Вы ввели неправильные данные!");
return false;
}
}
}
Класс получения определителя матрицы (Opr.Cs)
using System;
using System.Collections.Generic;
using System.Windows;
namespace Матрица_1_0
{
class Opr
{
int n = 0;
List<List<double>> M = new List<List<double>>();
double[,] matr;
public double DetGauss(int ind, Cache ch)
{
if (ind == 1)
{
if (ch.c == ch.d)
{
n = ch.c;
matr = ch.matr1;
for (int i = 0; i < n; i++)
{
List<double> Mr = new List<double>();
for (int j = 0; j < n; j++)
{
Mr.Add (matr[i, j]);
}
M.Add(Mr);
}
}
else
{
MessageBox.Show("Выбранная матрица не является квадратной!");
}
}
if (ind == 2)
{
if (ch.e == ch.f)
{
n = ch.e;
matr = ch.matr2;
for (int i = 0; i < n; i++)
{
List<double> Mr = new List<double>();
for (int j = 0; j < n; j++)
{
Mr.Add(matr[i, j]);
}
M.Add(Mr);
}
}
else
{
MessageBox.Show("Выбранная матрица не является квадратной!");
}
}
if (ind == 3)
{
if (ch.g == ch.h)
{
n = ch.h;
matr = ch.res;
for (int i = 0; i < n; i++)
{
List<double> Mr = new List<double>();
for (int j = 0; j < n; j++)
{
Mr.Add(matr[i, j]);
}
M.Add(Mr);
}
}
else
{
MessageBox.Show("Выбранная матрица не является квадратной!");
}
}
double det = 1;
int k = 0;
const double E = 1E-9;
for (int i = 0; i < n; i++)
{
k = i;
for (int j = i + 1; j < n; j++)
{
if (Math.Abs(M[j][i]) > Math.Abs(M[k][i]))
{
k = j;
}
}
if (Math.Abs(M[k][i]) < E)
{
det = 0;
break;
}
Swap(ref M, i, k);
if (i != k) det *= -1;
{
det *= M[i][i];
}
for (int j = i + 1; j < n; j++)
{
M[i][j] /= M[i][i];
}
for (int j = 0; j < n; j++)
{
if ((j != i) && (Math.Abs(M[j][i]) > E))
{
for (k = i + 1; k < n; k++)
{
M[j][k] -= M[i][k] * M[j][i];
}
}
}
}
return det;
}
private void Swap(ref List<List<double>> M, int row1, int row2)
{
double s = 0;
for (int i = 0; i < M[row1].Count; i++)
{
s = M[row1][i];
M[row1][i] = M[row2][i];
M[row2][i] = s;
}
}
}
}