- •Информатика
- •Введение
- •1. Особенности вычислительного процесса в компьютере
- •1.1. Двоичная система счисления
- •1.2. Кодирование информации
- •2. Основы построения алгоритмов
- •2.1. Принципы описания алгоритмов
- •2.2. Примеры построения алгоритмов типовых задач
- •3. Вывод значений X и y
- •Конец цикла 2
- •3. Алгоритмический язык Visual Basic – основные сведения
- •3.1. Историческая справка
- •3.2. Среда программирования Visual Basic 6.0
- •3.3. Основные конструкции языка
- •3.3.1. Алфавит
- •3.3.2. Переменные
- •3.3.3. Константы
- •3.4. Типы переменных
- •3.4.1. Характеристики переменных
- •3.4.2. Способы задания типа
- •3.5. Основные функциональные операторы
- •3.5.1. Оператор присваивания.
- •3.5.2. Оператор условного перехода.
- •3.5.3. Операторы цикла.
- •3.6. Операторы ввода и вывода информации
- •3.6.1. Операторы ввода значений переменных с клавиатуры.
- •3.6.2. Операторы вывода значений переменных на экран.
- •3.7. Примеры типовых программ
- •4. Алгоритмический язык Visual Basic – более сложные структуры
- •4.1. Файловый ввод и вывод - общие сведения
- •4.2. Организация работы с файлом.
- •4.3. Подпрограммы и их использование для написания сложных программ
- •4.3.1. Назначение подпрограмм
- •4.3.2. Типы подпрограмм
- •4.3.3. Локальные переменные формы
- •5. Операторы и функции, работающие с символьными данными
- •5.1. Ввод символов с целью управления действиями
- •5.2. Функции, работающие с таблицей ascii-кодов
- •5.3. Функции, работающие со строкой символов
- •6. Графика
- •6.1. Воспроизведение цвета
- •6.2. Операторы (Методы) изображения стандартных фигур
- •6.3. Программирование движения фигур на экране.
- •9. Математические вычисления и встроенные функции.
6.3. Программирование движения фигур на экране.
Этих недостатков лишена программа, использующая для движения произвольной фигуры оператор DRAW. Движение фигуры происходит по приведенному ниже алгоритму.
1. Задать начальные координаты положения фигуры.
2. Нарисовать фигуру заданными цветами.
3. Вычислить новые координаты и новый угол поворота.
4. Нарисовать ту же фигуру фоновым цветом в старых координатах (то есть стереть).
5. Перейти к пункту 2, пока не выполнено условие конца движения.
Очевидно, что в пункте 4 сделано стирание старого изображения фигуры.
9. Математические вычисления и встроенные функции.
Для выполнения математических вычислений при реализации программ в среде языка Quick Basic 4.5 имеются так называемые встроенные функции. Вызываются они по имени с указанием аргумента в скобках. Различаются математические функции, функции обработки данных и некоторые специальные функции.
В математических функциях аргументом x может быть число, имя переменной или алгебраическое выражение.
Среди математических функций имеются следующие:
ABS(x) - абсолютное значение x,
EXP(x) – показательная функция e в степени x,
LOG(x) – натуральный логарифм x,
SGN(x) – знак x (результатом является +1,-1 или 0),
SQR(x) – квадратный корень из x,
SIN(x) – синус х,
COS(x) – косинус х,
TAN(x) – тангенс х,
ATN(x) – арктангенс х.
Остальные тригонометрические функции вычисляются по известным формулам тригонометрии. Нужно помнить, что аргументом тригонометрической функции является угол в радианах. Если угол в задаче задан в градусах, его можно преобразовать в радианы, умножив на /180. Для обратного перевода угол в радианах нужно умножить на 57.2958.
Рассмотрим в качестве примера решение следующей задачи.
Пример 9.1. Расчет и изображение траектории снаряда.
Траектория снаряда, вылетающего из орудия под углом a с начальной скоростью v, описывается уравнениями:

