Скачиваний:
31
Добавлен:
20.06.2014
Размер:
936.96 Кб
Скачать

4. Описание контрольного примера

Справка программы (Рис.1):

Рис.1

Пункт меню «О программе» (Рис.2):

Рис.2

Пример заполнения формы и получения результата вычислений (Рис.3):

Рис.3

5. Текст программы

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;

namespace WindowsFormsApplication2

{

public partial class Form1 : Form

{

//Переменная для хранения размера таблицы

int n;

public Form1()

{

InitializeComponent();

//Блокировка элементов Button2, Button3

button2.Enabled = false;

button3.Enabled = false;

}

private void button1_Click(object sender, EventArgs e)

{

//Инициализация n ,

//читаем из numericUpDown

n = Convert.ToInt32(numericUpDown1.Value);

//Добавляем, соответствующие размеру n, число строк и столбцов для DataGridView,

//где пользователь сможет вводить значения коэффициентов

//перед неизвестным и свободные члены

for (int i = 0; i < n; i++)

{

dataGridView1.Columns.Add("Коэффициент при X", "Коэффициент при X"); //Колонка

dataGridView1.Rows.Add(); //Ряд

}

//Добавляем столбец для свободных членов в DataGridView1

dataGridView1.Columns.Add("Свободный член", "Свободный член"); //Колонка

//Блокировка элемента numericUpDown1, Button1

numericUpDown1.ReadOnly = true;

button1.Enabled = false;

//Разблокировка элементов Button2, Button3, DataGridView1

button2.Enabled = true;

button3.Enabled = true;

dataGridView1.Enabled = true;

}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)

{

//Завершение работы программы по выбору пункта меню <Файл/Выход>

Application.Exit();

}

private void aboutToolStripMenuItem_Click(object sender, EventArgs e)

{

//Вывод на экран формы AboutBox1 по выбору пункта меню <Справка/О Программе>

AboutBox1 about = new AboutBox1();

about.Show();

}

private void button2_Click(object sender, EventArgs e)

{

//очистка полей ввода и вывода,

//удаление строк и столбцов из DataGridView1

while (dataGridView1.Rows.Count != 0)

{

dataGridView1.Rows.RemoveAt(dataGridView1.Rows.Count - 1);

}

while (dataGridView1.Columns.Count != 0)

{

dataGridView1.Columns.RemoveAt(dataGridView1.Columns.Count - 1);

}

//Очистка поля ввода TextBox1

numericUpDown1.Value = 2;

textBox2.Clear();

//Сбрасывание счётчика

n = 0;

//Разблокировка

numericUpDown1.ReadOnly = false;

button1.Enabled = true;

//Блокировка

button3.Enabled = false;

button2.Enabled = false;

}

private void contentsToolStripMenuItem_Click(object sender, EventArgs e)

{

//Открытие файла руководства пользователя

string fileName = "Manual.chm";

try

{

System.Diagnostics.Process.Start(fileName);

}

catch (Win32Exception)

{

MessageBox.Show(String.Format("Отсутствует файл справки программы: {0}", fileName), "Ошибка",

MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

catch

{

MessageBox.Show(String.Format("Произошла ошибка при открытии файла справки"), "Ошибка",

MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

}

private void newToolStripMenuItem_Click(object sender, EventArgs e)

{

//Очистка полей ввода и вывода,

//удаление строк и столбцов из DataGridView1

while (dataGridView1.Rows.Count != 0)

{

dataGridView1.Rows.RemoveAt(dataGridView1.Rows.Count - 1);

}

while (dataGridView1.Columns.Count != 0)

{

dataGridView1.Columns.RemoveAt(dataGridView1.Columns.Count - 1);

}

//Обновление numericUpDown1, значением по умолчанию

numericUpDown1.Value=2;

//Очистка поля ввода TextBox1

textBox2.Clear();

//Сбрасывание счётчика

n = 0;

//Блокировка

button3.Enabled = false;

button2.Enabled = false;

//Разблокировка

button1.Enabled = true;

numericUpDown1.ReadOnly = false;

dataGridView1.Enabled = true;

}

private void button3_Click(object sender, EventArgs e)

{

//Проверка на заполненность DataGridView1, иначе запрет на продолжение

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

if (dataGridView1.Rows[i].Cells[j].Value == null )

{

MessageBox.Show("Невозможно продолжить работу программы. \n\rЗаполните матрицу.",

"Ошибка",

MessageBoxButtons.OK,

MessageBoxIcon.Error,

MessageBoxDefaultButton.Button1);

Form1.ActiveForm.Refresh();

return;

}

}

}

//Проверка на корректность входных данных для таблицы

//DataGridView1, иначе запрет на продолжение

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

try

{

Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value);

}

catch(Exception)

{

MessageBox.Show("Невозможно продолжить работу программы. \n\rНекорректные данные.",

"Ошибка",

MessageBoxButtons.OK,

MessageBoxIcon.Error,

MessageBoxDefaultButton.Button1);

return;

}

}

}

double[] a = new double[n]; //одномерный массив a[],для вывода решения

double[] b = new double[n]; //одномерный массив b[],для последней колонки из DataGridView1

double[,] matrix = new double[n, n]; //матрица matrix[n x n],для таблицы DataGridView1, кроме последней колонки

//Инициализция matrix[][] элементами из DataGridView1

//без учета последней колонки

for(int i=0; i<n; i++) //i-строка

for (int j = 0; j < n; j++) //j-столбец

{

matrix[i, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value);

}

//Инициализация b[] элементами последней колонки DataGridView1

for (int i = 0; i < n; i++)

{

//По одной колонке, номер n

int j = n;

b[i] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value);

}

