Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_VB_ч_1_МГУС.doc
Скачиваний:
45
Добавлен:
23.08.2019
Размер:
1.41 Mб
Скачать

Задание № 5. Программирование вычислительных задач циклической структуры

Постановка задачи

Вычислить значение функции f = 3k2 – 2p, где

если 2 < x ≤ 6

если x > 6

k =

при значениях Х, изменяющегося от 1 до 11 с шагом 0,5.

Анализ задачи

А нализ постановки задачи показывает, что данный вычислительный процесс является циклическим и значение Х изменяется от начального значения Хн до конечного Хк с шагом ∆Х. Формулы для вычисления требуемых параметров такие же, как в задании № 4. Однако выдача многократно вычисляемых промежуточных величин К, Р и результирующей f необходимо каждый раз выдавать на форму, а не на этикетки, как это сделано в задании № 4. Поэтому в программе из задания № 4 должны быть внесены изменения в выдаче вычисляемых величин. Исходные данные: Хн, Хк и dХ.

Алгоритм задачи

Блок-схема алгоритма изображает циклический алгоритм, а телом цикла является предыдущий блок алгоритма разветвляющейся структуры. Поэтому на блок-схеме циклического алгоритма (см. рис. 5.1) предыдущий блок подробно не приводится, а обозначен пунктирным прямоугольником. Следует отметить, что если программа задания № 4 требует некоторого изменения, блок-схему этого задания изменять не нужно.

Рис. 5.1

Разработка пользовательского интерфейса

Откройте из своей папки свой проект Программы_ВашаФамилия.vbp. Введите новую дочернюю формы с названием, например, Цикл ForNext с именем frmCycle, для чего свойству MDIChild формы frmCycle задайте значение True. Добавьте новый пункт меню (Цикл) в родительскую форму для загрузки этой новой формы.

Затем разработаем интерфейс новой формы. То есть спланируем, какие элементы управления разместить на форме, чтобы интерфейс формы был удобным и понятным для пользователя вашей программы. Чтобы лучше понимать, почему выбирались те или иные элементы управления, приведем на рис. 5.2 вид формы, которая она будет иметь после запуска программы.

Н ас должен интересовать интерфейс, связанный с тремя основными блоками: ввода исходных данных, блока вычислений, вывода результатов.

Ввод исходных данных, т. е. значения Хн, Хк и dX здесь проще всего осуществлять с помощью трех Текстовых полей и одной Надписи Введите Хн, Хк, dX перед этими тремя текстовыми полями. Разместить это лучше в верхней части формы.

Блок вычислений. Все вычисления будут запрограммированы в программе (процедуре). Но для начала вычислений необходимо предусмотреть на форме Кнопку с названием Вычислить, которая и будет запускать на выполнение такую процедуру. Еще одна Кнопка с названием Выход (или Конец, или END) необходимо построить на форме для завершения работы с формой. Кнопки разместить справа вверху на форме.

Вывод результатов. На форме разместите одну Этикетку (Label) для выдачи заголовка Результаты расчетов. Выдачу результатов расчетов на форму с помощью оператора Print запрограммируйте в процедуре, связанной с обработкой события Click кнопки cmdВычислить.

Начало программирования в программе задается с помощью операторов CurrentX и CurrentY. Чтобы не подбирать эти текущие координаты курсора при печати, можно поступить следующим образом. На форме в режиме конструктора в место, где предполагается начало печати, построить очень маленькую линию (объект), которая строится так же, как любой элемент управления с панели элементов управления. Затем в окне свойств для линии выписать ее координаты, например X1 и Y1. Эти координаты и задать для CurrentX и CurrentY.

В табл. 5.1 приведены спланированные элементы управления.

Таблица 5.1

Объект

Свойство

Установленное значение

Label1

Caption

Введите значение Хн, Хк, dX:

Text1

Имя

txtXn

Text

Пусто (для ввода Хн)

Text2

Имя

txtXk

Text

Пусто (для ввода Хк)

Text3

Имя

txtDX

Text

Пусто (для ввода dX)

Label2

Caption

Результаты расчетов

ForeColor

Темно-коричневый

Command1

Имя

cmdВычислить

Caption

Вычислить

Command2

Имя

cmdEnd

Caption

Выход

Для формы, после ее выделения, в окне свойств для свойства AutoRedraw (Автоперерисовка) задать значение True. Это значит, что если результаты выдачи результатов не поместятся на форме, то после увеличения ее размера данные на форме появятся.

Написание программного кода

Для события Click кнопки cmdВычислить (<Вычислить>) напишите следующий код:

Private Sub cmdВычислить_Click()

Dim xn As Single, xk As Single, dx As Single

Dim k As Single, x As Single, blnДалее As Boolean

Dim p As Single, f As Single

‘ значения, введенные в текстовые поля, присваиваем

‘ переменным

‘ xn, xk, dx:

xn = Val(txtXn): xk = Val(txtXk): dx = Val(txtDX)

Cls

CurrentX = 240: CurrentY = 1080 ‘ координаты начала выдачи

Print " X K P F "

Print "___________________________________________"

For x = xn To xk Step dx

blnДалее = True

If x > 2 And x <= 6 Then

k = FormatNumber(((2 * x ^ 2 + Exp(x)) / 2 / x), 3)

ElseIf x > 6 Then

k = FormatNumber((3 * x + 4 * (Cos(x)) ^ 2), 3)

Else

blnДалее = False

End If

If blnДалее Then

p = FormatNumber(((2 * x + k) / k ^ 2), 3)

f = Format((3 * k ^ 2 - 2 * p), "000000.###")

Print Tab(4); FormatNumber(x, 1); Tab(11); k; _

Tab(21); p; Tab(31); f

Else

Print Tab(4); x; Tab(10); " Нет решения"

End If

Next x

End Sub

Для события Click кнопки cmdEnd (<Выход>) напишите следующий код:

Private Sub cmdEnd_Click()

Unload Me ‘Закрытие формы frmCycle

End Sub

Если написать следующую любопытную процедуру, можно будет в режиме выполнения программы прямо на форме мышью можно нарисовать, по желанию, любую таблицу.

Private Sub Form_MouseDown(Button As Integer, _

Shift As Integer, X As Single, Y As Single)

Static Xp As Integer, Yp As Integer

Select Case Button ‘ регистрирует нажатие кнопки

Case 4 'средняя кнопка отмечает точку - начало рисования

PSet (X, Y): Xp = X: Yp = Y

Case 2 'правая кнопка мыши рисует горизонталь

Line (Xp, Yp)-(X, Yp)

Case 1 'левая кнопка мыши рисует вертикаль

Line (Xp, Yp)-(Xp, Y)

End Select

End Sub

Еще одна занятная процедура стирает все, что выдано на форме или нарисуется с помощью предыдущей процедуры.

Public Sub Form_MouseMove(Button As Integer, _

Shift As Integer, X As Single, Y As Single)

Dim col As Single

col = frmCicl.BackColor ‘ устанавливаем цвет формы

‘ «стиралка»: нажав ЛКМ, перемещаем к любому

‘ символу на форме и стираем его

If Button = 1 Then Circle (X, Y), 100, col

End Sub

Последние две процедуры – это процедуры обработки событий мыши: MousDown – нажатие кнопки мыши, MousMove – перемещение мыши.

Стирание происходит путем рисования окружности цветом формы.

После выполнения этого задания получить у преподавателя свой вариант задачи и выполнить его самостоятельно. Перед программированием на компьютере в тетради составить алгоритм задачи, разработку интерфейса формы и написать коды программы.