Курсовая работа
По дисциплине
«Информатика»
«Создание
для отдела логистики набора функций для работы с матрицами»
Содержание
Введение
1.Условие задания
2.Текст программы
2.1Класс обработчиков главного окна (MainWindow.xaml.cs)
2.2Класс транспонирования матрицы (AT.cs)
2.3Класс умножения матрицы на число k (Axk.cs)
2.4Класс получения канонического вида и ранга матрицы (Kan.cs)
2.5Класс чтения матриц из файла (Re.cs)
2.6Класс записи результатов вычислений в файл (WR.cs)
2.7Класс произведения матриц (Umn.cs)
2.8Класс сложения матриц (Plus.cs)
2.9Класс проверки входа в программу (Parol.cs)
2.10Класс получения определителя матрицы (Opr.cs)
2.11Класс получения разности матрицы (Minus.cs)
2.12Класс получения минора матрицы (Mab.cs)
2.13Класс копирования результата в матрицу (Copir.cs)
2.14Класс хранения матричных данных (Cache.cs)
3.Описание кода программы
3.1Класс обработчиков главного окна (MainWindow.xaml.cs)
3.2Класс транспонирования матрицы (AT.cs)
3.3Класс умножения матрицы на число k (Axk.cs)
3.4Класс получения канонического вида и ранга матрицы (Kan.cs)
3.5Класс чтения матриц из файла (Re.cs)
3.6Класс записи результатов вычислений в файл (WR.cs)
3.7Класс произведения матриц (Umn.cs)
3.8Класс сложения матриц (Plus.cs)
3.9Класс проверки входа в программу (Parol.cs)
3.10Класс получения определителя матрицы (Opr.cs
3.11Класс получения разности матрицы (Minus.cs)
3.12Класс получения минора матрицы (Mab.cs)
3.13Класс копирования результата в матрицу (Copir.cs)
3.14Класс хранения матричных данных (Cache.cs)
4.Описание интерфейса
4.1Форма входа (рис. 3)
4.2Главное окно (рис. 4)
5.Результаты работы программы
Заключение
Список
литературы
Введение
Presentation Foundation. Windows Presentation Foundation (WPF, кодовое название - Avalon) - система для построения клиентских приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем, графическая (презентационная) подсистема в составе .NET Framework (начиная с версии 3.0), имеющая прямое отношение к XAML (ЗАМЛ).вместе с .NET Framework 3.0 предустановлена в Windows Vista и Windows 7(.NET Framework 3.5 SP1). С помощью WPF можно создавать широкий спектр как автономных, так и запускаемых в браузере приложений.
Особенности технологии. В основе WPF лежит векторная система визуализации, не зависящая от разрешения устройства вывода и созданная с учетом возможностей современного графического оборудования. WPF предоставляет средства для создания визуального интерфейса, включая Язык XAML (Extensible Application Markup Language), элементы управления, привязку данных, макеты, двухмерную и трехмерную графику, анимацию, стили, шаблоны, документы, текст, мультимедиа и оформление.
Графической технологией, лежащей в основе WPF, является DirectX, в отличие от Windows Forms, где используется GDI/GDI+. Производительность WPF выше, чем у GDI+ за счет использования аппаратного ускорения графики через DirectX. Также существует урезанная версия CLR, называющаяся WPF/E, она же известна как Silverlight.
Использование разметки XAML. XAML представляет собой XML, в котором фактически реализованы классы .NET Framework. Так же реализована модель разделения кода и дизайна, позволяющая кооперироваться программисту и дизайнеру. Кроме того, есть встроенная поддержка стилей элементов, а сами элементы легко разделить на элементы управления второго уровня, которые, в свою очередь, разделяются до уровня векторных фигур и свойств/действий. Это позволяет легко задать стиль для любого элемента, например, Button (кнопка).
Средства разработки. Для работы с WPF требуется
любой .NET-совместимый язык. В этот список входит множество языков: C#, VB,
C++, Ruby, Python, Delphi (Prism) и многие другие. Для полноценной работы может
быть использованы такие программные продукты как Visual Studio, так и Expression
Blend. Первая ориентирована на программирование, а вторая - на дизайн и
позволяет делать многие вещи, не прибегая к ручному редактированию XAML.
Примеры этому - анимация, стилизация, состояния, создание элементов управления
и так далее.Expression Blend. Microsoft Expression Blend (рис. 1) направлен на
разработку дизайна веб-интерфейсов и графических настольных приложений.
Рис. 1. Microsoft Expression Blend
Ключевая особенность продукта в том, что Expression Blend и Visual Studio используют одно и то же расширение файла проекта. А значит теперь у разработчиков и дизайнеров будет существенно меньше конфликтов и противоречий.
К тому же, теперь не составит труда сразу же открыть созданный в Visual Studio проект в Expression Blend и, естественно, наоборот, на одном компьютере. Рассмотрим некоторые возможности продукта.
В Blend включен полный дизайнер WYSIWYG (свойство прикладных программ, в которых содержание отображается в процессе редактирования). При открытых страницах и элементах управления можно переключаться в режим дизайна, в режим XAML источника, либо совместить эти два режима на одном экране и работать с ними одновременно. Blend поддерживает редактирование при помощи векторной графики. Также у него есть поддержка добавления и редактирования множества элементов управления. Есть специальная иконка на панели инструментов дизайна (Grid, Stack, Canvas, Border, Scroll Viewer, и т.д.), инструментов редактирования текста (Text Box, Text Block, и т. д.) и многое другое.
Выбрав любой объект можно поиграть с его свойствами (вкладка Properties). Например, с цветовым представлением элементов и фона. Можно раскрасить объекты не только в интересные цвета, но и представить цвет в виде градиента (рис. 2).
А что вы скажете на то, что градиент может
изменяться динамически во время того или иного действия? И это далеко не все
возможности. Можно добавлять сколь угодно много различных сценариев анимации,
накладывать звук, менять форму и стиль элементов. Expression Blend
предоставляет максимум возможностей и гибкости для быстрой настройки под себя
всех элементов. Что позволяет пофантазировать и поэкспериментировать с
проектом.
Рис. 2. Использование градиента в проекте
Приятным дополнением является возможность
разрабатывать приложения для Windows Phone 7. Теперь создавать приложений на
основе панорам (panorama) или пайвотов (pivot) гораздо удобнее. Наглядно
отображаются необходимые размеры и границы.
.Условие задания
Программа для работы с матрицами должна обладать
некоторым уровнем защиты, обладать интуитивно понятным интерфейсом и легкостью
управления, а также обеспечивать должный функционал. В функционале должны
присутствовать меню, панель функций и формы отображения информации. Набор
функций в программе должен быть следующим: умножение, сложение, деление и
вычитание матриц; подсчет определителя матрицы; подсчет минора матрицы;
транспонирование матрицы и др.
. Текст программы
.1 Класс обработчиков главного окна
(MainWindow.xaml.cs)
using System;System.Windows;System.Windows.Controls;System.Windows.Data;System.Windows.Input;Microsoft.Win32;System.Diagnostics;Матрица_1_0
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>partial class MainWindow : Window
{MainWindow()
{.InitializeComponent();
// Insert code required on object creation below this point.
}ch = new Cache();void Show(int ind)
{(ind == 1)
{.Text = null;(int i = 0; i < ch.c; i++)
{(int j = 0; j < ch.d; j++)
{.Text += (ch.matr1[i, j].ToString()+" ");
}.Text += "\n";
}
}(ind == 2)
{.Text = null;(int i = 0; i < ch.e; i++)
{(int j = 0; j < ch.f; j++)
{.Text += (ch.matr2[i, j].ToString()+" ");
}.Text += "\n";
}
}(ind == 3)
{.Text = null;(int i = 0; i < ch.g; i++)
{(int j = 0; j < ch.h; j++)
{.Text += (ch.res[i, j].ToString()+" ");
}.Text += "\n";
}
}
}void Button_Click(object sender, RoutedEventArgs e)
{login = Логин.Text.ToString();parol = Пароль.Password.ToString();par = new Parol();v = par.Dostup(login, parol);(v == true)
{
Авторизация.Visibility = Visibility.Collapsed;.fam2 = login;.name2 = parol;
}
}void New_Click(object sender, RoutedEventArgs e)
{Wind = new MainWindow();.Visibility = Visibility.Visible;.Авторизация.Visibility = Visibility.Collapsed;
}void AT_Click(object sender, RoutedEventArgs e)
{n = new AT();.ATR(1, ch);(3);
}void T_Click(object sender, RoutedEventArgs e)
{(M1.IsChecked == true)
{_Click(sender, e);
}(M2.IsChecked == true)
{_2_Click(sender, e);
}(M1.IsChecked == true) { }
{(M2.IsChecked == true) { }
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}void AT_2_Click(object sender, RoutedEventArgs e)
{n = new AT();.ATR(2, ch);(3);
}void Cl_Click(object sender, RoutedEventArgs e)
{.Close();
}void Op_M1_Click(object sender, RoutedEventArgs e)
{read = new RE();.Read(1, ch);(1);.Show("Автор файла: "+ch.name+" "+ch.fam);
}void Op_M2_Click_1(object sender, RoutedEventArgs e)
{read = new RE();.Read(2, ch);(2);.Show("Автор файла: " + ch.name + " " + ch.fam);
}void a_k_GotFocus(object sender, RoutedEventArgs e)
{_k.Text = null;
}void b_GotFocus(object sender, RoutedEventArgs e)
{_b.Text = null;
}void Copy_Click(object sender, RoutedEventArgs e)
{(M1.IsChecked == true)
{_Click(sender, e);
}(M2.IsChecked == true)
{_Click(sender, e);
}(M1.IsChecked == true) { }
{(M2.IsChecked == true) { }
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}void Ak1_Click(object sender, RoutedEventArgs e)
{k=0;ak = new Axk();
{= Convert.ToDouble(a_k.Text.ToString());.Axk2(1, k, ch);
}
{
MessageBox.Show("Ошибка! Вы не ввели число k");
}(3);
}void Ak2_Click(object sender, RoutedEventArgs e)
{k = 0;ak = new Axk();
{= Convert.ToDouble(a_k.Text.ToString());.Axk2(2, k, ch);
}
{
MessageBox.Show("Ошибка! Вы не ввели число k");
}(3);
}void K_Click(object sender, RoutedEventArgs e)
{(M1.IsChecked == true)
{_Click(sender, e);
}
{(M2.IsChecked == true)
{_Click(sender, e);
}
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}void Obr_Click(object sender, RoutedEventArgs e)
{(M1.IsChecked == true)
{_Click(sender, e);
}
{(M2.IsChecked == true)
{_Click(sender, e);
}
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}void obr1_Click(object sender, RoutedEventArgs e)
{opr = 0;(ch.c == ch.d)
{.g = ch.c;.h = ch.d;chislo = new Opr();= chislo.DetGauss(1, ch);(opr != 0)
{k = 1 / opr;[,] Soglmatr = new double[ch.c, ch.d];(int i = 0; i < ch.c; i++)
{(int j = 0; j < ch.d; j++)
{mab = new Mab();[i, j] = mab.Min(1, i, j, ch);
}
}.g++;.h++;.res = Soglmatr;tr = new AT();.ATR(3, ch);axk = new Axk();.Axk2(3, k, ch);(3);
}
{.Show("Ошибка! Данная матрица является вырожденной и не может иметь обратной матрицы!");
}
}
{.Show("Выбранная матрица не является квадратной!");
}
}void obr2_Click(object sender, RoutedEventArgs e)
{opr = 0;(ch.e == ch.f)
{.g = ch.e;.h = ch.f;chislo = new Opr();= chislo.DetGauss(2, ch);(opr != 0)
{k = 1 / opr;[,] Soglmatr = new double[ch.e, ch.f];(int i = 0; i < ch.e; i++)
{(int j = 0; j < ch.f; j++)
{mab = new Mab();[i, j] = mab.Min(2, i, j, ch);
}
}.g++;.h++;.res = Soglmatr;tr = new AT();.ATR(3, ch);axk = new Axk();.Axk2(3, k, ch);(3);
}
{.Show("Ошибка! Данная матрица является вырожденной и не может иметь обратной матрицы!");
}
}
{.Show("Выбранная матрица не является квадратной!");
}
}void Zakr_Click(object sender, RoutedEventArgs e)
{.Text = null;.Text = null;.Text = null;_k.Text = "a(k)";_b.Text = "b";_M1.Text = status_M2.Text = status_rM.Text = "Результат";.IsChecked = false;.IsChecked = false;.c = ch.d = ch.e = ch.f = ch.g = ch.h = 0;.fam = ch.name = "";.matr1 = ch.matr2 = ch.res = null;
}void S_Click(object sender, RoutedEventArgs e)
{sav = new WR();.Save(ch);
}void Sum_Click(object sender, RoutedEventArgs e)
{sum = new Plus();.Sum(ch);(3);
}void sl_Click(object sender, RoutedEventArgs e)
{_Click(sender, e);
}void Razn_Click(object sender, RoutedEventArgs e)
{m = new Minus();.Min(ch);(3);
}void Minus_Click(object sender, RoutedEventArgs e)
{_Click(sender, e);
}void Del_Click(object sender, RoutedEventArgs e)
{_Click(sender, e);[,] vrem = ch.matr2;vrem1 = ch.e;vrem2 = ch.f;.e = ch.g;.f = ch.h;.matr2 = ch.res;_Click(sender, e);.e = vrem1;.g = vrem2;.matr2 = vrem;(2);
}void razd_Click(object sender, RoutedEventArgs e)
{_Click(sender, e);
}void Umn_Click(object sender, RoutedEventArgs e)
{umn = new Umn();.Umn2(ch);(3);
}void umn_Click_1(object sender, RoutedEventArgs e)
{_Click(sender, e);
}void О_программе_Click(object sender, RoutedEventArgs e)
{win = new Window1();.Visibility = Visibility.Visible;
}void Delta_Click(object sender, RoutedEventArgs e)
{(M1.IsChecked == true)
{_Click(sender, e);
}
{(M2.IsChecked == true)
{_Click(sender, e);
}
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}void M_Click(object sender, RoutedEventArgs e)
{(M1.IsChecked == true)
{_Click(sender, e);
}
{(M2.IsChecked == true)
{_Click(sender, e);
}
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}void Пароль_KeyDown(object sender, KeyEventArgs e)
{(e.Key.Equals( Key.Enter))
{_Click(sender, e);
}
}void Логин_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{(e.Key.Equals(Key.Enter))
{
Пароль.Focus();
}
}void Opred1_Click(object sender, RoutedEventArgs e)
{delta = new Opr();opr = delta.DetGauss(1, ch);
status_M1.Text = ("Определитель матрицы равен " + opr.ToString());
Show(3);
}void Opred2_Click(object sender, RoutedEventArgs e)
{delta = new Opr();opr = delta.DetGauss(2, ch);
status_M2.Text =("Определитель матрицы равен "+ opr.ToString());
Show(3);
}void Min1_Click(object sender, RoutedEventArgs e)
{minor2=new Mab();minor=0;a = 0;b = 0;
{= Convert.ToInt32(a_k.Text) - 1;= Convert.ToInt32(b_b.Text) - 1;
}
{ .Show("Поля a(k) и b не заполнены");u;
}= minor2.Min(1, a, b, ch);_M1.Text =("Минор равен " +minor.ToString());: status_rM.Text = "Результат";
}void Min2_Click(object sender, RoutedEventArgs e)
{minor2 = new Mab();minor = 0;a = 0;b = 0;
{= Convert.ToInt32(a_k.Text) - 1;= Convert.ToInt32(b_b.Text) - 1;
}
{.Show("Поля a(k) и b не заполнены");u;
}= minor2.Min(2, a, b, ch);_M2.Text = ("Минор равен " + minor.ToString());: status_rM.Text = "Результат";
}void Логин_Initialized(object sender, EventArgs e)
{
Логин.Focus();
}void kop1_Click(object sender, RoutedEventArgs e)
{cop = new Copir();.C(1, ch);(1);
}void kop2_Click(object sender, RoutedEventArgs e)
{cop = new Copir();.C(2, ch);(2);
}void Kan1_Click(object sender, RoutedEventArgs e)
{kan = new Kan();.KV(1, ch);(3);
}void Kan2_Click(object sender, RoutedEventArgs e)
{kan = new Kan();.KV(2, ch);(3);
}void KV_Click(object sender, RoutedEventArgs e)
{(M1.IsChecked == true)
{_Click(sender, e);
}
{(M2.IsChecked == true)
{_Click(sender, e);
}
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}void R1_Click(object sender, RoutedEventArgs e)
{rang = new Kan();r=rang.Rang(1, ch);_M1.Text=("Ранг матрицы равен "+r.ToString());
}void R2_Click(object sender, RoutedEventArgs e)
{rang = new Kan();r = rang.Rang(2, ch);_M2.Text = ("Ранг матрицы равен " + r.ToString());
}void R_Click(object sender, RoutedEventArgs e)
{(M1.IsChecked == true)
{_Click(sender, e);
}
{(M2.IsChecked == true)
{_Click(sender, e);
}
{
MessageBox.Show("Ошибка! Вы не выбрали матрицу!");
}
}
}void Справка1_Click(object sender, RoutedEventArgs e)
{path = @"D:\Работа\4 семместр\Курсовая\Матрица 1.0_Copy1\Матрица 1.0\Справка";
Process pr = new Process();.StartInfo.FileName = path + "\\Справка.chm";
pr.Start();
}
}
}
.2Класс транспонирования матрицы (AT.cs)
using System;Матрица_1_0
{AT
{void ATR(int ind, Cache ch)
{a=0, b=0;[,] matr=new double[a,b];(ind == 1)
{= ch.c;= ch.d;= ch.matr1;
}(ind==2)
{= ch.e;= ch.f;= ch.matr2;
}(ind == 3)
{= ch.g;= ch.h;= ch.res;
}[,] res = new double[b, a];(int i = 0; i < a; i++)
{(int j = 0; j < b; j++)
{[j,i] = matr[i, j];
}
}.g = b;.h = a;.res = res;
}
}
}
.3Класс умножения матрицы на число k (Axk.cs
using System;System.Collections.Generic;System.Linq;System.Text;Матрица_1_0
{Axk
{void Axk2(int ind, double k, Cache ch)
{a = 0, b = 0;[,] matr = new double[a, b];(ind == 1)
{= ch.c;= ch.d;=ch.matr1;
}(ind == 2)
{= ch.e;= ch.f;= ch.matr2;
}(ind == 3)
{= ch.g;= ch.h;= ch.res;.res = null;
}[,] res = new double[a, b];(int i = 0; i < a; i++)
{(int j = 0; j < b; j++)
{[i, j] = Math.Round( matr[i, j]*k, 3);
}
}.g = a;.h = b;.res = res;
}
}
.4 Класс получения канонического вида и ранга
матрицы (Kan.cs)
using System;System.Collections.Generic;System.Linq;System.Text;Матрица_1_0
{Kan
{void KV(int ind, Cache ch)
{a=0,b=0,n=0;uchet = 0;[,] matr=new double[a,b];(ind==1)
{=ch.c;=ch.d;=ch.matr1;
}(ind == 2)
{=ch.e;=ch.f;=ch.matr2;
}:(n < a && n < b)
{del = matr[n, n];(del != 0)
{[] str = new double[b - n];umn = 0;(int i = n; i < b; i++)
{[n, i] = matr[n, i] / del;[i - n] = matr[n, i];
}(int i = n + 1; i < a; i++)
{= matr[i, n];(int j = n; j < b; j++)
{[i, j] = matr[i, j] - str[j - n] * umn;
}
}(int i = n + 1; i < b; i++)
{[n, i] = 0;
}(int i = n; i < a; i++)
{(int j = n; j < b; j++)
{(i == n || j == n)
{(matr[i, j] == 0)
{++;
}
}
}
}
}
}(uchet == ((a + b) - 2)-2*n && uchet!=0)
{=0;++;q;
}
{.g = a;.h = b;.res = matr;
}
}int Rang(int ind, Cache ch)
{(ind, ch);rang = 0;n = ch.g;m = ch.h;:vrem = 0;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{(i == n - 1 && ch.res[i,j]==0)
{++;
}
}
}(vrem == m)
{-;q;
}
{= n;
}rang;
}
}
}
2.5Класс чтения матриц из файла (Re.cs)
System;System.Collections.Generic;System.Text;System.IO;System.Windows;Microsoft.Win32;Матрица_1_0