- •Оглавление
- •Глава 1. Алгоритмический язык Турбо-Паскаль 3
- •Глава 2. Программирование в среде Турбо - Паскаль 112
- •Глава 1. Алгоритмический язык Турбо-Паскаль
- •1. 1. Общие сведения
- •1. 2. Среда Турбо-Паскаль
- •1. 3. Структура языка Турбо-Паскаль
- •1. 4. Типы переменных
- •Практическое задание n 1. 1
- •1. 5. Структура программы
- •1. 6. Операции и стандартные функции
- •1. 7. Операторы Турбо-Паскаля
- •Составной оператор Begin "операторы" end;
- •1. 7. 1. Операторы ввода/вывода данных
- •Операторы вывода данных на экран Write("сп"); или Writeln("сп");
- •Практическое задание n 1. 2
- •Практическое задание n 1. 3
- •1. 7. 2. Оператор выбора
- •0..9: Writeln('однозначное');
- •1. 7. 3. Условный оператор
- •If "условие" Then "оператор1" Else "оператор2";
- •Практическое задание n 1. 5
- •Практическое задание n 1. 6
- •Практическое задание n 1. 7
- •Практическое задание n 1. 8
- •1. 7. 4. Оператор цикла с параметром
- •Практическое задание n 1. 9
- •Практическое задание n 1. 10
- •Практическое задание n 1. 11
- •Практическое задание n 1. 12
- •Практическое задание n 1. 13
- •Практическое задание n 1. 14
- •1. 7. 5. Операторы цикла с условием
- •Практическое задание n 1. 15
- •Практическое задание n 1. 16
- •1. 7. 6. Операторы ограничения и прерывания цикла
- •1. 7. 7. Оператор перехода к метке
- •1. 8. Блок - схемы алгоритмов
- •1. 9. Составление диалоговых программ
- •Практическое задание n 1. 17
- •1. 10. 1. Линейные массивы
- •Практическое задание n 1. 18
- •Практическое задание n 1. 19
- •Практическое задание n 1. 20
- •Практическое задание n 1. 21
- •1. 10. 2. Работа с элементами переменной строкового типа
- •Практическое задание n 1. 22
- •1. 10. 3. Двумерные массивы
- •2 S[2] Массив a: a[2, 1] a[2, 2] a[2, 3] a[2, 4] . . . A[2, j] . . . A[2, m]
- •Практическое задание n 1. 23
- •1. 10. 4. Создание баз данных с использованием массивов записей
- •Практическое задание n 1. 23
- •1. 10. 5. Работа с большими массивами
- •Практическое задание n 1. 25
- •1. 11. Текстовые файлы
- •Практическое задание n 1. 26
- •Практическое задание n 1. 27
- •1. 12. Разработка функций и процедур
- •1. 12. 1. Описание функций и процедур
- •Viz(Dat); { вызов процедуры } Readln end.
- •Практическое задание n 1. 28
- •Практическое задание n 1. 29
- •Практическое задание n 1. 30
- •1. 12. 2. Рекурсивные функции и процедуры
- •Практическое задание n 1. 31
- •Практическое задание n 1. 32
- •1. 13. Разработка модулей
- •Практическое задание n 1. 33
- •1. 14. Модуль сrt
- •1. 14. 1. Управление экраном в текстовом режиме
- •InsLine; Вставка пустой строки.
- •1. 14. 2. Управление клавиатурой
- •Практическое задание n 1. 34
- •Практическое задание n 1. 35
- •Практическое задание n 1. 36
- •Практическое задание n 1. 37
- •1. 14. 3. Работа с символьными переменными
- •Практическое задание n 1. 38
- •Практическое задание n 1. 39
- •Практическое задание n 1. 40
- •Практическое задание n 1. 41
- •Практическое задание n 1. 42
- •1. 14. 4. Работа со строковыми переменными
- •Практическое задание n 1. 43
- •1. 14. 5. Управление звуковыми сигналами
- •Практическое задание n 1. 44
- •Практическое задание n 1. 45
- •1. 15. Модуль Graph
- •1. 15. 1. Инициализация графического режима
- •1. 15. 2. Простейшие графические процедуры и функции
- •Практическое задание n 1. 46
- •Практическое задание n 1. 47
- •Практическое задание n 1. 48
- •Практическое задание n 1. 49
- •Практическое задание n 1. 50
- •Практическое задание n 1. 51
- •Практическое задание n 1. 52
- •Практическое задание n 1. 53
- •1. 15. 3. Рисование геометрических фигур
- •1. 15. 3. 1. Построение заполненных фигур
- •Практическое задание n 1. 54
- •1. 15. 3. 2. Работа с линиями
- •Практическое задание n 1. 55
- •Практическое задание n 1. 55
- •Практическое задание n 1. 56
- •1. 15. 3. 3 Создание графических узоров
- •1. Перемещение фигуры.
- •Практическое задание n 1. 56
- •2. Масштабирование фигуры.
- •Практическое задание n 1. 57
- •3. Симметричное отображение фигуры.
- •Практическое задание n 1. 58
- •4. Штриховка углов.
- •Практическое задание n 1. 59
- •5. Использование рекурсии.
- •Практическое задание n. 1. 60
- •Практическое задание n . 1. 61
- •6. Создание узоров построением зеркальных отображений фигуры.
- •Практическое задание n 1. 61
- •1. 15. 3. 4. Работа с текстом в графическом режиме
- •Практическое задание n 1. 62
- •1. 15. 5. Мультипликация
- •1. 15. 5. 1. Мультипликация с запоминанием части экрана
- •Практическое задание n 1. 63
- •1. 15. 5. 2. Мультипликация с чередованием видеостраниц
- •Практическое задание n 1. 64
- •1. 15. 5. 3. Мультипликация с управлением движения образа
- •Практическое задание n 1. 65
- •1. 15. 5. 4. Модификация контурного изображения
- •Практическое задание n 1. 66
- •Глава 2. Программирование в среде Турбо-Паскаль
- •2. 1. Геометрические построения на плоскости
- •2. 1. 1. Построение графиков функций
- •Практическое задание n 2. 1
- •Var right, left, down, up: integer; k_xy, kx, ky, x_max, x_min, y_max, y_min: double; { описание глобальных переменных }
- •Практическое задание n 2. 2
- •Практическое задание n 2. 3
- •Практическое задание n 2. 4
- •Практическое задание n 2. 5
- •12 Строфоида a*Cos(2*fi)/Cos(fi) 0,1 ... 1,5 -3 -2 1 -
- •13 Циссоида a*Sin2(fi)/Cos(fi) 0,1 ... 1,5 -1 1 2 -
- •2. 1. 2. Графическое решение уравнений
- •Практическое задание n 2. 6
- •2. 1. 3. Уравнение прямой на плоскости
- •Практическое задание n 2. 7
- •2. 1. 4. Построение касательных и нормалей к плоским кривым
- •Практическое задание n 2. 8
- •2. 1. 5. Двумерные преобразования координат
- •Практическое задание n 2. 9
- •2. 1. 6. Проецирование пространственного изображения тела на плоскость
- •Практическое задание n 2. 10
- •2. 2. Некоторые задачи физики
- •2. 2. 1. Механика
- •Практическое задание n 2. 11
- •Y V xПрактическое задание n 2. 12
- •Практическое задание n 2. 13
- •Практическое задание n 2. 14
- •Практическое задание n 2. 15
- •Практическое задание n 2. 16
- •Практическое задание n 2. 17 X
- •Практическое задание n 2. 18 y
- •2. 2. 2. Оптика и свет
- •Практическое задание n 2. 19
- •Практическое задание n 2. 20
- •2. 2. 3. Электростатика и электромагнетизм
- •Практическое задание n 2. 21
- •2. 3. Математическое моделирование физических процессов
- •Практическое задание n 2. 22
- •Практическое задание n 2. 23
- •Практическое задание n 2. 24
- •Практическое задание n 2. 25
- •Практическое задание n 2. 26
- •2. 4. Моделирование многовариантных задач с использованием графов
- •Практическое задание n 2. 27
- •2. 5. Программы математических расчетов
- •2. 5. 1. Численное решение уравнений
- •Практическое задание n 2. 28
- •Практическое задание n 2. 29
- •2. 5. 2. Аппроксимация по методу наименьших квадратов
- •Практическое задание n 2. 30
- •2. 5. 3. Численный расчет интегралов
- •Практическое задание n 2. 31
- •Практическое задание n 2. 32
- •2. 5. 4. Сортировка одномерных массивов
- •Практическое задание n 2. 33
- •Практическое задание n 2. 34
- •Список литературы
Практическое задание n 2. 22
Рассчитать разностным моделированием и по аналитической зависимости траектории точки. Параметр a = 10, b = 5, 0<= t <=4*pi, N=500. Построить траектории точки.
N X1 Y1 Vx1 Vy1 Axi Ayi X(t) Y(t)
1 0 0 0 b 2*a -y a*t2 b*sin(t)
2 0 0 a b 0 -y a*t b*sin(t)
3 1 0 1 1 -2*y 2*x et* cos(t) et*sin(t)
4 a 0 0 0 -x x*b/a a* cos(t) b*(1-cos(t))
5 a b 0 0 -4*x y a* cos(2*t) b*cos(t)
6 0 0 0 b 2*a 0 a*t2 b*t
7 2*a 0 0 a x 0 a*(et + e-t) a*t
8 0 b a 0 -x -y a* sin(t) b*cos(t)
Y
V
F, *
V0
g
fi
0 X
Рассмотрим задачу расчета траектории снаряда, движущегося с начальной скоростью "V0" под углом "fi" к горизонту с учетом сил сопротивления воздуха, пропорциональных скорости снаряда. Проекции ускорений определим в виде функций:
FUNCTION Fx(Vx, kc: real): real; begin Fx:= - kc*Vx end;
FUNCTION Fy(Vy, kc: real): real; begin Fy:= - kc*Vy - g end;
Где kc - коэффициент сопротивления воздуха,
g = 9. 81, м/с - ускорение свободного падения у поверхности Земли.
Поскольку время подлета снаряда к цели неизвестно, то параметр "dt" выбирается приближенно, например, исходя из максимального времени полета снаряда над горизонтальной поверхностью без учета сопротивления воздуха: tмах= 2*V*sin(fi)/g. Для N = 500, dt = t/500. При решении конкретных задач процесс расчета прекращается при достижении снарядом цели, либо при ограничениях по статическим координатам, например:
i:= 1;
REPEAT i:=i+1;
{операторы расчета массивов скорости, ускорения и координат точки }
Until ( cc = GetPixel_G(X[i], Y[i])) or ( Y[i] < 0 ) or ( i = N );
Здесь cc - цвет пикселов цели, Y[i] < 0 - ограничение по горизонтальной поверхности, i = N - ограничение по размеру массива. В случае преждевременного завершения полета снаряда необходимо увеличить dt или параметр N.
Практическое задание n 2. 23
1. Рассчитать разностным моделированием и по аналитической зависимости траектории полета снаряда без учета сопротивления воздуха. Построить траектории полета снаряда. Начальная скорость V0=1000, м/с, угол fi=450. Аналитическая зависимость имеет вид:
X = V0*t*cos(fi); Y = V0*t*sin(fi) - g*t2/2;
2. Рассчитать разностным моделированием и по аналитической зависимости траектории полета снаряда с учетом сопротивления воздуха, пропорциональным скорости снаряда. Построить траектории полета снаряда. Начальная скорость V0=3000, м/с, угол fi = 450. Коэффициент сопротивления воздуха kc = 0. 01,с-1.
Аналитическая зависимость имеет вид:
X=V0*cos(fi)*(1-e(-kc*t))/kc; Y=(V0*sin(fi)+g/kc)*(1-e(-kc*t))/kc-g*t/kc;
3. Рассчитать разностным моделированием траектории полета снаряда с учетом сопротивления воздуха, пропорциональным квадрату скорости снаряда. Коэффициент сопротивления воздуха kc1 = kc2 . Построить совместно траектории полета снаряда для п. 1, 2, 3. Начальная скорость V0 = 3000, м/с, угол fi = 450.
4. Составить программу поражения неподвижной цели при kc1 = kc2. Изменяя в цикле угол fi на небольшую величину, определить в программе угол при котором будет поражена цель - небольшой прямоугольник с координатами вершин (x1, y1) и (x2, y2). Построить все траектории полета снаряда.
Примечание к п. 1. . 4: Выводить на экран исходные данные: V0, fi, kc, а также наибольшую высоту и дальность полета снаряда.
Рассмотрим задачу расчета траектории космического тела, в поле тяготения планеты без учета сил сопротивления. В начальный момент времени тело движется на высоте "Н" со скоростью "V0", направленной по касательной к окружности радиуса R0. Поскольку движение спутника вокруг планеты достаточно продолжительно, то не целесообразно запоминать в оперативной памяти все параметры (координаты, скорости и ускорения) в каждый момент времени. Обычно эти параметры, записываются в файл на диск при вычислениях через некоторые моменты времени, а траекторию строят сразу, либо запуская отдельную программу, считывающую данные из файла. Расчетная область задается исходя из оценочных расчетов. Для спутника, движущегося вокруг Земли, можно принять:
Xmin= Ymin= -Kv*R0, Xmax= Ymax= Kv*R0,
Здесь R0 = (Rz+H), Rz=6. 37*106, м. - радиус Земли.
Kv=1. 5 при V0 <= W1; Kv=10 при W1 < V0 < W2; Kv=20 при V >= V2.
W1 = Rz*(g/R0) - первая космическая скорость,
W2 = 2* W1 - вторая космическая скорость.
Параметр "dt" можно определить приближенно по формуле: dt=T/N,
где T= 6. 28*Rz/W1 - время оборота спутника вокруг Земли, N=300.
Расстояние от спутника до центра планеты определяется через координаты:
function R(x, y: double): double; begin R:= sqrt(x*x + y*y) end;
Проекции ускорений определим в виде функции:
function FA(x,r,kz: double):double; begin FA:= -kz*x/(r*r*r) end;
Здесь kz = 4. E+14 для Земли (в системе СИ).
Пусть в начальный момент времени известны координаты спутника:
x1 = R0; y1 = 0; r1 = R(x1, y1);
скорость: Vx1 = 0; Vy1 = V0;
и ускорение: Ax1 = FA(X1, r1, kz); Ay1 = FA(Y1, r1, kz);
Отметим, что скорость в начальный момент времени направлена по касательной к окружности радиуса r1.
Для записи алгоритма расчета траектории необходимо знание параметров в двух соседних точках, например, в точке "1" - для предшествующего момента времени и в точке "2" - для расчетного момента времени. Расчет производим в цикле с одновременным выводом траектории движения спутника на экран до тех пор пока выполняется ограничение по радиусу траектории или не нажата любая клавиша.
While ( r1< Xmax ) or ( r1> Rz ) or ( not keyPressed ) do begin
Vx2:= Vx1 + Ax1*dt; Vy2:= Vy1 + Ay1*dt;
X2:= X1 + 0.5*(Vx1 + Vx2)*dt;
Y2:= Y1 + 0.5*(Vy1 + Vy2)*dt; r2:= R(x2, y2);
Ax2:=FA(X2, r2, kz);
Ay2:=FA(Y2, r2, kz);
Vx2:= Vx1 + 0.5*(Ax1 + Ax2)*dt; { уточняем скорость }
Vy2:= Vy1 + 0.5*(Ay1 + Ay2)*dt;
{ Переопределяем значения параметров в точке }
x1:= x2; y1:= y2; r1:= r2;
Vx1:= Vx2; Vy1:= Vy2; Ax1:= Ax2; Ay1:= Ay2
PutPixel_G(x1,y1,c); { Строим траекторию движения точки, c - цвет точки }
end;