Этап третий. Работа пользователя

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

Для составления программы необходимо учитывать, что начальная скорость ядра составляет примерно 200 м/с, следовательно, и дальность полета значительно возрастет, при этом сопротивлением воздуха опять пренебрегаем. Программу начнем с ввода данных в соответствии с условием задачи.

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

PRINT a, l

END

Данный отрезок программы, используя условные операторы (IF, THEN), позволяет присвоить переменным a(угол) и l(расстояние), необходимые значения, жестко ограниченные по условию задачи.

Допишем программу с 70-й строки используя за основу программу полета тела, изменив масштаб координат и определив место цели на координате Х:

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”

 LOCATE 6, 4: PRINT “1000”

LINE (48, 245)-(52, 245), 11

LINE (48, 190)-(52, 190), 11

LINE (48, 135)-(52, 135), 11

LINE (48, 80)-(52, 80), 11

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

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

 LOCATE 23, 19: PRINT “1000”

 LOCATE 23, 31: PRINT “2000”

 LOCATE 23, 44: PRINT “3000”

 LOCATE 23, 56: PRINT “4000”

 LOCATE 23, 69: PRINT “5000”

LINE (150, 302)-(150, 298), 11

LINE (250, 302)-(250, 298), 11

LINE (350, 302)-(350, 298), 11

LINE (450, 302)-(450, 298), 11

LINE (550, 302)-(550, 298), 11

REM цель

LINE (x0 + l / 10, 299)-(x0 + l / 10 + 5, 299), 10

LINE (x0 + l / 10, 298)-(x0 + l / 10 + 5, 298), 10

 80 KEY(1) ON

 ON KEY(1) GOSUB 90

 GOTO 80

REM полет

90 v = 200

 g = 9.8

 f = a * 3.14 / 180

100 q =.0005

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 / 20, y0 – h / 25), 14

x2 = x0 + s / 20

y2 = y0 – h / 25

IF h < 0 THEN 200

GOTO 100

200 END

 END

Функция KEY(1) устанавливает, что дальнейшее выполнение программы начнется с нажатия функциональной клавиши F1. Логично предположить, что KEY(2) устанавливает F2, KEY(3) – F3 и т.д.

Для большего эффекта нужно с 200 –й строки дописать программу вставив еще несколько строк:

200 REM взрыв

r = 30

n = 500

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

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

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

DIM x(n), y(n)

RANDOMIZE (TIMER)

FOR i = 1 TO n

a = -6.28 * RND / 2

rn = r * RND

xc = x2 + rn *.5 * COS(a)

yc = y2 + rn * 1 * SIN(a)

PSET (xc, yc), 9 + 9 * RND

PRESET (x(i), y(i))

NEXT

 END

Данный блок программы используя массив (DIM) случайных чисел ограниченных пространством (r) и количеством (n) точек позволяет создать эффектный фейерверк разлета осколков.

Полностью программа представлена в Приложении 2. 

Данная задача рассматривалась без учета сопротивления воздуха. Попробуем ввести поправку на сопротивление воздуха.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: