Кравченко Валерия
9 класс
2005
Введение
В настоящее время, в виду большого использования компьютеров на производстве и в вычислительных процессах, ставится задача привития навыков использования компьютеров глубже, чем это достаточно для обычного пользователя, ограниченного знанием программ Windows и Office.
Существующее обилие языков программирования РІ значительной степени потеснили позиции языка программирования БЕЙСРРљ (BASIC). Тем РЅРµ менее, данный язык Рё сегодня позволяет решать задачи профессионального СѓСЂРѕРІРЅСЏ. Р’ то Р¶Рµ время простота понимания Рё доступность его использования позволяет применить его как РЅР° компьютерах старого класса, так и современных мощных машинах (P-III, P-IV).
Таким образом, данная работа ставит целью показать возможности использования языка БЕЙСРРљ для решения математических (профессиональных) задач РІ условиях обучения учащихся средних школ Рё профессиональных училищ, Рё может быть включена РІ качестве учебного РїРѕСЃРѕР±РёСЏ РїРѕ общетехнической подготовки учащихся РїРѕ основам информатики Рё вычислительной техники.В В
Одним из видов подготовки специалистов различных профессий являются практические знания. Помимо приобретения практических навыков они должны развивать обобщенное мышление, так как без этого невозможно научить будущих специалистов самых разнообразным приемам решения технических задач.
Подготовка задач Рє решению РЅР° компьютере РІРѕ РјРЅРѕРіРѕРј способствует развитию абстрактного мышления, связанного СЃ формализацией задач, разработке алгоритмов Рё программ. Р’ работе использован пример решения типичной задачи СЃ максимальным использованием наглядности Рё простоты управления, СЃ использованием стандартной программы Qbasic.В В
Процесс подготовки и решения задач на компьютере является пока достаточно сложным и трудоемким требующий выполнения целого ряда этапов:
постановка задачи;
математическая формулировка задачи;
выбор численного метода вычисления;
разработка алгоритма решения задачи;
 написание программы;
ввод в программы и исходных данных;
отладка программы;
решение задачи на компьютере.
 Данная последовательность характерна для решения каждой задачи. Однако в процессе подготовки каждый этап может иметь более или менее выраженный характер. Выполнение этапов в процессе подготовке задачи носит характер последовательного приближения, так как уточнение задачи на последующем этапе приводит к необходимости возврата к предыдущему и повторному выполнению последующих этапов.
Учитывая то, что основная масса современных пользователей имеют возраст 15-30 лет Рё совершенно недавно обзавелись домашним компьютером, РЅРµ обладают большой усидчивостью, Рё зачастую РЅРµ задумываются над тем, что РёР· чего берется, то более глубокое рассмотрение этапов подготовки решения задач является нецелесообразным. Поэтому непосредственно перейдем Рє рассмотрению РІРѕРїСЂРѕСЃРѕРІ работы РЅР° языке программирования БЕЙСРРљ. Для большей наглядности Рё лучшего понимания РІ качестве примера составим программу для решения задачи РїРѕ механике из учебника физики 10 класса [4].В РџСЂРё этом составление программы разобьем РЅР° несколько этапов постоянно наращивая Рё раскрывая возможности языка БЕЙСРРљ.В
1. Ртап первый. Знакомство.
Запуск программы осуществляется файлом qbasic.exe. Если РїСЂРё первом запуске выдается сообщение РѕР± ошибке РІ pif-файле, то необходимо РІ нем (qbasic. pif) прописать путь установки программы Qbasic, Р° вообще проще удалить сам файл qbasic.pif.В РќРµ забудьте перед запуском программы РІ Свойствах файла qbasic.exe указать совместимость СЃ установленной системой Рё установить Полноэкранный режим.В
Р’ языке БЕЙСРРљ используются следующие символы:
1) Буква латинского алфавита от A до Z.
2) Цифра от 0 до 9.


