- •Введение.
- •Условие задания
- •Текст программы
- •Класс обработчиков главного окна (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)
- •Результаты работы программы
- •Заключение
- •Список литературы
Условие задания
Программа для работы с матрицами должна обладать некоторым уровнем защиты, обладать интуитивно понятным интерфейсом и легкостью управления, а также обеспечивать должный функционал. В функционале должны присутствовать меню, панель функций и формы отображения информации. Набор функций в программе должен быть следующим: умножение, сложение, деление и вычитание матриц; подсчет определителя матрицы; подсчет минора матрицы; транспонирование матрицы и др.
Текст программы
Класс обработчиков главного окна (MainWindow.Xaml.Cs)
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using Microsoft.Win32;
using System.Diagnostics;
namespace Матрица_1_0
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
// Insert code required on object creation below this point.
}
Cache ch = new Cache();
public void Show(int ind)
{
if (ind == 1)
{
Mm1.Text = null;
for (int i = 0; i < ch.c; i++)
{
for (int j = 0; j < ch.d; j++)
{
Mm1.Text += (ch.matr1[i, j].ToString()+" ");
}
Mm1.Text += "\n";
}
}
if (ind == 2)
{
Mm2.Text = null;
for (int i = 0; i < ch.e; i++)
{
for (int j = 0; j < ch.f; j++)
{
Mm2.Text += (ch.matr2[i, j].ToString()+" ");
}
Mm2.Text += "\n";
}
}
if (ind == 3)
{
Mr.Text = null;
for (int i = 0; i < ch.g; i++)
{
for (int j = 0; j < ch.h; j++)
{
Mr.Text += (ch.res[i, j].ToString()+" ");
}
Mr.Text += "\n";
}
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
string login = Логин.Text.ToString();
string parol = Пароль.Password.ToString();
Parol par = new Parol();
bool v = par.Dostup(login, parol);
if (v == true)
{
Авторизация.Visibility = Visibility.Collapsed;
ch.fam2 = login;
ch.name2 = parol;
}
}
private void New_Click(object sender, RoutedEventArgs e)
{
MainWindow Wind = new MainWindow();
Wind.Visibility = Visibility.Visible;
Wind.Авторизация.Visibility = Visibility.Collapsed;
}
private void AT_Click(object sender, RoutedEventArgs e)
{
AT n = new AT();
n.ATR(1, ch);
Show(3);
}
private void T_Click(object sender, RoutedEventArgs e)
{
if (M1.IsChecked == true)
{
AT_Click(sender, e);
}
if (M2.IsChecked == true)
{
AT_2_Click(sender, e);
}
if (M1.IsChecked == true) { }
else
{
if (M2.IsChecked == true) { }
else
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}
private void AT_2_Click(object sender, RoutedEventArgs e)
{
AT n = new AT();
n.ATR(2, ch);
Show(3);
}
private void Cl_Click(object sender, RoutedEventArgs e)
{
WIND.Close();
}
private void Op_M1_Click(object sender, RoutedEventArgs e)
{
RE read = new RE();
read.Read(1, ch);
Show(1);
MessageBox.Show("Автор файла: "+ch.name+" "+ch.fam);
}
private void Op_M2_Click_1(object sender, RoutedEventArgs e)
{
RE read = new RE();
read.Read(2, ch);
Show(2);
MessageBox.Show("Автор файла: " + ch.name + " " + ch.fam);
}
private void a_k_GotFocus(object sender, RoutedEventArgs e)
{
a_k.Text = null;
}
private void b_GotFocus(object sender, RoutedEventArgs e)
{
b_b.Text = null;
}
private void Copy_Click(object sender, RoutedEventArgs e)
{
if (M1.IsChecked == true)
{
kop1_Click(sender, e);
}
if (M2.IsChecked == true)
{
kop2_Click(sender, e);
}
if (M1.IsChecked == true) { }
else
{
if (M2.IsChecked == true) { }
else
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}
private void Ak1_Click(object sender, RoutedEventArgs e)
{
double k=0;
Axk ak = new Axk();
try
{
k = Convert.ToDouble(a_k.Text.ToString());
ak.Axk2(1, k, ch);
}
catch
{
MessageBox.Show("Ошибка! Вы не ввели число k");
}
Show(3);
}
private void Ak2_Click(object sender, RoutedEventArgs e)
{
double k = 0;
Axk ak = new Axk();
try
{
k = Convert.ToDouble(a_k.Text.ToString());
ak.Axk2(2, k, ch);
}
catch
{
MessageBox.Show("Ошибка! Вы не ввели число k");
}
Show(3);
}
private void K_Click(object sender, RoutedEventArgs e)
{
if (M1.IsChecked == true)
{
Ak1_Click(sender, e);
}
else
{
if (M2.IsChecked == true)
{
Ak2_Click(sender, e);
}
else
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}
private void Obr_Click(object sender, RoutedEventArgs e)
{
if (M1.IsChecked == true)
{
obr1_Click(sender, e);
}
else
{
if (M2.IsChecked == true)
{
obr2_Click(sender, e);
}
else
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}
private void obr1_Click(object sender, RoutedEventArgs e)
{
double opr = 0;
if (ch.c == ch.d)
{
ch.g = ch.c;
ch.h = ch.d;
Opr chislo = new Opr();
opr = chislo.DetGauss(1, ch);
if (opr != 0)
{
double k = 1 / opr;
double[,] Soglmatr = new double[ch.c, ch.d];
for (int i = 0; i < ch.c; i++)
{
for (int j = 0; j < ch.d; j++)
{
Mab mab = new Mab();
Soglmatr[i, j] = mab.Min(1, i, j, ch);
}
}
ch.g++;
ch.h++;
ch.res = Soglmatr;
AT tr = new AT();
tr.ATR(3, ch);
Axk axk = new Axk();
axk.Axk2(3, k, ch);
Show(3);
}
else
{
MessageBox.Show("Ошибка! Данная матрица является вырожденной и не может иметь обратной матрицы!");
}
}
else
{
MessageBox.Show("Выбранная матрица не является квадратной!");
}
}
private void obr2_Click(object sender, RoutedEventArgs e)
{
double opr = 0;
if (ch.e == ch.f)
{
ch.g = ch.e;
ch.h = ch.f;
Opr chislo = new Opr();
opr = chislo.DetGauss(2, ch);
if (opr != 0)
{
double k = 1 / opr;
double[,] Soglmatr = new double[ch.e, ch.f];
for (int i = 0; i < ch.e; i++)
{
for (int j = 0; j < ch.f; j++)
{
Mab mab = new Mab();
Soglmatr[i, j] = mab.Min(2, i, j, ch);
}
}
ch.g++;
ch.h++;
ch.res = Soglmatr;
AT tr = new AT();
tr.ATR(3, ch);
Axk axk = new Axk();
axk.Axk2(3, k, ch);
Show(3);
}
else
{
MessageBox.Show("Ошибка! Данная матрица является вырожденной и не может иметь обратной матрицы!");
}
}
else
{
MessageBox.Show("Выбранная матрица не является квадратной!");
}
}
private void Zakr_Click(object sender, RoutedEventArgs e)
{
Mm1.Text = null;
Mm2.Text = null;
Mr.Text = null;
a_k.Text = "a(k)";
b_b.Text = "b";
status_M1.Text = status_M2.Text = status_rM.Text = "Результат";
M1.IsChecked = false;
M2.IsChecked = false;
ch.c = ch.d = ch.e = ch.f = ch.g = ch.h = 0;
ch.fam = ch.name = "";
ch.matr1 = ch.matr2 = ch.res = null;
}
private void S_Click(object sender, RoutedEventArgs e)
{
WR sav = new WR();
sav.Save(ch);
}
private void Sum_Click(object sender, RoutedEventArgs e)
{
Plus sum = new Plus();
sum.Sum(ch);
Show(3);
}
private void sl_Click(object sender, RoutedEventArgs e)
{
Sum_Click(sender, e);
}
private void Razn_Click(object sender, RoutedEventArgs e)
{
Minus m = new Minus();
m.Min(ch);
Show(3);
}
private void Minus_Click(object sender, RoutedEventArgs e)
{
Razn_Click(sender, e);
}
private void Del_Click(object sender, RoutedEventArgs e)
{
obr2_Click(sender, e);
double[,] vrem = ch.matr2;
int vrem1 = ch.e;
int vrem2 = ch.f;
ch.e = ch.g;
ch.f = ch.h;
ch.matr2 = ch.res;
Umn_Click(sender, e);
ch.e = vrem1;
ch.g = vrem2;
ch.matr2 = vrem;
Show(2);
}
private void razd_Click(object sender, RoutedEventArgs e)
{
Del_Click(sender, e);
}
private void Umn_Click(object sender, RoutedEventArgs e)
{
Umn umn = new Umn();
umn.Umn2(ch);
Show(3);
}
private void umn_Click_1(object sender, RoutedEventArgs e)
{
Umn_Click(sender, e);
}
private void О_программе_Click(object sender, RoutedEventArgs e)
{
Window1 win = new Window1();
win.Visibility = Visibility.Visible;
}
private void Delta_Click(object sender, RoutedEventArgs e)
{
if (M1.IsChecked == true)
{
Opred1_Click(sender, e);
}
else
{
if (M2.IsChecked == true)
{
Opred2_Click(sender, e);
}
else
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}
private void M_Click(object sender, RoutedEventArgs e)
{
if (M1.IsChecked == true)
{
Min1_Click(sender, e);
}
else
{
if (M2.IsChecked == true)
{
Min2_Click(sender, e);
}
else
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}
private void Пароль_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key.Equals( Key.Enter))
{
Button_Click(sender, e);
}
}
private void Логин_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key.Equals(Key.Enter))
{
Пароль.Focus();
}
}
private void Opred1_Click(object sender, RoutedEventArgs e)
{
Opr delta = new Opr();
double opr = delta.DetGauss(1, ch);
status_M1.Text = ("Определитель матрицы равен " + opr.ToString());
Show(3);
}
private void Opred2_Click(object sender, RoutedEventArgs e)
{
Opr delta = new Opr();
double opr = delta.DetGauss(2, ch);
status_M2.Text =("Определитель матрицы равен "+ opr.ToString());
Show(3);
}
private void Min1_Click(object sender, RoutedEventArgs e)
{
Mab minor2=new Mab();
double minor=0;
int a = 0;
int b = 0;
try
{
a = Convert.ToInt32(a_k.Text) - 1;
b = Convert.ToInt32(b_b.Text) - 1;
}
catch
{
MessageBox.Show("Поля a(k) и b не заполнены");
goto u;
}
minor = minor2.Min(1, a, b, ch);
status_M1.Text =("Минор равен " +minor.ToString());
u: status_rM.Text = "Результат";
}
private void Min2_Click(object sender, RoutedEventArgs e)
{
Mab minor2 = new Mab();
double minor = 0;
int a = 0;
int b = 0;
try
{
a = Convert.ToInt32(a_k.Text) - 1;
b = Convert.ToInt32(b_b.Text) - 1;
}
catch
{
MessageBox.Show("Поля a(k) и b не заполнены");
goto u;
}
minor = minor2.Min(2, a, b, ch);
status_M2.Text = ("Минор равен " + minor.ToString());
u: status_rM.Text = "Результат";
}
private void Логин_Initialized(object sender, EventArgs e)
{
Логин.Focus();
}
private void kop1_Click(object sender, RoutedEventArgs e)
{
Copir cop = new Copir();
cop.C(1, ch);
Show(1);
}
private void kop2_Click(object sender, RoutedEventArgs e)
{
Copir cop = new Copir();
cop.C(2, ch);
Show(2);
}
private void Kan1_Click(object sender, RoutedEventArgs e)
{
Kan kan = new Kan();
kan.KV(1, ch);
Show(3);
}
private void Kan2_Click(object sender, RoutedEventArgs e)
{
Kan kan = new Kan();
kan.KV(2, ch);
Show(3);
}
private void KV_Click(object sender, RoutedEventArgs e)
{
if (M1.IsChecked == true)
{
Kan1_Click(sender, e);
}
else
{
if (M2.IsChecked == true)
{
Kan2_Click(sender, e);
}
else
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}
private void R1_Click(object sender, RoutedEventArgs e)
{
Kan rang = new Kan();
int r=rang.Rang(1, ch);
status_M1.Text=("Ранг матрицы равен "+r.ToString());
}
private void R2_Click(object sender, RoutedEventArgs e)
{
Kan rang = new Kan();
int r = rang.Rang(2, ch);
status_M2.Text = ("Ранг матрицы равен " + r.ToString());
}
private void R_Click(object sender, RoutedEventArgs e)
{
if (M1.IsChecked == true)
{
R1_Click(sender, e);
}
else
{
if (M2.IsChecked == true)
{
R2_Click(sender, e);
}
else
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}
private void Справка1_Click(object sender, RoutedEventArgs e)
{
string path = @"D:\Работа\4 семместр\Курсовая\Матрица 1.0_Copy1\Матрица 1.0\Справка";
Process pr = new Process();
pr.StartInfo.FileName = path + "\\Справка.chm";
pr.Start();
}
}
}