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

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



{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;}

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 = "";}

private void Gauss_Load(object sender, EventArgs e)

{comboBox1.SelectedIndex = 0; }

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; }

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

private void button3_Click(object sender, EventArgs e)

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

private void Gauss_FormClosing(object sender, FormClosingEventArgs e)

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

if (result == DialogResult.No)

{e.Cancel = true;}}}}


 

Рисунок 2.5 – Лістинг форми «Gauss»

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

 


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Diagnostics;

namespace Диплом

{public partial class Kramer: Form

{int MatrixSize = 2, Row, Cell, PreviousMatrixSize, Control = 1, BeginXPosition, ExitOrNot;

TextBox[,] Koefficients = new TextBox[5, 5];



TextBox[] Freemembers = new TextBox[5];

public Kramer()

{InitializeComponent();}

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);

{

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

{

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

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("Заполните все поля!");}

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 = "";}

private void Kramer_Load(object sender, EventArgs e)

{comboBox1.SelectedIndex = 0;}

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("Нечего сохранять!");}}

private void Kramer_FormClosed(object sender, FormClosedEventArgs e)

{MainMenu.Control[1] = 0;}

private void button3_Click(object sender, EventArgs e)

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

private void Kramer_FormClosing(object sender, FormClosingEventArgs e)

{

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

if (result == DialogResult.No)

{e.Cancel = true;}}}}


 

Рисунок 2.6 – Лістинг форми «Kramer»

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

 


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Diagnostics;

namespace Диплом

{

public partial class Matrix: Form

{

int MatrixSize = 2, Row, Cell, PreviousMatrixSize, Control = 1, BeginXPosition, ExitOrNot;

TextBox[,] Koefficients = new TextBox[5, 5];

TextBox[] Freemembers = new TextBox[5];

public Matrix()

{InitializeComponent();}

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;}

……………………………………………………………

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("Заполните все поля!");}

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("Нечего сохранять!");}}

private void Matrix_FormClosed(object sender, FormClosedEventArgs e)

{MainMenu.Control[2] = 0;}

private void button3_Click(object sender, EventArgs e)

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

private void Matrix_FormClosing(object sender, FormClosingEventArgs e)

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

if (result == DialogResult.No)

{

e.Cancel = true;}}}}


 

Рисунок 2.7 – Лістинг форми «Matrix»

 

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

 


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Diagnostics;

namespace Диплом

{public partial class Determinant: Form

{TextBox[,] Koefficients = new TextBox[5, 5];

int MatrixSize = 2, Row, Cell, PreviousMatrixSize, Control = 1, BeginXPosition, ExitOrNot;

public Determinant(){InitializeComponent();}

private void Form5_Load(object sender, EventArgs e)

{comboBox1.SelectedIndex = 0;}

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("Нечего сохранять!");}}

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";}}}}

……………………………………………………………

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

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

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(157 - 42, 5);

Control = 1;

PreviousMatrixSize = MatrixSize;}

private void Determinant_FormClosed(object sender, FormClosedEventArgs e) {MainMenu.Control[3] = 0;}

private void button3_Click(object sender, EventArgs e)

{Process.Start(@"Нахождение определителя.docx");}

private void Determinant_FormClosing(object sender, FormClosingEventArgs e)

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

if (result == DialogResult.No)

{e.Cancel = true;}}}}


 

Рисунок 2.8 – Лістинг форми «Determinant»

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

 


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Diagnostics;

namespace Диплом

{public partial class InventMatrix: Form

{TextBox[,] Koefficients = new TextBox[5, 5];

int MatrixSize = 2, Row, Cell, PreviousMatrixSize, Control = 1, BeginXPosition, ExitOrNot;

public InventMatrix()

{InitializeComponent();}

private void button1_Click(object sender, EventArgs e)

{richTextBox1.Text = "";

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

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;

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;}}}

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 (Cell = MatrixSize; Cell < MatrixSize * 2; Cell++)

{MatrixMembers[Row, Cell] = 0;

if (Row == Cell - MatrixSize) MatrixMembers[Row, Cell] = 1;}}

richTextBox1.Text += "Чтобы найти обратную матрицу, допишем к данной матрице справа единичную\n\n";

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

{richTextBox1.Text += "\t";

for (Counterj = 0; Counterj < MatrixSize * 2; 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)

……………………………………………………………

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

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

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

Control = 1;

PreviousMatrixSize = MatrixSize;}

private void InventMatrix_FormClosed(object sender, FormClosedEventArgs e){MainMenu.Control[4] = 0;}

private void button3_Click(object sender, EventArgs e)

{Process.Start(@"Нахождение обратной матрицы.docx");}

private void InventMatrix_FormClosing(object sender, FormClosingEventArgs e)

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

if (result == DialogResult.No)

{e.Cancel = true;}}}}


 

Рисунок 2.9 – Лістинг форми «InventMatrix»

2.3 Елементи інтерфейсу програмного продукту

 

 

Програма «Есть решение!» створена як навчальний посібник для вивчення дисципліни «Чисельні методи», а тому має простий та зрозумілий для користувача інтерфейс.

Програма була спеціально розроблена для навчання студентів, тому з нею легко вивчати чисельні методи студентам всіх рівнів знань.

Головною формою програми «Есть решение!», а за сумісністю і головним меню, є початкова форма (рис. 2.1). З неї користувач запускає необхідні йому модулі (для вирішення систем лінійних рівнянь, виконання операцій над матрицями або отримання інформації про програму). Так як всі модулі програми мають ідентичний інтерфейс, буде розібрано роботу з одним модулем – модулем для вирішення систем лінійних рівнянь методом Гауса.

