 
        
        - •Лабораторная работа №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