//Блокировка DataGridView1 после того как все необходимые элементы инициализированы

dataGridView1.Enabled = false;

//Основа программы

//Метод Гаусса для решения СЛАУ

double temp = 0;

for (int i = 0; i < n; i++)

{

if (matrix[i, i] == 0)

{

for (int j = 0; j < n; j++)

{

if (j == i)continue;

if (matrix[j, i] != 0 && matrix[i, j] != 0)

{

for (int k = 0; k < n; k++)

{

temp = matrix[j, k];

matrix[j, k] = matrix[i, k];

matrix[i, k] = temp;

}

temp = b[j];

b[j] = b[i];

b[i] = temp;

break;

}

}

}

}

//Результат действий над матрицей matrix[][]

//Результат помещается в одномерный массив a[]

double s = 0;

for (int i = n - 1; i >= 0; i--)

{

for (int j = i; j < n; j++)

s += matrix[i, j] * a[j];

a[i] = (b[i] - s) / matrix[i, i];

}

//Вывод a[] в элемент TextBox2

for (int i = 0; i < n; i++)

{

textBox2.Text +="X = "+ a[i] + "\r\n";

}

button3.Enabled = false;

}

private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)

{

//Обработка нажатий клавиш, не соответствующих

//входным параметрам

if (e.KeyChar == '0')

{

MessageBox.Show("Система должна содержать \n\rне менее двух уравнений.",

"Ошибка",

MessageBoxButtons.OK,

MessageBoxIcon.Error,

MessageBoxDefaultButton.Button1);

e.KeyChar = '2';

return;

}

if (e.KeyChar == '1')

{

MessageBox.Show("Система должна содержать \n\rне менее двух уравнений.",

"Ошибка",

MessageBoxButtons.OK,

MessageBoxIcon.Error,

MessageBoxDefaultButton.Button1);

e.KeyChar = '2';

return;

}

if (e.KeyChar == '-')

{

MessageBox.Show("Система должна содержать \n\rне менее двух уравнений.",

"Ошибка",

MessageBoxButtons.OK,

MessageBoxIcon.Error,

MessageBoxDefaultButton.Button1);

e.KeyChar = '2';

return;

}

}

}

}

Соседние файлы в папке Курсовая работа. Вариант 21