3) Специальные символы: + - * / ¬     . , : ; ( ) = >
4) Ключевые слова:
LET- пусть, READ- РІРІРѕРґ, DATA- данные, DIM- размерность, PRINT- вывод, STOP- останов, END- конец, TO- Рє , STEP- шаг, GOTO- перейти, NEXT- конец цикла, INPUT- РІРѕРґ СЃ экрана, DEFFN- определение функции, REM- комментарий, FOR- для, IF- если, GOSUB- переход Рє РїРѕРґ программе, RETURN- возврат.В
5) знаки операций:
а) арифметические: +(сложение), -(вычитание), *(умножение), /(деление), ¬ или ^ (возведение в степень);
б) отношения: >(больше), или >=(больше равно),
Примеры записи [ 3 ] представлены в таблице 1.
                                                                                          Табл.1В В В В В В В В В
Числа | Запись РЅР° БЕЙСРРљР• |
2 0,65 -11,426 2,6 .104 0,00081 | 2 0.65 или .65 -11.426 2.6Е4 0.81Е-3 или .81Е-3 |
Математическая | РќР° БЕЙСРРљР• |
ax2+b c-   | A * X ^ 2 + B или A * X * X + B C - SQR(T^3 + 1) (A*SIN(X)+B)/(C+D) |
Стандартные функции [ 6 ]:
Математическая запись | Запись на Бейсике         |
|x| sin x cos x tg x arctg x ex ln x log2 x lg x целая часть хзнак х (+1 при х > 0, 0 при х=0, -1 при x вывод n пробелов, используется                 в списке вывода оператора PRINT выдает случайное число из инте                                 рвала (0,1) | ABS (x) SIN (x) COS (X) TAN (x) ATN (x) EXP (x) LOG (x) LOG2(x) LOG10(x) INT (x) SGN (x) SQR (x) LEN (а$) LEFT$(a$,n) MID$ (a$,m,n) RIGHT$ (a$,n) STR$ (x) VAL (a$) ASC (a$) TAB (n) SPC (n) RND [(x)] |
Откроем Qbasic и запишем для пробы несколько строк:
a=2
b=3
c=5
k=(a+b)*c
В В В В В В В В В В PRINTВ В k
После ввода Run\Start, получили результат 25. Поупражнявшись с различными величинами переменных и арифметическими действиями выясняем, что удобно вычислять значение функции меняя значения переменных.
Для удобства рассмотрения возьмем обычную задачу РёР· учебника физики, РіРґРµ РЅСѓР¶РЅРѕ определить дальность полета Рё время полета тела брошенного СЃ какой-то начальной скоростью V0В РїРѕРґ углом Рє горизонту α, РїСЂРё этом усложним задачу: получим значение высоты Рё горизонтальной дальности тела через равные промежутки времени ∆t =1 сек, сопротивлением РІРѕР·РґСѓС…Р° пренебрегаем.
Рассмотрим график полета тела представленный на рис. 1.
Как видно из графика скорость тела в любой точке траектории полета может быть определенна по формуле V=
, в нашем случае вектор начальной скорости V0 определяется формулой V0 =
. При этом текущее значение скорости Vт0 в соответствии с законом всемирного тяготения определяется формулой V0т =
В .
РСЃС…РѕРґСЏ РёР· этого проекция горизонтальной дальности РґРѕ тела определяется формулой:
S= (V0С…+ V1С…+ V2С…+…+ Vnx). ∆t
Так как Vx это прямолинейное равномерное движение, то V0x= V1x= V2x=…= Vnx , тогда S= V0x.n∆t = V0x.t, РіРґРµ t общее время полета тела. Таким образом проекция пути РЅР° РѕСЃСЊ РҐ будет иметь РІРёРґ:
S=V0cos α . t= V0 n∆t cos αВ В (1.1)

Р РёСЃ.1
Высоту полета тела определяем в соответствии с прямолинейным равноускоренным движением по формуле [ 4 ]:
h= V0y.t+
= V0sin α.t+
= V0sin α.n∆t +
В В (1.2)
Для построения такого графика РЅРµ РѕР±С…РѕРґРёРјРѕ получить значение точек РІ плоскости X Y, которые Р±СѓРґСѓС‚ отображать траекторию полета тела РІ каждый момент времени t.В
Для составления программы используем формулы 1.1 и 1.2.
Войдем в Qbasic и наберем программу следующего вида:
   REM полет тела
В В В PRINT "t", "h", "s"
В В В v = 50
В В В g = 9.8
В В В a = 30
В В В f = a * 3.14 / 180
В В В В В В В В 100 q = 1
В В В t = t + q
В В В s = v * t * COS(f)
В В В h = v * t * SIN(f) - (g * t ^ 2) / 2
В В В PRINT t, h, s
В IF h
В GOTO 100
В В В В В В 200 END
Где V-начальная скорость (Рј/СЃ), g-ускорение СЃРІРѕР±РѕРґРЅРѕРіРѕ падения (Рј/СЃ2 ), a-СѓРіРѕР», f-формула пересчета угла РІ радианы, q-единица времени ∆t, t-текущее время, s- проекция горизонтальной дальности, h- высота. Каждой строчке РІ программе может быть присвоен номер или РёРјСЏ. Причем номера РёРґСѓС‚ РїРѕ возрастающей, РїСЂРё этом нет необходимости РІСЃРµ строчки нумеровать. Р’ данном случае между номером 100 Рё 200 заложено тело цикла РІ семь строк. Запуск программы осуществляется RUN\START.
Программа выдаст решение задачи из трех столбиков значений: t, h, s (табл.2).
                                                                                       Табл.2
t | H | s |
1 | 20.08851 | 43.3079 |
2 | 30.37701 | 86.61581 |
3 | 30.86552 | 129.9237 |
4 | 21.55403 | 173.2316 |
5 | 2.442531 | 216.5395 |
6 | -26.46896 | 259.8474 |
РР· анализа полученных данных делаем вывод, что максимальная дальность падения тела лежит РІ пределах 216-259 Рј, Р° максимальная высота полета превысила 30 Рј. Более точные значения РјРѕР¶РЅРѕ получить уменьшив дискретную составляющую времени ∆t. Если РІ программе переменной q присвоить 0.5; 0.25; 0.1 Рё С‚.Рґ., полученные значения Р±СѓРґСѓС‚ более точные. РќРѕ полученный объем данных становится РЅРµ наглядным. Для решения данной задачи, значительно удобней, если решение будет представлено графически.
2. Ртап второй. Графика.
Сохраним отработанную программу (FILE\SAVE AS\*.bas).
Для построения графика нам потребуется соединить на плоскости уже имеющиеся шесть точек.
Откроем новую программу  (FILE\NEW) и наберем следующий блок:
REM полет тела
REM построение координат
В В В В В В В SCREEN 9:
В x0 = 50
В y0 = 300
В x1 = 600
В y1 = 100
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
END
Ключевое слово (оператор) SCREEN 9 – обеспечивает перевод в графический режим работы программы. Для построения координат надо учитывать, что точка с координатами X=0, Y=0 лежит в верхнем левом углу экрана монитора. По-этому координаты X0, Y0 определяют начало координат, а X1, Y1- конец координат. Построение линии осуществляется оператором LINE- с указанием координат начала и конца линии и ее цвета (от 0 до 15). Строчка c ключевым словом LOCATE- означает расположить надпись в точке с указанными координатами. После запуска программы на экране появится сетка координат.
Объединим ( EDIT\COPY, EDIT\PASTE) имеющийся блок с сохраненной программой, не значительно ее видоизменив.
  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.1)