При завантаженні модуля користувач бачить перед собою форму, зображену на рисунку 2.10.

 

 

Рисунок 2.10 – Модуль «Метод Гауса» після завантаження

 

Для початку роботи користувачу необхідно обрати розмірність матриці. Для цього необхідно клікнути на компонент з випадаючим списком з написом «Размерность матрицы» та у випадаючому списку обрати необхідну розмірність (рис. 2.11).

 

 

Рисунок 2.11 – Вибір розмірності матриці у випадаючому списку

 

Після вибору розмірності матриці необхідно заповнити поля з коефіцієнтами та, у випадку з модулями для рішення систем лінійних рівнянь, вільними членами (рис. 2.12). Програма «Есть решение» підтримує введення як цілих чисел, так і чисел з плаваючою крапкою. Поля для вводу підтримують введення цифр, коми та знака мінус.

 

 

Рисунок 2.12 – Заповнення полів для виконання обчислення

 

Після заповнення полів для отримання рішення необхідно натиснути кнопку «Решить». Після цього рішення буде виведено в поле під назвою «Решение» (рис. 2.13). Якщо користувач введе некоректні дані, наприклад букви, або двічі введе кому в числі, то програма попередить його про це відповідним повідомленням (рис. 2.14).

Для того, щоб зберегти результат рішення до текстового файлу, необхідно натиснути на кнопку «Сохранить» (якщо не буде даних для збереження, система сповістить про це відповідним повідомленням), у вікні, що відкриється, задати ім’я файлу, папку для його збереження, та натиснути кнопку «Сохранить» (рис. 2.15).

 

 

Рисунок 2.13 – Відображення ходу рішення

 

 

Рисунок 2.14 – Повідомлення про введення некорректних даних

 

Для того, щоб очистити дані, введені в полях для коефіцієнтів матриці та вільних членів, та отримані в полі для виводу рішення, необхідно натиснути кнопку «Очистить все».

Для того, щоб отримати довідкову інформацію, необхідно натиснути на кнопку «Справка», після чого відкриється довідкова інформація про поточний тип задачі в форматі файлу «.rtf», для чого потребується встановлена програма «WordPad» або «Microsoft Office Word».

 

 

Рисунок 2.15 – Збереження рішення в текстовий файл

 

Для того, щоб вийти з модуля, необхідно натиснути на хрестик на формі та підтвердити вихід у діалоговому вікні. Після цього користувач буде повернений до головної форми, де він може обрати інший модуль або закрити програму.


 

3 ЕКОНОМІЧНИЙ РОЗДІЛ

3.1 Розрахунок капітальних витрат на створення програмного продукту

 

 

Капітальні витрати «К» на створення програмного виробу (ПВ) мають одноразовий характері розраховуються за формулою (3.1):

 

К = К1 + К2 + К3,

(3.1)

 

де К1 – витрати на обладнання з урахуванням транспортно-заготівельних витрат, грн.;

К2 – витрати на ліцензійні програмні продукти, грн.;

К3 – витрати на створення програмного продукту, грн.

Примітка: Транспортно-заготівельні витрати прийняти 1– 5 % від вартості обладнання.

Розрахунок витрат на створення ПВ – К3 розраховуються за формулою (3.2):

 

К3 = З1 + З2 + З3,

(3.2)

 

де З1– витрати праці програмістів-розробників, грн.;

З2– витрати комп'ютерного часу, грн.;

33– непрямі (накладні) витрати, грн.

Витрати праці програмістів-розробників «З1» розраховуються за формулою (3.3):

 

(3.3)

 

де Nk – кількість розробників k-й професії, чол;

rk – годинна зарплата розробника k-й професії, грн.;

Tk – трудомісткість розробки для k-го розробника (кількість витраченого розробником часу), годин;

Кзар – коефіцієнт нарахувань на фонд заробітної плати, (1,2 – 1,45).

Годинна зарплата розробника «rk» визначається за формулою (3.4):

 

(3.4)

 

де Мк – місячна зарплата-го розробника, грн.;

Fkмес – місячний фонд часу його роботи, год.

Трудомісткість розробки включає час виконання робіт, представлених в таблиці 3.1.

Таблиця 3.1 – Трудомісткість робіт

 

 

Стадії розробки

Етапи робіт

Зміст робіт

     

Технічне завдання

15.03.13 – 30.03.13

Обґрунтування необхідності розробки програми

Програма «Есть решение!» призначена для спрощення навчання багатьом студентам цієї країни. Дана програма дозволяє швидко, а головне ефективно, навчитися розв’язувати системи лінійних рівнянь різними найпопулярнішими методами та виконувати операції над матрицями. Це досягається завдяки простому та зрозумілому інтерфейсу програми, через який користувач обирає тип задачі, яку йому необхідно вирішити, потім вводить параметри для обчислення та через один клік миші отримує готове покрокове рішення задачі, яке можна потім зберегти на жорсткий диск або змінний носій у вигляді документу. Також користувач може скористатися довідковою інформацією, що міститься у програмі, та більш детально ознайомитися з певним методом вирішення задач.

Науково-дослідні роботи

Розробка і затвердження технічного завдання

Ескізний проект

31.03.13 – 15.04.13

Розробка ескізного проекту

В якості вхідних даних виступають тип задачі, яка буде вирішуватися, коефіцієнти матриці та вільні члени, що вводяться користувачем програми як вхідні параметри для автоматичного вирішення задач.

Затвердження ескізного проекту

 


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







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







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