Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

1.1 Аналіз предметної області 7 3 страница



 


private void button4_Click(object sender, EventArgs e)

{

if (Control[3] == 0)

{

Determinant f5 = new Determinant();

f5.Show();

Control[3] = 1;

}

}


 

Рисунок 2.7 – Процедура виклику модуля знаходження визначника

 

На рисунку 2.8 представлена процедура, для виклику форми, що призначена для знаходження зворотної матриці.

 


private void button5_Click(object sender, EventArgs e)

{

if (Control[4] == 0)

{

InventMatrix f6 = new InventMatrix();

f6.Show();

Control[4] = 1;

}

}


 

Рисунок 2.8 – Процедура виклику модуля знаходження зворотної матриці

 

На рисунку 2.9 представлена процедура виклику довідки про програму.

 

private void button6_Click(object sender, EventArgs e)

{

Process.Start(@"О программе.docx");

}

 

Рисунок 2.9 - Процедура виклику довідки про програму

 

На рисунку 2.10 представлена процедура виходу з програми.

 


private void MainMenu_FormClosing(object sender, FormClosingEventArgs e)

{

DialogResult result = MessageBox.Show("Вы точно хотите выйти?", "Выход из программы", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (result == DialogResult.No)

{

e.Cancel = true;

}

}


 

Рисунок 2.10 – Процедура виходу з програми

 

Інші модулі програми, ті, що призначені для обчислень, мають між собою схожу структуру. Після завантаження кожної форми для вирішення певного типу задачі користувач обирає розмірність матриці. В залежності від обраного розміру, що відповідає певному елементу випадаючого списку, на формі динамічно створюється необхідна кількість полів для вводу даних, що відповідає кількості коефіцієнтів матриці та, у випадку з системами лінійних рівнянь, до цієї кількості додається стовпець вільних членів. В залежності від кількості полів для вводу змінюється розмір поля для виводу рішення. Після вводу даних та кліку на кнопку «Решить» запускається метод з алгоритмом для вирішення цього типу задачі, в ході якого поле для виводу рішення заповнюється даними, що описують беспосередньо процес рішення. Якщо користувач натискає кнопку «Сохранить», то всі дані з поля для виведення рішення копіюються в файл формату «.rtf.». Якщо користувач натискає кнопку «Очистить», то викликається метод, що очищає всі текстові елементи на формі. При натисканні на кнопку «Справка» викликається метод, що відкріває довідку через програму «WordPad» або «Microsoft Office Word».

Модуль «Gauss» призначений для вирішення систем лінійних рівнянь методом Гауса. Цей модуль описує окрему форму, що містить алгоритм для вирішення рівнянь різної розмірності.

На рисунку 2.11 представлено процедуру зміни розмірності матриці. Вона однакова для модулів «Gauss», «Kramer» та «Matrix».



 


private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{MatrixSize = comboBox1.SelectedIndex + 2;

if (MatrixSize!= PreviousMatrixSize)

{ richTextBox1.Text = "";

if (Control == 1)

{for (Row = 0; Row < PreviousMatrixSize; Row++)

{for (Cell = 0; Cell < PreviousMatrixSize; Cell++)

{this.Controls.Remove(Koefficients[Row, Cell]);

Koefficients[Row, Cell].Dispose();}}

for (Row = 0; Row < PreviousMatrixSize; Row++)

{this.Controls.Remove(Freemembers[Row]);

Freemembers[Row].Dispose();}}

BeginXPosition = 125 - ((30 * MatrixSize + 15 * (MatrixSize - 1)) / 2);

for (Row = 0; Row < MatrixSize; Row++)

{for (Cell = 0; Cell < MatrixSize; Cell++)

{Koefficients[Row, Cell] = new TextBox();

Koefficients[Row, Cell].Width = 30;

Koefficients[Row, Cell].Height = 30;

Koefficients[Row, Cell].Location = new Point(45 * Row + BeginXPosition, 35 * Cell + 45);

Koefficients[Row, Cell].Name = "Textbox " + Row.ToString() + Cell.ToString();

Koefficients[Row, Cell].TextAlign = HorizontalAlignment.Center;

this.Controls.Add(Koefficients[Row, Cell]);}}

for (Row = 0; Row < MatrixSize; Row++)

{Freemembers[Row] = new TextBox();

Freemembers[Row].Width = 30;

Freemembers[Row].Height = 30;

Freemembers[Row].Location = new Point(265, 35 * Row + 45);

Freemembers[Row].Name = "Textbox " + Row.ToString() + Cell.ToString();

Freemembers[Row].TextAlign = HorizontalAlignment.Center;

this.Controls.Add(Freemembers[Row]);}

label4.Location = new Point(240, 35 * MatrixSize + 45);

richTextBox1.Location = new Point(5, 35 * MatrixSize + 65);

richTextBox1.Size = new Size(525, 490 - (35 * MatrixSize + 105));}

label2.Location = new Point(125 - 42, 5);

Control = 1;

PreviousMatrixSize = MatrixSize;}


 

Рисунок 2.11 – Процедура зміни розмірності матриці

 

На рисунку 2.12 зображено процедуру очищення всіх текстових елементів форми. Вона однакова для модулів «Gauss», «Kramer» та «Matrix».

 


private void button2_Click(object sender, EventArgs e)

{

for (Row = 0; Row < MatrixSize; Row++)

{

for (Cell = 0; Cell < MatrixSize; Cell++)

{

Koefficients[Cell, Row].Text = "";

Freemembers[Row].Text = "";

}

}

richTextBox1.Text = "";

}


 

Рисунок 2.12 – Процедура очищення всіх текстових компонентів на формі

 

На рисунку 2.13 представлено процедуру завантаження форми «Gauss».

 

private void Gauss_Load(object sender, EventArgs e)

{

comboBox1.SelectedIndex = 0;

}

 

Рисунок 2.13 – Процедура завантаження форми «Gauss».

 

На рисунку 2.14 представлена процедура вирішення системи лінійних рівнянь методом Гауса, в ході якого рішення виводиться в текстове поле.

 


private void button1_Click(object sender, EventArgs e)

{

richTextBox1.Text = "";

float[,] MatrixMembers = new float[MatrixSize, MatrixSize + 1];

float Value;

float[] Temp = new float[MatrixSize + 1];

string[] Description = { "Общий", "Первый", "Второй", "Третий", "Четвертый", "Пятый" };

int Iteration, IsEmptyM, IsEmptyF, Counteri, Counterj;

int Cell1, Cell2, Cell3, Cell4, Cell5, Row1, Row2, Row3, Counter;

float[] opr = new float[MatrixSize + 1];

float[] opr4 = new float[MatrixSize + 1];

float[] opr5 = new float[MatrixSize + 1];

IsEmptyM = 0;

for (Row = 0; Row < MatrixSize; Row++)

{for (Cell = 0; Cell < MatrixSize; Cell++)

{if (Koefficients[Cell, Row].Text == "") IsEmptyM = 1;}}

IsEmptyF = 0;

for (Row = 0; Row < MatrixSize; Row++)

{if (Freemembers[Row].Text == "") IsEmptyF = 1;}

if (IsEmptyM == 0 && IsEmptyF == 0)

{ExitOrNot = 0;

for (Row = 0; Row < MatrixSize; Row++)

{for (Cell = 0; Cell < MatrixSize; Cell++)

{try

{MatrixMembers[Row, Cell] = Convert.ToSingle(Koefficients[Cell, Row].Text);}

catch

{ExitOrNot = 1;}}}

for (Row = 0; Row < MatrixSize; Row++)

{try

{MatrixMembers[Row, MatrixSize] = Convert.ToSingle(Freemembers[Row].Text);}

catch

{ExitOrNot = 1;}}

if (ExitOrNot == 1) MessageBox.Show("Неверный формат введенных чисел! Проверьте правильность введенных данных! Bводить можно только цифры от 0 до 9, знак минус и запятую");

if (ExitOrNot == 0)

{richTextBox1.Text += "Имеем начальную матрицу\n\n";

for (Counteri = 0; Counteri < MatrixSize; Counteri++)

{richTextBox1.Text += "\t";

for (Counterj = 0; Counterj < MatrixSize + 1; Counterj++)

{richTextBox1.Text += Math.Round(MatrixMembers[Counteri, Counterj], 3).ToString() + "\t";

if (Counterj == MatrixSize - 1) richTextBox1.Text += "|\t";}

richTextBox1.Text += "\n\n";

}

if (MatrixSize == 2)

{opr[0] = MatrixMembers[0, 0] * MatrixMembers[1, 1] - MatrixMembers[1, 0] * MatrixMembers[0, 1];

if (opr[0] == 0)

{richTextBox1.Text += "\n\nОпределитель матрицы равен нулю. Решений нет";}}

if (MatrixSize == 3)

{Cell1 = 0; Cell2 = 0;

for (Cell = 0; Cell < MatrixSize; Cell++)

{if (Cell == 0) { Cell1 = 1; Cell2 = 2; }

if (Cell == 1) { Cell1 = 0; Cell2 = 2; }

if (Cell == 2) { Cell1 = 0; Cell2 = 1; }

opr[0] += MatrixMembers[0, Cell] * Convert.ToSingle(Math.Pow(-1, Cell + 2)) * (MatrixMembers[1, Cell1] * MatrixMembers[2, Cell2] - MatrixMembers[2, Cell1] * MatrixMembers[1, Cell2]);}

if (opr[0] == 0)

{richTextBox1.Text += "\n\nОпределитель матрицы равен нулю. Решений нет";}}

………………………………………………………..

{richTextBox1.Text += Math.Round(MatrixMembers[Counteri, Counterj], 3).ToString() + "\t";

if (Counterj == MatrixSize - 1) richTextBox1.Text += "|\t";}

richTextBox1.Text += "\n\n";}}}

for (Row = MatrixSize - 1; Row >= 0; Row--)

{for (Iteration = MatrixSize - 1; Iteration > Row; Iteration--)

{if (MatrixMembers[Row, Iteration]!= 0)

{Value = (-MatrixMembers[Row, Iteration] / MatrixMembers[Iteration, Iteration]);

richTextBox1.Text += "\n\nУмножим " + (Iteration + 1).ToString() + " строку на " + Math.Round(Value, 3) + " и сложим ее с " + (Row + 1).ToString() + " строкой\n\n";

for (Cell = 0; Cell < MatrixSize + 1; Cell++)

{MatrixMembers[Row, Cell] = MatrixMembers[Row, Cell] + MatrixMembers[Iteration, Cell] * Value;}

for (Counteri = 0; Counteri < MatrixSize; Counteri++)

{richTextBox1.Text += "\t";

for (Counterj = 0; Counterj < MatrixSize + 1; Counterj++)

{richTextBox1.Text += Math.Round(MatrixMembers[Counteri, Counterj], 3).ToString() + "\t";

if (Counterj == MatrixSize - 1) richTextBox1.Text += "|\t";}

richTextBox1.Text += "\n\n";}}}}

for (Row = 0; Row < MatrixSize; Row++)

{richTextBox1.Text += "\n\n\tx" + (Row + 1).ToString() + " = " + Math.Round(MatrixMembers[Row, MatrixSize], 3);}}}}