В В В h = v * t * SIN(f) - (g * t ^ 2) / 2В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В (2.2)
В LINE (x2, y2)-(x0 + s, y0 - h), 14
В В В x2 = x0 + s
В В В y2 = y0 - h
В IF h
В GOTO 100
200 END
Веденные дополнительные значения X2, Y2 обеспечивают привязку координат к началу системы отчета. Программа выдаст график полета тела, который в данном случае не привязан к масштабу сетки координат. Устранить это неудобство можно в ведя множитель для Y координаты 5.5 (1:5,5), а для координаты X множитель 2 (1:2).
Заменив строчки 2.1 и 2.2 на выражения 2.3 и 2.4
s = v * t * COS(f) * 2В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В (2.3)
В В В В В В В В В В В В В h = (v * t * SIN(f) - (g * t ^ 2) / 2) * 5.5В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В (2.4)
получим окончательную программу полета тела (Приложение 1). График полета представлен на рисунке 2.

Р РёСЃ. 2
В данном случаи он не отражает истинной траектории полета тела, так как значение координат получены с шагом (дискретой) в 1 сек. Если значению q присвоить 0,5; 0,25; 0,1; и т.д., то график приблизится к идеальной кривой полета тела.
На кривизну графика так же влияет изменение скорости и начального угла полета тела.
3.Ртап третий. Работа пользователя.
Хорошую наглядность программа приобретает, когда она становится унифицированной, т.е. чтобы ее можно было успешно использовать для различных параметров. Для того, чтобы можно было менять начальные условия, несколько модернизируем уже имеющуюся программу полета тела. Но вместо тела используем пушечное ядро и попытаемся им попасть в цель находящуюся на каком-то заданном расстоянии.
Для составления программы необходимо учитывать, что начальная скорость ядра составляет примерно 200 м/с, следовательно, и дальность полета значительно возрастет, при этом сопротивлением воздуха опять пренебрегаем. Программу начнем с ввода данных в соответствии с условием задачи.
REM  ЯДРО
5  INPUT « Ввести угол стрельбы от 5 до 80 град»; a
7В В В IF a
В В В В IF a > 80 THEN 20
В В В В GOTO 40
10 INPUT «  Угол должен быть >=5»; a
В В В GOTO 7
20 INPUT «  Угол должен быть
В В В В GOTO 7
40  INPUT «  Ввести дальность до цели от 200 до 5000 м»; l
45В В IF l
В В В В IF l > 5000 THEN 60
В В В В GOTO 70
50  INPUT «  Расстояние до цели должно быть >=200»; l
В В В В GOTO 45
60  INPUT «  Расстояние до цели должно быть
В В В В 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
В 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.В
Данная задача рассматривалась без учета сопротивления воздуха. Попробуем ввести поправку на сопротивление воздуха.
4. Ртап четвертый. Воздействие внешних факторов.
Рљ внешним факторам РІ решении задачи РјРѕР¶РЅРѕ отнести случайные события, которые РїСЂРѕРёСЃС…РѕРґСЏС‚ РІ РїСЂРёСЂРѕРґРµ или РїСЂРё протекании каких либо физических процессов. Р’ нашем случае это может быть сопротивление РІРѕР·РґСѓС…Р°, порыв ветра, интенсивность горения РїРѕСЂРѕС…Р°, влажность Рё С‚.Рґ. РР· всех случайных величин рассмотрим только сопротивление РІРѕР·РґСѓС…Р°.В В В В
Учитывая то, что сопротивление РІРѕР·РґСѓС…Р° направленно РІ противоположную сторону движения тела [4], то силу сопротивления РјРѕР¶РЅРѕ представить РІ РІРёРґРµ РґРІСѓС… составляющих: вертикальной Рё горизонтальной, РїСЂРё этом, чем выше скорость, тем больше сопротивление Рё наоборот.В В В В
Выделим блок программы (Приложение 2) с 100-го кадра:
100 q = .0005
В В t = t + q
В В s = v * t * COS(f) * 2В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В (4.1)
  h = (v * t * SIN(f) – (g * t ^ 2) / 2) * 5.5                                                         (4.2)
