GOTO 210
220 a = a + 1
LOCATE 1, 46: PRINT a
GOTO 210
230 a = a - 1
LOCATE 1, 46: PRINT a
GOTO 210
300 END
Оператор ERASE x,y отвечает за обнуление памяти задействованной под массив DIM x(n), y(n). При этом не обходимо обозначить 72 –ю строку перед блоком отвечающим за построение сетки координат.
Чтобы прервать выполнение задачи в любой момент времени, после ее начала, логично, если оператор KEY(5) ON будет размещен сразу за KEY(1) ON в начале программы:
80 KEY(1) ON
ON KEY(1) GOSUB 90
KEY(5) ON
ON KEY(5) GOSUB 300
GOTO 80
Полностью законченная программа представлена в приложении 4.
Задачу можно дальше усложнять, заставив цель двигаться, маневрировать, вводить дополнительные параметры, которые реальней отражают происходящее, физические процессы. Но такая цель в данной работе не преследуется.
Заключение
В предложенной к рассмотрению работе были показаны возможности языка программирования БЕЙСИК по решению математических уравнений описывающих физические явления. В работе не ставилась задача изучить в полном объеме язык БЕЙСИК, но переходя от простых решений, к более сложным, наглядно продемонстрирована возможность решения сложных задач с использованием графики, что в значительной степени способствует пониманию происходящих процессов.
Необходимо подчеркнуть, что пользователь работая на компьютере рано или поздно сталкивается с желанием самостоятельно написать программу, в которой можно было бы, в реальном масштаба времени, наблюдать и воздействовать на какие-то процессы. Это довольно сложный и кропотливый труд. Но первый шаг сделан в этой работе.
Важно отметить, что на многие практические исследования необходимо затратить определенное количество материальных средств, а создав электронную модель и воплотив ее в компьютерной программе обеспечивается значительная экономия средств. При этом, в решение таких задач следует учитывать случайный фактор, который может в значительной мере сказываться на реальных результатах. Но и это можно учесть используя законы теории вероятности.
Таким образом, берясь за решение какой – либо задачи, следует помнить, что при некотором напряжении мысли, логическом анализе и упорстве можно даже самую сложную задачу разбить на последовательность простых шагов, которые потом легко преобразовать в компьютерную программу.
Список литературы
Дж. Радер., К. Миллсап. Бейсик для персонального компьютера фирмы IBM: Пер. с англ. – М.: Радио и связь, 1991. – 30 л.: ил.
Р. Мкдона. Основы микрокомпьютерных вычислений: Пер. с англ./ Т.Г.Никольской; Под ред. В. Ф. Шальгина. – М.: Высш. Школа., 1989. – 272 с.: ил.
Задачи и упражнения по программированию: Практ. Пособие для ПТУ/ Под ред. А. Я. Савельева. Кн. 2. Тяжелая промышленность и транспорт/ В.Е.Алексеев, А.С. Ваулин. – 2-е изд., доп. – М.: Высш. шк., 1989-112 с.: ил.
А. В. Перышкин., Е. М. Гутник. Физика. 10 кл.: «Учеб. для общеобразоват. учеб. заведений – М.: Дрофа, 2002.
И. Д. Помбрик, Н. А. Шевченко. Аэродинамика. Изд. третье, исправленное и дополненное. М., Военное издательство, 1972 – 96 с.: ДСП.
Г. И. Светозарова. ОСНОВЫ ПРИКЛАДНОЙ ИНФОРМАТИКИ. Раздел: Описание языка Турбо-Бейсик. Справочное пособие.
Приложение
Приложение 1.
REM полет тела
REM построение координат
SCREEN 9:
x0 = 50
y0 = 300
x1 = 600
y1 = 100
x2 = 50
y2 = 300
REM координата Y
LINE (x0, y0)-(x0, y1), 12
LOCATE 18, 4: PRINT “10”
LOCATE 14, 4: PRINT “20”
LOCATE 10, 4: PRINT “30”
LINE (48, 245)-(52, 245), 11
LINE (48, 190)-(52, 190), 11
LINE (48, 135)-(52, 135), 11
REM координата X
LINE (x0, y0)-(x1, y0), 12
LOCATE 23, 19: PRINT “50”
LOCATE 23, 31: PRINT “100”
LOCATE 23, 44: PRINT “150”
LOCATE 23, 56: PRINT “200”
LOCATE 23, 69: PRINT “250”
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 полет
v = 50
g = 9.8
a = 30
f = a * 3.14 / 180
100 q = 1
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 200
GOTO 100
200 END
END
Приложение 2.
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”
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 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
Приложение 3
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"
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
REM показания
LOCATE 1, 6: PRINT "V m/s"
LOCATE 2, 6: PRINT "H m"
LOCATE 2, 24: PRINT "S m"
LOCATE 1, 24: PRINT "T s"
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 = .01
t = t + q
REM k коэффициент сопротивления воздуха
k = .016
vs = v * COS(f) - (k - k / (k + v * COS(f)))
vh = v * SIN(f) - (k - k / (k + v * SIN(f)))
s = vs * t * 2
h = (vh * t - (g * t ^ 2) / 2) * 5.5
v = SQR(vs ^ 2 + vh ^ 2)
LINE (x2, y2)-(x0 + s / 20, y0 - h / 25), 14
x2 = x0 + s / 20
y2 = y0 - h / 25
LOCATE 1, 12: PRINT v
LOCATE 2, 12: PRINT h / 5.5
LOCATE 2, 28: PRINT s / 2
LOCATE 1, 28: PRINT t
IF h < 0 THEN 200
GOTO 100
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
Приложение 4
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
INPUT " Для увеличения угла стрельбы нажать F2 "; enter
INPUT " Для уменьшения угла стрельбы нажать F3 "; enter
INPUT " Для остановки решения задачи нажать F5 "; enter
REM построение координат
SCREEN 9:
COLOR 1, 7:
72 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
REM показания
REM a-угол стрельбы
LOCATE 1, 6: PRINT "V m/s"
LOCATE 2, 6: PRINT "H m"
LOCATE 2, 24: PRINT "S m"
LOCATE 1, 24: PRINT "T s"
LOCATE 1, 45: PRINT "а"
78 t = 0
n = 0
b = 0
80 KEY(1) ON
ON KEY(1) GOSUB 90
KEY(5) ON
ON KEY(5) GOSUB 300
GOTO 80
REM полет
90 v = 200
g = 9.8
f = a * 3.14 / 180
100 q = .01
t = t + q
REM k - коэффициент сопротивления воздуха
k = .016
vs = v * COS(f) - (k - k / (k + v * COS(f)))
vh = v * SIN(f) - (k - k / (k + v * SIN(f)))
s = vs * t * 2
h = (vh * t - (g * t ^ 2) / 2) * 5.5
v = SQR(vs ^ 2 + vh ^ 2)
LINE (x2, y2)-(x0 + s / 20, y0 - h / 25), 14
x2 = x0 + s / 20
y2 = y0 - h / 25
LOCATE 1, 12: PRINT v
LOCATE 2, 12: PRINT h / 5.5
LOCATE 2, 28: PRINT s / 2
LOCATE 1, 28: PRINT t
LOCATE 1, 46: PRINT a
IF h < 0 THEN 200
GOTO 100
200 REM взрыв
r = 20
n = 100
REM: b угол разлета
REM: r радиус разлета, n количество осколков
REM: коэффициенты 0.5 и 1 определяют ширину и высоту разлета
DIM x(n), y(n)
RANDOMIZE (TIMER)
FOR i = 1 TO n
b = -6.28 * RND / 2
rn = r * RND
xc = x2 + rn * .5 * COS(b)
yc = y2 + rn * 1 * SIN(b)
PSET (xc, yc), 9 + 9 * RND
PRESET (x(i), y(i))
NEXT
ERASE x, y
210 KEY(2) ON
ON KEY(2) GOSUB 220
KEY(3) ON
ON KEY(3) GOSUB 230
KEY(1) ON
ON KEY(1) GOSUB 72
GOTO 210
220 a = a + 1
LOCATE 1, 46: PRINT a
GOTO 210
230 a = a - 1
LOCATE 1, 46: PRINT a
GOTO 210
300 END