else MessageBox.Show("Заполните все поля!");}


 

Рисунок 2.14 – Процедура вирішення системи лінійних рівнянь методом Гауса


 

На рисунку 2.15 представлена процедура збереження результату рішення до текстового файлу. Ця процедура однакова для модулів «Gauss», «Kramer», «Matrix», «Determinant» та «InventMatrix».

 


private void button4_Click(object sender, EventArgs e)

{

if (richTextBox1.Text!= "")

{

SaveFileDialog saveFile1 = new SaveFileDialog();

saveFile1.DefaultExt = "*.rtf";

saveFile1.Filter = "RTF Files|*.rtf";

if (saveFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK && saveFile1.FileName.Length > 0)

{richTextBox1.SaveFile(saveFile1.FileName, RichTextBoxStreamType.PlainText);}}

else

{MessageBox.Show("Нечего сохранять!");}}


 

Рисунок 2.15 – Процедура збереження результату рішення

 

На рисунку 2.16 представлено процедуру закриття форми «Gauss».

 


private void Gauss_FormClosing(object sender, FormClosingEventArgs e)

{

DialogResult result = MessageBox.Show("Закрыть окно?", "Закрытие формы", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (result == DialogResult.No)

{

e.Cancel = true;

}

}


 

Рисунок 2.16 – Закриття форми «Gauss»

 

На рисунку 2.17 представлено процедуру виклику довідку про метод Гауса.

 

private void button3_Click(object sender, EventArgs e)

{

Process.Start(@"Метод Гаусса.docx");

}

 

Рисунок 2.17 – Процедура виклику довідки про метод Гауса

 

На рисунку 2.18 представлено процедуру, що викликається після закриття форми «Gauss» та знімає блокування її повторного виклику, що застосовується для уникнення відкриття безлічі дублікатів форми.

 

private void Gauss_FormClosed(object sender, FormClosedEventArgs e)

{

MainMenu.Control[0] = 0;

}

 

Рисунок 2.18 – Процедура, що знімає заборону на повторне відкриття форми «Gauss»

 

Модуль «Kramer» призначений для вирішення систем лінійних рівнянь методом Крамера. Цей модуль описує окрему форму, що містить алгоритм для вирішення рівнянь різної розмірності.

На рисунку 2.19 представлено процедуру завантаження форми «Kramer».

 

private void Kramer_Load(object sender, EventArgs e)

{

comboBox1.SelectedIndex = 0;

}

 

Рисунок 2.19 – Процедура завантаження форми «Kramer».

 

На рисунку 2.20 представлена процедура вирішення системи лінійних рівнянь методом Крамера, в ході якого рішення виводиться в текстове поле.

 


private void button1_Click(object sender, EventArgs e)

{richTextBox1.Text = "";

float[,] MatrixMembers = new float[MatrixSize, MatrixSize];

float[] FreeMembersVector = new float[MatrixSize];

float[] Replace = new float[MatrixSize];

float[] Solution = new float[MatrixSize];

float[] opr = new float[MatrixSize + 1];

float[] opr4 = new float[MatrixSize + 1];

float[] opr5 = new float[MatrixSize + 1];

float[] x = new float[MatrixSize];

string[] Description = { "Общий", "Первый", "Второй", "Третий", "Четвертый", "Пятый" };

int Cell1, Cell2, Cell3, Cell4, Cell5, Iteration, IsEmptyM, IsEmptyF, Row1, Row2, Row3, Counter;

IsEmptyM = 0;

for (Row = 0; Row < MatrixSize; Row++)

{for (Cell = 0; Cell < MatrixSize; Cell++)

{if (Koefficients[Cell, Row].Text == "") IsEmptyM = 1;}}

IsEmptyF = 0;

for (Row = 0; Row < MatrixSize; Row++)

{if (Freemembers[Row].Text == "") IsEmptyF = 1;}

if (IsEmptyM == 0 && IsEmptyF == 0)

{ExitOrNot = 0;

for (Row = 0; Row < MatrixSize; Row++)

{for (Cell = 0; Cell < MatrixSize; Cell++)

{try

{MatrixMembers[Row, Cell] = Convert.ToSingle(Koefficients[Cell, Row].Text);}

catch

{ExitOrNot = 1;}}}

for (Row = 0; Row < MatrixSize; Row++)

{try

{FreeMembersVector[Row] = Convert.ToSingle(Freemembers[Row].Text);}

catch

{ExitOrNot = 1;}}

if (ExitOrNot == 1) MessageBox.Show("Неверный формат введенных чисел! Проверьте правильность введенных данных! Bводить можно только цифры от 0 до 9, знак минус и запятую");

if (ExitOrNot == 0)

{if (MatrixSize == 2)

{for (Iteration = 0; Iteration < MatrixSize + 1; Iteration++)

{if (Iteration > 0) richTextBox1.Text += "Заменим " + Iteration.ToString() + " столбец столбцом свободных членов\n\n";

richTextBox1.Text += Description[Iteration] + " определитель матрицы\n\n";

for (Row = 0; Row < MatrixSize; Row++)

{for (Cell = 0; Cell < MatrixSize; Cell++)

{richTextBox1.Text += "\t" + MatrixMembers[Row, Cell].ToString() + "\t";}

richTextBox1.Text += "\n\n";}

opr[Iteration] = MatrixMembers[0, 0] * MatrixMembers[1, 1] - MatrixMembers[1, 0] * MatrixMembers[0, 1];

richTextBox1.Text += "равен " + MatrixMembers[0, 0].ToString() + "*" + MatrixMembers[1, 1].ToString() + "-" + MatrixMembers[1, 0].ToString() + "*" + MatrixMembers[0, 1].ToString() + " = " + opr[Iteration].ToString() + "\n\n";

………………………………………………………..

MatrixMembers[Row, 0] = FreeMembersVector[Row];}}

if (Iteration > 0 && Iteration < MatrixSize)

{for (Row = 0; Row < MatrixSize; Row++)

{MatrixMembers[Row, Iteration - 1] = Solution[Row];

Solution[Row] = MatrixMembers[Row, Iteration];

MatrixMembers[Row, Iteration] = FreeMembersVector[Row];}}}

if (opr5[0]!= 0)

{for (Iteration = 1; Iteration < MatrixSize + 1; Iteration++)

{x[Iteration - 1] = opr5[Iteration] / opr5[0];

richTextBox1.Text += "\n\nx" + Iteration.ToString() + " = " + opr5[Iteration].ToString() + " / " + opr5[0].ToString() + " = " + Math.Round(x[Iteration - 1], 3) + "\n";}}}}}