Запишем составляющие горизонтальной и вертикальной скорости:
vs=v*cos(f)
vh=v*sin(f)
  Но если пренебречь, тем что с высотой плотность воздуха падает и считать ее в нижних слоях атмосферы неизменной, то упрощенная формула горизонтальной и вертикальной составляющей, в соответствии с законом Аэродинамики [ 4 ], примет вид [ 5 ]:






Тогда выражение 4.1 и 4.2 можно изменить записав блок с 100-го кадра в следующем виде:
В В В В В В В В 100 q = .0005
В В В t = t + q
В В В k = .0002
В В В 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)В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В (4.3)
LINE (x2, y2)-(x0 + s / 20, y0 - h / 25), 14
В В В x2 = x0 + s / 20
В В В y2 = y0 - h / 25
В IF h
В GOTO 100
Где к - коэффициент сопротивления воздуха, который подбирается экспериментальным путем и может быть изменен в соответствии с условиями задачи, причем для вертикальной и горизонтальной составляющей может быть введен свой коэффициент, а выражение (4.3) обеспечивает пересчет скорости используя корень квадратного выражения.
Кроме этого, для большей информационности, выведем на экран значение скорости, высоты, дальности и времени:
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, 12: PRINT v
LOCATE 1, 28: PRINT t
LOCATE 2, 12: PRINT h
LOCATE 2, 28: PRINT s
Причем, первую половину необходимо разместить в программе до 80-й строки (кадра), а вторую в конце тела цикла.
Полностью программа представлена в приложении 3. Следует обратить внимание на то, что значения коэффициентов k и q в приложении 3 изменены для большей реалистичности полета ядра, так как часть ресурсов компьютера задействована для отображения текущих параметров, а выводимые значения высоты h и дальности s делятся на 5,5 и 2 соответственно для соблюдения масштаба.
 К случайным событиям можно отнести и роль оператора на ход решения задачи. В данном случае изменим угол полета ядра уже в ходе решения задачи.
