Смекни!
smekni.com

Использование языка программирования Visual Basic для решения математических задач (стр. 2 из 3)

Выведем на экран значение скрола, которое и будет определять дальность до цели. Для этого в левой части в панели управления элементов выберем элемент Label

и разместим его в любой части рабочей области. Выделим теперь горизонтальный скрол и кликнем его мышкой. Активируется окно Project1 (содержимое формы). Между строк: Private Sub HScroll1_Change() и End Sub введем новые данные :

Label1 = HScroll1

Cls

X1 = Label1 * 0.55 + 500

Line (X1, 4300)-(X1 + 100, 4450), 11, BF

Общий вид записи представлен на рис. 6.

Рис. 5.

Рис. 6.

При этом надо учитывать разницу в масштабах координаты Х1 и значения HScroll. Их согласование обеспечивается выражением:

X1 = Label1 * 0.55 + 500

В принципе, для каждого конкретного случая, значения коэффициентов (0,55 и 500) могут быть различными и требуют индивидуального подбора.

Оператор CLS обеспечивает обнуление изображения цели после каждого обращения к HScroll.

Вторым шагом будет редактирование вертикального скрола (VScroll). Для этого создадим и разместим на рабочей области элемент управления Label 2. Выберем VScroll и в свойствах объекта (Properties-VScroll) изменим значение параметра MAX и Value на 80, что будет соответствовать максимальному углу стрельбы в 80 градусов и начальному положению вертикального скрола в нижней части шкалы. В графе Mouse Pointer можно установить значение 9-Size WE. А чтобы нижнее положение курсора VScroll1, отображаемое элементом Label2 соответствовало 0, необходимо, активировав окно Properties для VScroll1 и записать в содержание формы:

Private Sub VScroll1_Change()

Label2 = 80 - VScroll1

End Sub

Общий вид содержания формы представлен на Рис. 7.

Рис. 7.

Следующим шагом будет введение активной кнопки, нажатием на которую будет осуществляться старт (Пуск, Выстрел). Для этого на панели управления выберем новый элемент Command1

и устанавливаем его в любом удобном месте рабочей области формы. При этом в свойствах элемента Properties-Command1 в строке Caption пропишем новое имя «Start». Активировав содержание формы запишем для элемента Command1 следующие строки, взятые из уже решенной задачи полета ядра в QBasic (Приложение 1), правда пока без учета сопротивления воздуха:

Private Sub Command1_Click()

x0 = 480

y0 = 4440

X2 = x0

Y2 = y0

v = 150

g = 9.8

a = Label2

f = a * 3.14 / 180

100 q = 0.0001

t = t + q

s = v * t * Cos(f) * 2

h = (v * t * Sin(f) - (g * t ^ 2) / 2) * 5.5

Line (X2, Y2)-(x0 + s, y0 - h), 14

X2 = x0 + s

Y2 = y0 - h

If h < 0 Then GoTo 200

GoTo 100

200 End Sub

Значение координат х0 и у0 (начальная точка старта) подбираются индивидуально.

В целом, на этом, задачу можно считать выполненной. На Рис.8 и Рис.9 отображен общий вид формы.

Для большей наглядности можно вести еще ряд элементов, изменить цвет, ввести коэффициент сопротивления воздуха. Как вариант, в приложении 2 показано содержание файла form*.frm , для данного случая, а рис. 10 и рис. 11 отображает общий вид формы.

Рис. 8.

Рис. 9

Рис. 10

Рис. 11

Использование таймера в VB

В большинстве случаев решаемые задачи в той или иной мере привязаны к реальному времени. В VB так же при решении задач можно использовать время - таймер, причем таймеров может быть несколько, они могут работать как вместе, так и поочередно, при этом один процесс решения может останавливаться, а другой - начинаться.

В предлагаемом примере (Приложение 3), решена задача наведения в ручную ракеты (ПТУРС) на цель. Для решения задачи использованы пять таймеров, причем данное решение не является самым удачным и имеет ряд погрешностей. Но для получения начальных навыков в программировании в VB вполне приемлем. Общий вид формы представлен на Рис. 12.

Рис.12.

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

Private Sub Form_Load()

Label1.Caption = 0

Label2.Caption = 0

Label3.Caption = 0

Label4.Caption = 0

Label5.Caption = 0

Label6.Caption = 0

Label13.Caption = 0

Label15.Caption = 0

Label17.Caption = 0

End Sub

Первый таймер (Private Sub Timer1_Timer()), запускается сразу после начала программы, так как по умолчанию в свойствах элемента Timer1 в графе interval установлена 1, что соответствует 1мл.сек. При этом положение цели (танка) начинает меняться в соответствию с записью:

Label1.Caption = Label1.Caption + Timer1.Interval

a = Label1.Caption

Timer1 работает до тех пор пока ракета не выйдет за приделы 13000 или не попадет в цель:

If X0 > 13000 Then Timer1.Interval = 0

If Label17.Caption < 150 Then Timer1.Interval = 0

Остальные таймеры в начальный момент отключены, т.е. для каждого таймера в графе interval установлен 0.

Работа таймера 3 начинается после нажатия кнопки ПУСК:

Private Sub Command1_Click()

Rem старт ПТУРС

Timer3.Interval = 1

End Sub

Полет ракеты описывается следующим блоком:

T = Timer3.Interval

Rem Полет ПТУРС

X1 = V * T * Cos(f - Rnd * 0.1)

Y1 = V * T * Sin(f + Rnd * 0.1)

Label5.Caption = (Label5.Caption + X1)

Label4.Caption = (Label4.Caption + Y1)

Label6.Caption = 12000 - a * k

X0 = Label5.Caption

Y0 = -Label4.Caption

Начальный угол стрельбы задается положением скрола и может меняться в пределах от +25 до -15. Положение скрола, по умолчанию, в свойствах установлено как: max 40; value 10.

А строка:

Label3.Caption = (25 - VScroll1)

определяет, что начальный угол стрельбы Label3.Caption =15.

Таймер 2 начинает работать, если высота полета ПТУРС становится меньше -50, т.е. снаряд врезался в землю:

If Y0 > 50 Then Timer2.Interval = 1,

при этом запускается программа взрыва:

Private Sub Timer2_Timer()

Rem: фейерверк

Rem: a угол разлета

Rem: r радиус разлета, n количество осколков

Rem: коэффициенты 1 и 4 определяют ширину и высоту разлета

X1 = Label5.Caption

Y1 = -Label4.Caption

r = 200

n = 500

Dim x(10), y(10)

Randomize (Label2.Caption)

For i = 1 To 2

a = -6.28 * Rnd / 2

rn = r * Rnd

xc = X1 + 400 + rn * 1.5 * Cos(a)

yc = Y1 + 5600 + rn * 5 * Sin(a)

PSet (xc, yc), &HFFFF80 * Rnd + &HC0C0FF * Rnd

Next

If Label1.Caption > 200 Then Timer2.Interval = 0

End Sub

При этом таймер 3 остановится при дальнейшем опускании снаряда до -100:

If Y0 > 100 Then Timer3.Interval = 0

При достижении ракеты цели по дальности:

If Label5.Caption > 11500 - (Label1.Caption) Then Timer4.Interval = 1

начинает работать таймер 4. В этом случае проверяется высота полета, и если она меньше 200 включается таймер 5:

Private Sub Timer4_Timer()

If Label4.Caption < 200 Then Timer5.Interval = 1

End Sub

Запускается программа взрыва:

Private Sub Timer5_Timer()

X0 = Label5.Caption

Y0 = -Label4.Caption

r = 100

n = 100

Dim x(100), y(100)

Randomize (Label2.Caption)

For i = 1 To 5

a = -6.28 * Rnd / 2

rn = r * Rnd

xc = X0 + 400 + rn * 3 * Cos(a)

yc = Y0 + 5600 + rn * 5 * Sin(a)

PSet (xc, yc), &HFFFF80 * Rnd + &HC0C0FF * Rnd

Next

End Sub

И если сохраняется тенденция к снижению снаряда, то таймер 1 останавливается:

If Label17.Caption < 150 Then Timer1.Interval = 0

Цель поражена (Рис.13).

Рис.13

Заключение

Таким образом, язык программирования Visual Basic, наглядно позволяет смоделировать физический процесс, получить конкретные результаты и навыки. Отличительной особенностью VB, является возможность работы его непосредственно в среде Windows, что значительно повышает наглядность, красочность программы и гибкость в ее применении.

Необходимо еще раз подчеркнуть, что создаваемые объекты сразу же обеспечены программным кодом и для них приемлем метод перетягивания, что весьма распространено Windows.

Итак, полученные навыки позволят в дальнейшем самостоятельно решать задачи различной сложности, расширить приобретенный опыт и углубить свои знания в вопросах программирования.

Список литературы

Кравченко В. Программирование. «Компьютерное моделирование движения тел». Учебно – исследовательская работа учащейся 9 класса г. Кунгур 2005 – 30 с.

Дж. Радер., К. Миллсап. Бейсик для персонального компьютера фирмы IBM: Пер. с англ. – М.: Радио и связь, 1991. – 30 л.: ил.

Р. Мкдона. Основы микрокомпьютерных вычислений: Пер. с англ./ Т.Г.Никольской; Под ред. В. Ф. Шальгина. – М.: Высш. Школа., 1989. – 272 с.: ил.

Задачи и упражнения по программированию: Практ. Пособие для ПТУ/ Под ред. А. Я. Савельева. Кн. 2. Тяжелая промышленность и транспорт/ В.Е.Алексеев, А.С. Ваулин. – 2-е изд., доп. – М.: Высш. шк., 1989-112 с.: ил.

А. В. Перышкин., Е. М. Гутник. Физика. 10 кл.: «Учеб. для общеобразоват. учеб. заведений – М.: Дрофа, 2002.

И. Д. Помбрик, Н. А. Шевченко. Аэродинамика. Изд. третье, исправленное и дополненное. М., Военное издательство, 1972 – 96 с.: СПД

Г. И. Светозарова. ОСНОВЫ ПРИКЛАДНОЙ ИНФОРМАТИКИ. Раздел: Описание языка Турбо-Бейсик. Справочное пособие.

http://www.codenet.ru/progr/vbasic/first.php

http://vb.hut.ru/vbnovice/lessons.htm

http://vbzero.narod.ru/loading.htm

http://vbzero.narod.ru/site.htm

http://vbzero.narod.ru/project.htm

http://www.tam.ru/guide/

http://www.codenet.ru/progr/vbasic/menu/vbhelp_01.php

Приложение 1

REM ЯДРО

5 INPUT « Ввести угол стрельбы от 5 до 80 град»; a

7 IF a < 5 THEN 10

IF a > 80 THEN 20

GOTO 40

10 INPUT « Угол должен быть >=5»; a

GOTO 7

20 INPUT « Угол должен быть <=80»; a

GOTO 7

40 INPUT « Ввести дальность до цели от 200 до 5000 м»; l

45 IF l < 200 THEN 50

IF l > 5000 THEN 60

GOTO 70

50 INPUT « Расстояние до цели должно быть >=200»; l

GOTO 45

60 INPUT « Расстояние до цели должно быть <=5000»; l

GOTO 45

70 INPUT « Для выстрела нажать F1»; enter

REM построение координат

SCREEN 9:

x0 = 50

y0 = 300

x1 = 600

y1 = 50

x2 = 50

y2 = 300

REM координата Y

LINE (x0, y0)-(x0, y1), 12

LOCATE 18, 4: PRINT “250”

LOCATE 14, 4: PRINT “500”

LOCATE 10, 4: PRINT “750”