где
g=9.8 m/c2 – ускорение свободного падения,
t – текущее время.
Вводя n заданных пар a и v, определить, сколько снарядов попадет в вертикальную цель размером P, расположенную на расстоянии R от точки старта и на высоте h. Кроме этого расчета требуется показать траектории полета снарядов на экране.
CLS
SCREEN 9 ‘Задается графический режим экрана.
WINDOW (0, 0)-(640, 320)
DIM x(100), y(100) ‘Выделяется память под массивы x() и y().
‘Задается число выстрелов n и интервал времени dt
‘для определения моментов фиксации координат снаряда.
g = 9.8: n = 10: dt = .1 ‘Задается число выстрелов n и интервал времени dt
‘для определения моментов фиксации координат снаряда.
DIM a(n),v(n) ‘Пары (a,v) задаются массивами.
p = 100: h = 500: R = 1000 ‘Задаются размер p и положение R,h цели,
mx = .5: my = .4 ‘а также масштабы, переводящие численные значения
‘координат в экранные расстояния в пикселах.
‘Открывается файл данных для ввода пар a(i),v(i).
OPEN "c:\qb45\inp1.bas" FOR INPUT AS #1
‘Проводится линия, изображающая цель.
LINE (R * mx, h * my)-(R * mx, (h + p) * my)
count = 0 ‘Это счетчик числа снарядов, попавших в цель.
FOR i = 1 TO n ‘Это цикл, где индекс i означает номер очередного снаряда.
t = 0 ‘Это момент старта (время t обнуляется).
m(i) = 0 ‘Это счетчик точек i-го снаряда для построения графика траектории.
‘Вводятся значение угла a(i) и скорости v(i) для очередного снаряда.
INPUT #1, a(i), v(i)
a1 = (a(i) / 180) * 3.141592 ‘Перевод угла в градусах в радианы.
‘Это цикл, в котором течет время и изменяются координаты очередного i-го снаряда.
FOR j = 1 TO 100
t = t + dt
m(i) = m(i) + 1
x(j) = v(i) * t * COS(a1)
y(j) = v(i) * t * SIN(a1) - g * t ^ 2 / 2
IF x(j) > R THEN EXIT FOR ‘Если координата х больше расстояния до цели R,
‘то полет заканчивается.
‘Иначе продолжается построение траектории (переход к началу цикла j).
NEXT j
‘Траектория построена, проверяется условие попадания в цель: высота снаряда ‘y(i) должна быть больше нижней границы цели h и меньше верхней h+p.
‘ Если эти условия соблюдаются, к счетчику попавших снарядов
‘count добавляется единица.
IF y(j) >= h AND y(j) <= h + p THEN
count = count + 1
end if
FOR j = 1 TO m(i) – 1 ‘Это цикл для построения траектории i-го снаряда на экране.
LINE (x(j)*mx, y(j)*my)-(x(j+1)*mx, y(j + 1)*my)
NEXT j
NEXT i ‘Переход к следующему номеру снаряда (то есть к началу цикла i).
‘Все снаряды выпущены. Выводится число попавших в цель снарядов.
LOCATE 5, 2
PRINT " count= "; count
END
При решении задач, связанных с моделированием некоторых физических процессов, иногда требуется получить последовательность случайных чисел. Для этой цели служит функция RND. Функция RND выбирает одно число из так называемой таблицы случайных чисел, хранящейся в памяти компьютера в неизменном виде.
Выбранное число имеет значение от 0 до 1 обычной точности (то есть семь знаков). Чтобы получить случайное число от 0 до 1, например, в переменной Е, нужно записать:
E = RND (n), где n – любое положительное число.
При фиксированном значении n функция RND воспроизводит одну и ту же последовательность чисел с начала запуска программы.
Если требуется менять эту последовательность при новом запуске программы, нужно использовать генератор случайных чисел. Генератор вызывается как RANDOMIZE t и представляет собой вычислительную процедуру, которая использует некоторое начальное число t для образования случайного числа n. Последнее используется функцией RND для выбора очередного случайного числа из таблицы. При этом аргумент n не указывается. Однако число t должно быть различным при каждом обращении к генератору. Для этого на место t ставится слово TIMER, которое является функцией, выдающей число секунд с начала суток. В качестве примера использования функции RND приведена следующая ниже программа.
Пример 9.2. Генерация группы случайных чисел.
CLS
RANDOMIZE TIMER ‘Вызов генератора случайных чисел.
DO
PRINT TIMER
FOR i = 1 TO 14 ‘Вывод на экран 14-и случайных чисел.
PRINT RND;
NEXT i
a$ = INPUT$(1) ‘Повторение вывода по запросу.
LOOP WHILE a$ <> "y"
END
Как сказано выше, функция RND выдает число от 0 до 1. Если в решаемой задаче требуется использовать случайные числа r, находящиеся в интервале [a,b], то нужно включить в программу следующий расчет: r=a+(b–a)*E, где через Е, как и раньше, обозначено случайное число в интервале [0,1], полученное от функции RND.
Пример 9.3. Моделирование выбрасывания двух кубиков, на каждом из которых выпадает число от 1 до 6.
RANDOMIZE TIMER
CLS
DO
E1 = RND ‘Первое случайное число от 0 до 1
r1 = 1 + INT(6 * E1) ‘Число на первом кубике
E2 = RND ‘Второе случайное число от 0 до 1
r2 = 1 + INT(6 * E2) ‘Число на втором кубике
PRINT "выпало "; r1; " и "; r2; ": summa "; r1 + r2
INPUT "еще? y/n ", cont$
LOOP WHILE cont$ = "y" ‘Повторение по запросу
END
Заметим, что числа на гранях кубика целые, а числа Е1 и Е2 имеют дробную часть. Для округления использована функция INT, округляющая в меньшую сторону. Поэтому числа Е1 и Е2 умножены не на 5, как это следует из общей формулы, а на 6. Иначе грань с цифрой 6 никогда не выпадет, так как Е1 и Е2 меньше единицы, хотя могут быть как угодно близки к ней. В то же время эти числа могут быть близки к нулю. Поэтому нижняя граница чисел r1 и r2 сделана равной 1.