Что бы иметь возможность в процессе работы программы изменять угол стрельбы задействуем еще три функциональные клавиши F2, F3, F5, где F2 будет отвечать за подъем на один градус в верх, F3 – за один градус вниз, F5 – позволит прервать выполнение программы в любое время. Для этого в программе после выполнения подпрограммы выполнения фейерверка вставим блок:
В В 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
В В 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
В GOTO 100
200 END
В END
Приложение 2.
REM ЯДРО
5  INPUT « Ввести угол стрельбы от 5 до 80 град»; a
7В В В IF a
В В В В IF a > 80 THEN 20
В В В В GOTO 40
10 INPUT «  Угол должен быть >=5»; a
В В В GOTO 7
20 INPUT «  Угол должен быть
В В В В GOTO 7
40  INPUT «  Ввести дальность до цели от 200 до 5000 м»; l
45В В IF l
В В В В IF l > 5000 THEN 60
В В В В GOTO 70
50  INPUT «  Расстояние до цели должно быть >=200»; l
В В В В GOTO 45
60  INPUT «  Расстояние до цели должно быть
В В В В 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
В 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
В В В В IF a > 80 THEN 20
В В В В GOTO 40
10 INPUT "  Угол должен быть >=5"; a
В В В GOTO 7
20 INPUT "  Угол должен быть
В В В В GOTO 7
40  INPUT "  Ввести дальность до цели от 200 до 5000 м"; l
45В В IF l
В В В В IF l > 5000 THEN 60
В В В В GOTO 70
50  INPUT "  Расстояние до цели должно быть >=200"; l
В В В В GOTO 45
60  INPUT "  Расстояние до цели должно быть
В В В В 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
В 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
В В В В IF a > 80 THEN 20
В В В В GOTO 40
10 INPUT "  Угол должен быть >=5"; a
В В В В В GOTO 7
20 INPUT "  Угол должен быть
В В В В В GOTO 7
40  INPUT "  Ввести дальность до цели от 200 до 5000 м"; l
45В В IF l
В В В В В В В IF l > 5000 THEN 60
В В В В В В GOTO 70
50  INPUT "  Расстояние до цели должно быть >=200"; l
В В В В В В GOTO 45
60  INPUT "  Расстояние до цели должно быть
В В В В В В 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
В В В В В В В В В 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
END