Создание и обработка массивов. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание и обработка массивов.



 

Цель: Совершенствование приложения. Изучение методов создания и обработки массивов. Табулирование функции в массив и печать из массива.

Рабочее задание: Разработать усовершенствованное приложение для табулирования функции, обеспечивающее прокрутку таблицы значений при больших ее объемах, а также перерисовку таблицы при изменении размеров окна. Для промежуточного хранения рассчитанных значений использовать массивы.

 

Краткие теоретические сведения.

 

Можно отметить два недостатка проекта, разработанного в лабораторной работе № 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; просмотров: 185; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.223.196.59 (0.034 с.)