else MessageBox.Show("Заполните все поля!");}


 


Рисунок 2.20 – Процедура вирішення системи лінійних рівнянь методом Крамера


На рисунку 2.21 представлено процедуру закриття форми «Kramer».

 


private void Kramer_FormClosing(object sender, FormClosingEventArgs e)

{

DialogResult result = MessageBox.Show("Закрыть окно?", "Закрытие формы", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (result == DialogResult.No)

{

e.Cancel = true;

}

}


 

Рисунок 2.21 – Закриття форми «Kramer»

 

На рисунку 2.22 представлено процедуру виклику довідки про метод Крамера.

 

private void button3_Click(object sender, EventArgs e)

{

Process.Start(@"Метод Крамера.docx");

}

 

Рисунок 2.22 – Процедура виклику довідки про метод Гауса

 

На рисунку 2.23 представлено процедуру, що викликається після закриття форми «Kramer» та знімає блокування її повторного виклику, що застосовується для уникнення відкриття безлічі дублікатів форми.

 

private void Kramer_FormClosed(object sender, FormClosedEventArgs e)

{

MainMenu.Control[1] = 0;

}

 

Рисунок 2.23 – Процедура, що знімає заборону на повторне відкриття форми «Kramer»


 

Модуль «Matrix» призначений для вирішення систем лінійних рівнянь матричним методом. Цей модуль описує окрему форму, що містить алгоритм для вирішення рівнянь різної розмірності.

 

На рисунку 2.24 представлено процедуру завантаження форми «Matrix».

 

private void Matrix_Load(object sender, EventArgs e)

{

comboBox1.SelectedIndex = 0;

}

 

Рисунок 2.24 – Процедура завантаження форми «Matrix».

 

На рисунку 2.25 представлена процедура вирішення системи лінійних рівнянь матричним методом, в ході якого рішення виводиться в текстове поле.

 


 

 


private void button1_Click(object sender, EventArgs e)

{richTextBox1.Text = "";

float[,] A = new float[MatrixSize, MatrixSize];

float[,] M = new float[MatrixSize, MatrixSize];

float[,] Temp = new float[MatrixSize, MatrixSize];

float[] B = new float[MatrixSize];

float[] Solution = new float[MatrixSize];

float[] opr = new float[MatrixSize + 1];

float[] opr4 = new float[MatrixSize + 1];

float[] opr5 = new float[MatrixSize + 1];

float[] x = new float[MatrixSize];

int []CellNumber=new int[MatrixSize];

int []RowNumber=new int[MatrixSize];

int Cell1, Cell2, Cell3, Cell4, Cell5, Iteration, IsEmptyM, IsEmptyF, Row1, Row2, Row3, Counter,i,j;

IsEmptyM = 0;

for (Row = 0; Row < MatrixSize; Row++)

{

for (Cell = 0; Cell < MatrixSize; Cell++)

{

if (Koefficients[Cell, Row].Text == "") IsEmptyM = 1;}}

IsEmptyF = 0;

for (Row = 0; Row < MatrixSize; Row++)

{if (Freemembers[Row].Text == "") IsEmptyF = 1;}

if (IsEmptyM == 0 && IsEmptyF == 0)

{ExitOrNot = 0;

for (Row = 0; Row < MatrixSize; Row++)

{for (Cell = 0; Cell < MatrixSize; Cell++)

{

try

{A[Row, Cell] = Convert.ToSingle(Koefficients[Cell, Row].Text);}

catch

{

ExitOrNot = 1;

}

}

}

for (Row = 0; Row < MatrixSize; Row++)

{try

{B[Row] = Convert.ToSingle(Freemembers[Row].Text);}

catch

{ExitOrNot = 1;}}

if (ExitOrNot == 1) MessageBox.Show("Неверный формат введенных чисел! Проверьте правильность введенных данных! Bводить можно только цифры от 0 до 9, знак минус и запятую");

if (ExitOrNot == 0)

{richTextBox1.Text = "Матрица А равна\n\n";

for (Row = 0; Row < MatrixSize; Row++)

{for (Cell = 0; Cell < MatrixSize; Cell++)

{richTextBox1.Text += "\t" + A[Row, Cell].ToString() + "\t";}

richTextBox1.Text += "\n\n";}

richTextBox1.Text += "Матрица B равна\n\n";

for (Row = 0; Row < MatrixSize; Row++) richTextBox1.Text += "\t" + B[Row].ToString() + "\n\n";

if (MatrixSize == 2)

{

opr[0] = A[0, 0] * A[1, 1] - A[1, 0] * A[0, 1];

richTextBox1.Text += "Определитель матрицы А равен " + opr[0].ToString();

if (opr[0] == 0)

{richTextBox1.Text += "\n\nОпределитель матрицы равен нулю. Решений нет";}

else

{

richTextBox1.Text += "\n\nНайдем по формуле алгебраические дополнения для матрицы А";

for (Row = 0; Row < MatrixSize; Row++)

{for (Cell = 0; Cell < MatrixSize; Cell++)

{for (i = 0; i < MatrixSize; i++)

{if (i!= Row) RowNumber[0] = i;}

for (j = 0; j < MatrixSize; j++)

{if (j!= Cell) CellNumber[0] = j;}

………………………………………………………..

richTextBox1.Text += "Найдем матрицу, обратную матрице А\n\n";

for (Row = 0; Row < MatrixSize; Row++)

{

for (Cell = 0; Cell < MatrixSize; Cell++)

{

A[Row, Cell] = M[Row, Cell] / opr[0];

richTextBox1.Text += "\t" + Math.Round(A[Row, Cell], 3).ToString() + "\t";

}

richTextBox1.Text += "\n\n";

}

richTextBox1.Text += "Для нахождения решения перемножим обратную матрицу и матрицу свободных членов В\n\n";

for (i = 0; i < MatrixSize; i++)

{

for (Row = 0; Row < MatrixSize; Row++) x[i] += A[i, Row] * B[Row];

richTextBox1.Text += "x" + (i + 1).ToString() + " = ";

for (j = 0; j < MatrixSize; j++)

{

richTextBox1.Text += Math.Round(A[i, j], 3).ToString() + "*" + B[j].ToString();

if (j!= MatrixSize - 1) richTextBox1.Text += "+";

}

richTextBox1.Text += " = " + Math.Round(x[i], 3).ToString() + "\n\n";

}

}

}

}

else MessageBox.Show("Заполните все поля!");

}


 

Рисунок 2.25 – Процедура вирішення системи лінійних рівнянь матричним методом


На рисунку 2.26 представлено процедуру закриття форми «Matrix».

 


private void Matrix_FormClosing(object sender, FormClosingEventArgs e)

{

DialogResult result = MessageBox.Show("Закрыть окно?", "Закрытие формы", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (result == DialogResult.No)

{

e.Cancel = true;

}

}


 

Рисунок 2.26 – Закриття форми «Matrix»

 

На рисунку 2.27 представлено процедуру виклику довідку про матричний метод.

 

private void button3_Click(object sender, EventArgs e)

{

Process.Start(@"Матриный метод.docx");

}

 

Рисунок 2.27 – Процедура виклику довідки про матричний метод

 

На рисунку 2.28 представлено процедуру, що викликається після закриття форми «Matrix» та знімає блокування її повторного виклику, що застосовується для уникнення відкриття безлічі дублікатів форми.

 

private void Matrix _FormClosed(object sender, FormClosedEventArgs e)

{

MainMenu.Control[2] = 0;

}

 

Рисунок 2.28 – Процедура, що знімає заборону на повторне відкриття форми «Matrix»

 

Модуль «Determinant» призначений для знаходження визначника матриці. Цей модуль описує окрему форму, що містить алгоритм для знаходження визначника матриць різної розмірності.


На рисунку 2.29 зображено процедуру очищення всіх текстових елементів форми. Вона однакова для модулів «Determinant», та «InventMatrix».

 


private void button2_Click(object sender, EventArgs e)

{

for (Row = 0; Row < MatrixSize; Row++)

{

for (Cell = 0; Cell < MatrixSize; Cell++)

{

Koefficients[Cell, Row].Text = "";

}

}

richTextBox1.Text = "";

}


 

Рисунок 2.29 – Процедура очищення всіх текстових компонентів на формі

 

На рисунку 2.30 представлено процедуру завантаження форми «Determinant».

 

private void Determinant_Load(object sender, EventArgs e)

{

comboBox1.SelectedIndex = 0;

}

 

Рисунок 2.30 – Процедура завантаження форми «Determinant».

 

На рисунку 2.31 представлена процедура знаходження визначника матриці та виведення ходу цього процесу в текстове поле.

 


private void button1_Click(object sender, EventArgs e)

{richTextBox1.Text = "";

float[,] MatrixMembers = new float[MatrixSize, MatrixSize + 1];

float Value, opr = 1;

int Iteration, IsEmptyM, Counteri, Counterj;

IsEmptyM = 0;

for (Row = 0; Row < MatrixSize; Row++)

{for (Cell = 0; Cell < MatrixSize; Cell++)

{if (Koefficients[Cell, Row].Text == "") IsEmptyM = 1;}}

if (IsEmptyM == 0)

{ExitOrNot = 0;

for (Row = 0; Row < MatrixSize; Row++)

{for (Cell = 0; Cell < MatrixSize; Cell++)

{try

{MatrixMembers[Row, Cell] = Convert.ToSingle(Koefficients[Cell, Row].Text);}

catch

{ExitOrNot = 1;}}}

if (ExitOrNot == 1) MessageBox.Show("Неверный формат введенных чисел! Проверьте правильность введенных данных! Bводить можно только цифры от 0 до 9, знак минус и запятую");

if (ExitOrNot == 0)

{richTextBox1.Text += "Имеем матрицу\n\n";

for (Counteri = 0; Counteri < MatrixSize; Counteri++)

{richTextBox1.Text += "\t";

for (Counterj = 0; Counterj < MatrixSize; Counterj++)

{richTextBox1.Text += Math.Round(MatrixMembers[Counteri, Counterj], 3).ToString() + "\t";}

richTextBox1.Text += "\n\n";}

for (Row = 0; Row < MatrixSize; Row++)

{for (Iteration = 0; Iteration < Row; Iteration++)

{if (MatrixMembers[Row, Iteration]!= 0)

{Value = (-MatrixMembers[Row, Iteration]) / MatrixMembers[Iteration, Iteration];

richTextBox1.Text += "\n\nУмножим " + (Iteration + 1).ToString() + " строку на " + Math.Round(Value, 3) + " и сложим ее с " + (Row + 1).ToString() + " строкой\n\n";

for (Cell = 0; Cell < MatrixSize; Cell++)

{MatrixMembers[Row, Cell] = MatrixMembers[Row, Cell] + MatrixMembers[Iteration, Cell] * Value;}

for (Counteri = 0; Counteri < MatrixSize; Counteri++)

{richTextBox1.Text += "\t";

for (Counterj = 0; Counterj < MatrixSize; Counterj++)

{richTextBox1.Text += Math.Round(MatrixMembers[Counteri, Counterj], 3).ToString() + "\t";}

richTextBox1.Text += "\n\n";}}}}

richTextBox1.Text += "Определитель матрицы равен ";

for (Row = 0; Row < MatrixSize; Row++)

{opr *= MatrixMembers[Row, Row];

richTextBox1.Text += Math.Round(MatrixMembers[Row, Row], 3).ToString();

if (Row!= MatrixSize - 1) richTextBox1.Text += "*";}

richTextBox1.Text += " = " + Math.Round(opr, 0).ToString();}}

else MessageBox.Show("Заполните все поля!");}


 

Рисунок 2.31 – Процедура знаходження визначника матриці

 

На рисунку 2.32 представлено процедуру закриття форми «Determinant».

 


private void Determinant_FormClosing(object sender, FormClosingEventArgs e)

{

DialogResult result = MessageBox.Show("Закрыть окно?", "Закрытие формы", MessageBoxButtons.YesNo, MessageBoxIcon.Question);


Дата добавления: 2015-09-28; просмотров: 15 | Нарушение авторских прав







mybiblioteka.su - 2015-2024 год. (0.087 сек.)







<== предыдущая лекция | следующая лекция ==>