Мартынов. Мартынов project5. Отчет Лабораторная работа 5 Тема и название работы Лабораторная работа Программирование алгоритмов регулярных циклических структур
Скачать 325.81 Kb.
|
Московский технический университет связи и информатики Факультет: ЗОТФ Предмет: Информатика Отчет Лабораторная работа 5 Тема и название работы: «Лабораторная работа: Программирование алгоритмов регулярных циклических структур» Студент: Мартынов А.И. 2 курс, группа БСТ1351 Москва, 2015 Содержание1.Задание на разработку проекта 3 2.Формализация и уточнение задания 3 3.Разработка приложения 3 3.1Разработать графический интерфейс пользователя 3 3.2Установка свойств объектов 4 3.3Разработка схемы алгоритма 5 3.4Написание программного кода 6 4.Результат выполнения проекта 8 5.Выводы 9 Задание на разработку проектаСоздать проект для формирования таблицы значений функции f(x)=x+1/x при изменении x на отрезке [a;b] c шагом h и найти наименьшее значение функции y=f(x). Пусть, a=0,1, b=1,5 и шаг h= 0,1. Значения a, b, h вводятся в элементы управления TextBox. Значения аргумента и значения функции, при выводе их на форму необходимо разместить в элементах управления ListBox. Наименьшее значение функции поместить в текстовое поле, а надписи - в метки. Формализация и уточнение заданияДля решения задачи табуляции функции на заданном интервале следует использовать алгоритмическую структуру регулярного типа, т.к. заданы начальное и конечное значения аргумента, а также шаг его изменения, то есть в этом случае можно заранее определить количество вычисленных значений. Данная задача решается с помощью процедуры-подпрограммы RegCikl(), которая, получив в качестве входных параметров (по значению) границы интервала (a и b) и шаг (h) изменения аргумента, табулирует функцию, а также вызывает процедуру-функцию calculateFunction(), которая и вычисляет значение заданной функции от заданного аргумента. Разработка приложенияРазработать графический интерфейс пользователяПриложение может иметь вид как на рис. 1 Рис.1 Графический интерфейс приложения. Установка свойств объектовИспользуемые объекты и их свойства приведены в таблице 1. Таблица 1. Свойства объектов.
Разработка схемы алгоритмаСхема алгоритма представлена на рис.2 Рис.2 Схема алгоритма Написание программного кода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 WForms_project5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //функция ввода в TextBox действительного числа double vvod(TextBox textbox){return Convert.ToDouble(textbox.Text);} //процедура вывода double-результата в listBox void vivod(double? z, ListBox l) { l.Items.Add(z.ToString()); } //процедура вывода double-результата в TextBox void vivod(double? value, TextBox tx) { tx.Text = Convert.ToString(value); } //процедура вывода int-результата в TextBox void vivod(int n, TextBox tx){tx.Text = Convert.ToString(n);} //вычисление функции от заданного аргумента double calculateFunction(double x){return x + 1 / x;} //процедура решения задачи void RegCikl(double min, double max, double h,out double? minimum) { int n; double x, y; minimum = null; if (min > max) { label_error_text.Text = "ОШИБКА : Начальное значение не может быть больше конечного!"; return; } if (h <= 0) { label_error_text.Text = "ОШИБКА : Шаг должен быть строго больше нуля!"; return; } //первоначальное допущение, что в интервале начальная и конечная границы совпадают minimum = calculateFunction(min); //вычисление количества шагов n = Convert.ToInt32(Math.Ceiling((max - min) / h)+1); vivod(n, textBox__output_n); x = min; for (int i = 0; i < n; i++) { y = calculateFunction(x); vivod(x, listBox_argument_x); vivod(y, listBox_funkcija_x); if (y < minimum) minimum = y; x = x + h; } } //описание действий при нажатии на кнопку Выход private void button_exit_Click(object sender, EventArgs e) { Application.Exit(); } //очистка текстовых полей с результатами private void clearResults(){ textBox_output_minimal.Clear(); listBox_argument_x.Items.Clear(); listBox_funkcija_x.Items.Clear(); textBox_output_minimal.Clear(); textBox__output_n.Clear(); label_error_text.Text = ""; } //описание действий при нажатии на кнопку Очистить private void button_clear_Click(object sender, EventArgs e) { clearResults(); } //описание действий при нажатии на кнопку Вычислить private void button1_calculate_Click(object sender, EventArgs e) { clearResults(); try { double min, max, h; min = vvod(textBox_input_start); max = vvod(textBox_input_stop); h = vvod(textBox_input_h); double? minimum = null; RegCikl(min, max, h, out minimum); vivod(minimum, textBox_output_minimal); } catch (Exception ex) { label_error_text.Text = "Ошибка : "+ex.Message; } } } } Результат выполнения проектаРезультаты выполнения проекта приведены на рис. 3 и 4 Рис.3 Рис.4 ВыводыСоздан проект на C#. Формализованы и уточнены данные, в результате которых был разработан алгоритм решения задачи. Разработан графический интерфейс пользователя, включающий в себя: множество меток, одну форму, три кнопки управления, три текстовых полей для ввода данных и два элемента управления listbox для вывода результата работы программы. Создан проект, использующий алгоритмы регулярных циклических структур. Протестирована работа программы. Использованы следующие исходные тестовые данные: а=0,1, b=1,5 и шаг h=0,1. В результате ручного счета получены следующие результаты: значения на рис.3. При этих исходных тестовых данных результаты ручного расчета и вычисления на ПК совпадают. |