Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Создание и обработка массивов.Содержание книги Поиск на нашем сайте
Цель: Совершенствование приложения. Изучение методов создания и обработки массивов. Табулирование функции в массив и печать из массива. Рабочее задание: Разработать усовершенствованное приложение для табулирования функции, обеспечивающее прокрутку таблицы значений при больших ее объемах, а также перерисовку таблицы при изменении размеров окна. Для промежуточного хранения рассчитанных значений использовать массивы.
Краткие теоретические сведения.
Можно отметить два недостатка проекта, разработанного в лабораторной работе № 3: · если объем таблицы превышает размеры окна формы Form2, не поместившаяся часть таблицы просто теряется и ее нельзя никак увидеть, т.к. в проекте не предусмотрена работа с полосами прокрутки; · при изменении размеров окна с таблицей ее содержимое не приводится в соответствие с новыми размерами. Данная работа нацелена на устранение этих недостатков. В форму Form2 включается вертикальная полоса прокрутки VscrollBar (горизонтальная полоса используется аналогично). В процедуре обработки события Change, возникающем при изменении позиции бегунка в полосе прокрутки, осуществляется перерисовка формы в соответствии с новой позицией бегунка. Позиция бегунка определяется значением его свойства Value. Диапазон прокрутки (т.е. минимальное и максимальное значения позиции Value) определяются значениями свойств Max и Min соответственно. Если величину этого диапазона определить равной количеству строк в таблице, то можно связать позицию бегунка в полосе с номером первой выводимой на экран строки, перерисовывая форму каждый раз при изменении позиции бегунка. Перерисовка формы осуществляется также и в процедуре обработки события Resize формы, которое возникает при любом изменении размеров формы (т.е. ее окна). Чтобы каждый раз при перерисовке формы не повторять заново расчеты по формированию таблицы значений функции, эти расчеты вынесены в отдельную программу – TabFunc (табулирование функции). Полученная в этой процедуре таблица значений не выводится сразу на экран, а сохраняется в памяти для последующего многократного использования. Вывод таблицы на экран осуществляется в другой процедуре – PrntFunc (печать таблицы значений функции). Для хранения множества однородных данных (таблицы значений аргумента и функции) используется массив. Массив – это структура, состоящая из фиксированного числа компонент одного типа, каждый из которых имеет свой порядковый номер, называемый индексом. Массив характеризуется своим именем и размерностью. Описывается с помощью инструкции Dim или Public с указанием в круглых скобках после имени массива его границ - максимального индекса (или через запятую максимальных индексов, если их несколько):
Public │Dim <имя> (<границы>) As <тип> Все элементы массива имеют одно общее имя. Доступ к любому элементу массива осуществляется указанием этого имени, за которым в круглых скобках указывается индекс - число или выражение, задающее порядковый номер элемента в массиве. Отсчет начинается с нуля. Если при объявлении массива его размер неизвестен, следует использовать динамический массив, что позволяет изменять размер массива в процессе выполнения приложения. Динамический массив создается в два этапа. Cначала в cекции (General) (Declaration) контейнера (формы или модуля) массив определяется без указания размера (но пустые скобки должны присутствовать). Затем с помощью оператора Redim устанавливается фактический размер массива:
Redim <имя> (<границы>)[As<тип>]
В отличие от обычного Dim оператор Redim используется только в процедурах. При этом тип данных указывать необязательно, если он уже определен в операторе Dim. Порядок выполнения работы 1. Войти в среду Visual Basic, создать новый проект, присвоить ему имя Lab4. 2. Создать проект формы Form1, как показано на рис.13. Элементы управления те же, что и в проекте Lab3.
Рис.13 Проект формы Form1.
3. Создать форму Form2, включить в нее помимо заголовка элемент VscrollBar (вертикальная полоса прокрутки), как показано на рис.14.
Рис.14. Проект формы Form2. Установить для полосы прокрутки свойства: SmallChange = 1(величина изменения свойства Value при щелчке на одной из двух кнопок со стрелками). LargeChange = 10 (величина изменения свойства Value при щелчке в области между бегунком и кнопкой со стрелками). Минимальное значение диапазона прокрутки (Min) должно быть установлено в нуль (эта установка принимается по умолчанию), а максимальное (Max) можно не задавать, т.к. его значение будет установлено в процедуре обработки. 4. Добавить в проект модуль Module1, разработанный в проекте Lab2 (см. лабораторную работу №3, пункт 4).. 5. Создать новый модуль Module2. В окне кода этого модуля ввести следующий код:
Public XMin As Single, XMax As Single Public YMin As Single, YMax As Single Public n As Integer Public MX() As Single, MY() As Single ' Определили массивы MX и MY без объявления размерности Public Sub TabFunc(xn As Single, xk As Single, h As Single) 'Процедура табулирования функции
Dim x As Single, y As Single Dim i As Integer
n = (xk - xn) / h 'Определяем размерность массива, т.е. количество точек в 'таблице значений (следует иметь в виду, 'что отсчет начинается с нуля) ReDim MX(n), MY(n) 'Устанавливаем фактический размер массивов Form2.VScroll1.Max = n 'Установили максимальное значение диапазона прокрутки x = xn y = f(x) YMax = y: YMin = y 'Присвоили начальные значения для цикла и организовываем цикл 'для вычисления таблицы значений и определения максимального 'и минимального значений функции
For i = 0 To n y = f(x) MX(i) = x MY(i) = y
If y > YMax Then YMax = y If y < YMin Then YMin = y x = x + h Next XMin = xn XMax = xk
End Sub
Sub PrntFunc() 'Процедура перерисовки формы Form2 Form2.Cls Form2.CurrentY = 800 Form2.CurrentX = 1000 Form2.Print " x", " f(x)" ' Form2.CurrentX = 1000 Form2.Print 'Очистили форму Form2 и вывели в нее заголовок таблицы. 'Далее в цикле выводим в форму Form2 значения Х и У. 'Выводятся только те строки, номера которых (i) больше или 'равны значения свойства Value полосы прокрутки в форме Form2) '(определяется позицией бегунка в полосе прокрутки)
For i = 0 To n If i >= Form2.VScroll1.Value Then Form2.CurrentX = 1000 Form2.Print Format(MX(i), "####0.00"), Format(MY(i), "###0.000") End If Next
Form2.Print Form2.Print " Максимальное значение", Format(YMax, "###0.000") Form2.Print " Минимальное значение", Format(YMin, "###0.000") 'Вывели в форму Form2 строки с максимальным и минимальным значениями.
End Sub
6. В модуле формы Form1 создать следующий код (обработка событий для элементов формы аналогично тому, как это было сделано в лабораторных работах №2 или №3):
Private Sub A_LostFocus() 'Обработка события Потеря фокуса 'для элемента управления A If Not IsNumeric(A) Then A.SetFocus MsgBox "Неверное значение: не цифра" End If End Sub
Private Sub Xnac_LostFocus() 'Обработка события Потеря фокуса 'для элемента управления Xnac If Not IsNumeric(Xnac) Then Xnac.SetFocus MsgBox "Неверное значение: не цифра" End If End Sub
Private Sub Xkon_LostFocus() 'Обработка события Потеря фокуса 'для элемента управления Xkon If Not IsNumeric(Xkon) Then Xkon.SetFocus MsgBox "Неверное значение: не цифра" End If End Sub
Private Sub hX_LostFocus() 'Обработка события Потеря фокуса 'для элемента управления hX If Not IsNumeric(hX) Then hX.SetFocus MsgBox "Неверное значение: не цифра" End If End Sub
Private Sub Command1_Click() 'Обработка события Щелчок для командной кнопки 'Расчет 'Вызывается процедура TabFunct для табулирования 'функции 'Затем форма Form2 делается видимой и вызывается 'процедура PrntFunction для перерисовки формы 'Form2. TabFunc Xnac, Xkon, hX Form2.Visible = True PrntFunc End Sub
Private Sub Command2_Click() 'Обработка события Щелчок для командной кнопки Вы 'ход Unload Form2 End End Sub 7. В модуле формы Form2 создать следующий код:
Private Sub Form_Resize() 'Обработка события Resize (Изменение формы) для 'формы 'С помощью процедуры PrntFunc осуществляется 'перерисовуа формы 'Затем перерасчитывается высота полосы прокрутки ' (VScroll1.Height) 'и расстояеие ее от левого края формы ' (VScroll1.Left) PrntFunc VScroll1.Height = Form2.ScaleHeight – VScroll1.Top + ScaleTop VScroll1.Left = Form2.ScaleWidth – VScroll1.Width - 50 End Sub
Private Sub VScroll1_Change() 'Реакция на изменение позиции бегунка 'перерисовывается форма. PrntFunc End Sub
8. Сохранить проект в личной папке, присвоив имена файлов в соответствии с требованиями раздела 4. Форма 1: L4_<ФИО>_Form1 Форма 2: L4_<ФИО>_Form2 Модуль2: L4_<ФИО>_Module2 Проект L4_<ФИО>_Project 9. Запустить приложение на выполнение. Исследовать, как ведет себя приложение при изменении позиции бегунка в полосе прокрутки и при изменении размеров окна формы Form2.
Лабораторная работа № 5. Элементы графики Цель: Дальнейшее освоение работы с объектами Visual Basic. Использование графических методов для рисования графиков функции. Рабочее задание: На основе проекта Lab4 разработать новый проект, включив в него блок вывода графика функции на экран. Предусмотреть масштабирование графика, в зависимости от размеров окна.
|
||||
Последнее изменение этой страницы: 2016-08-12; просмотров: 210; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.80.194 (0.008 с.) |