- •Лабораторная работа №2 «Создание приложений Windows Form, использующих итеративные циклические структуры»
- •2.1. Вопросы, подлежащие изучению
- •2.2. Общее задание на разработку проекта
- •Разработайте обобщенные схемы алгоритмов, а также программные коды следующих функций:
- •Создайте проект Приложений Windows Form, содержащий:
- •Докажите правильность полученных результатов.
- •2.3. Варианты индивидуальных заданий
- •2.4. Содержание отчёта
- •2.5. Пример выполнения задания
- •Создание Приложений Windows Form, использующих итеративные циклические структуры.
- •Иванов и., бин1905, вариант 13.
- •Разработка схемы алгоритма функции Root
- •Разработка графического интерфейса
- •7.2) Создание файлов c функциями пользователя
- •7.3) Создание событийных процедур
- •Результаты выполнения приложения
- •Доказательство правильности работы программы
2.4. Содержание отчёта
Титульный лист с указанием номера и названия работы, варианта индивидуального задания, группы и Ф.И.О. студента, Ф.И.О. преподавателя.
Общее и индивидуальное задание.
Формализация и уточнение задания.
Рисунки, таблицы и скриншоты, отражающие этапы разработки приложения:
графический интерфейс пользователя;
таблица используемых объектов и их свойств;
схемы алгоритмов решения поставленной задачи;
программный код разработанных функций, событийных процедур и заголовочных файлов;
результаты работы проекта.
2.5. Пример выполнения задания
Тема и название лабораторной работы:
Создание Приложений Windows Form, использующих итеративные циклические структуры.
Фамилия, имя студента, номер группы, номер варианта:
Иванов и., бин1905, вариант 13.
Задание на разработку проекта:
Создать проект для вычисления с заданной точностью ε корня уравнения f(x)=x3-2x2+x-3=0, воспользовавшись итерационной формулой
Формализация и уточнение задания:
производная функции f(x): f’(x) = 3x2-4x+1;
х0 – начальное приближение;
x – текущее приближение к корню;
a – предыдущее приближение;
i – номер итерации, совпадающий с номером текущего приближения к корню;
y – значение функции f(x) для найденного с заданной точностью корня.
Будем считать, что заданная точность ε обеспечена, если модуль разности между текущим и предыдущим значениями корня меньше допустимой погрешности ε, то есть для нашего случая |x-a| < ε.
Для решения поставленной задачи необходимо реализовать функцию Root, которая в качестве входных параметров получает начальное значение x0, точность ε и максимальное число итераций Nmax. Результатами работы функции являются найденный корень уравнения x – возвращаемое значение, а также возвращаемое через параметр по ссылке значение функции y при найденном значении корня. Кроме того, функция Root должна на каждой итерации выводить в форму номер итерации, значение очередного приближения к корню и значение функции в точке очередного приближения.
Для вычисления корня по заданной формуле функция Root должна использовать две вспомогательные функции: Funct(), вычисляющую значение f(x), и Deriv() – значение производной этой функции f’(x).
Разработка схемы алгоритма функции Root
При разработке схемы алгоритма используются материалы первого семестра: лекции №13–14 и лабораторная работа №14. Схема алгоритма функции, разработанная с использованием этих материалов, изображена на рис. 1.
Рис. 1 - Схема алгоритма функции Root
Разработка графического интерфейса
Рис. 2. Графический интерфейс проекта
Графический интерфейс проекта изображен на рис. 2. Форма содержит текстовые поля TextBox для ввода исходных данных и вывода результатов выполнения (эти текстовые поля сгруппированы по своему назначению с помощью элементов управления Panel), список ListBox для вывода промежуточных результатов на каждой итерации, а также кнопки Button для запуска приложения на выполнение и для выхода из приложения.
Таблица 2.5-1
Тип объекта |
Класс объекта |
Свойство |
Значение свойства |
Форма
|
Form |
Name |
Form1 |
Text |
Лабораторная работа 2. Создание приложений Windows Form, использующих итеративные циклические структуры |
||
Текстовое поле |
TextBox |
Name |
txtX0 |
Font |
Размер 11,25pt |
||
TextAlign |
Right |
||
TabIndex |
1 |
||
Текстовое поле |
TextBox |
Name |
txtEps |
Font |
Размер 11,25pt |
||
TextAlign |
Right |
||
TabIndex |
2 |
||
Текстовое поле |
TextBox |
Name |
txtRoot |
Font |
Размер 11,25pt |
||
TextAlign |
Right |
||
TabStop |
False |
||
Enabled |
False |
||
Текстовое поле |
TextBox |
Name |
txtFRoot |
Font |
Размер 11,25pt |
||
TextAlign |
Right |
||
TabStop |
False |
||
Enabled |
False |
||
Кнопка |
Button |
Name |
cmdFind |
Font |
Размер 11,25pt; Bold |
||
Text |
Найти корень |
||
TabIndex |
3 |
||
Кнопка |
Button |
Name |
cmdExit |
Font |
Размер 11,25pt, Bold |
||
Text |
Завершить |
||
TabIndex |
4 |
||
Список |
ListBox |
Name |
lstLB |
Font |
Courier New; 11,25pt |
||
TabStop |
False |
||
ScrollAlwaysVisible |
True |
||
Панель |
Panel |
Name |
Panel1 |
BorderStyle |
FixedSingle |
||
Панель |
Panel |
Name |
Panel2 |
BorderStyle |
FixedSingle |
Примечания к таблице 2.5–1:
1) Имена приведенных в таблице объектов, на которые ссылается программный код приложения, даны по правилам венгерской нотации (с префиксом, указывающим на тип объекта) и с учетом назначения объекта в контексте решаемой задачи.
2) Cвойство TextAlign в текстовых полях имеет значение Right, так как арифметические данные принято выравнивать по правой границе поля.
3) Свойство Enabled у текстовых полей txtRoot и txtFRoot имеет значение False, так как эти поля предназначены для вывода результатов и не должны редактироваться пользователем.
4) Свойство TabIndex у текстовых полей txtX0, txtEps и кнопок cmdFind, cmdExit принимает последовательные значения от 1 до 4 в целях разумной последовательности обхода этих объектов при нажатии клавиши Tab.
5) У остальных объектов формы, не участвующих в последовательности обхода, свойство TabStop имеет значение False.
6) В свойстве Font списка lstLB установлен моноширинный шрифт Courier New, что позволяет поддерживать выравнивание столбцов при любом количестве цифр в целой части переменных x и y.
7) Свойство ScrollAlwaysVisible списка lstLB имеет значение True, чтобы полоса прокрутки списка была видна при любом количестве элементов в нем. Это позволяет выбрать ширину списка так, чтобы полоса прокрутки не заслоняла значения y в крайнем справа столбце.
8) Объекты типа Панель нужны исключительно для того, чтобы визуально сгруппировать текстовые поля с исходными данными и результатами вычислений. Свойство BorderStyle этих объектов установлено в FixedSingle, чтобы сделать рамки панелей видимыми.
В таблице 2.5–1 приведены основные объекты формы с указанием тех их свойств, которые были переопределены разработчиком приложения.
Разработка программного кода приложения
7.1) Создание и редактирование заголовочных файлов
В тех случаях, когда проект содержит функции пользователя в отдельных файлах, целесообразно создавать пользовательский заголовочный файл, содержащий необходимые директивы using namespace, директивы include для подключения необходимых заголовочных файлов, а также прототипы используемых функций пользователя. На рис. 3 приведен программный код заголовочного файла Root.h, созданного для этих целей и включенного в состав проекта в раздел Заголовочные файлы.
Рис. 3. Программный код заголовочного файла Root.h
Созданный заголовочный файл директивой include подключается к системному заголовочному файлу stdafx.h (рис.4). Заголовочный файл stdafx.h подключается директивой include ко всем cpp-файлам с функциями пользователя.
Рис. 4. Программный код системного заголовочного файла stdafx.h