- •Оглавление
- •Глава 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 1. 53
Модифицировать программу "мячик в коробке":
1. Задать лабиринт в виде прямоугольника, содержащего
три вытянутых прямоугольника со стенками разного цвета.
Частота звука при отражении мяча от стенки должна зависеть от цвета стенки.
2. Задать лабиринт в виде прямоугольника содержащего две наклонные линии. Увеличивать на 0.02,с. задержку движения мяча после каждого удара о стенку.
Запрограммировать движение двух мячей разного цвета в лабиринте. Замедлять движение мячей, увеличивая задержку на 0.001,с. после каждого шага рисования мячей.
87
1. 15. 3. Рисование геометрических фигур
1. 15. 3. 1. Построение заполненных фигур
Ряд графических процедур выполняет построение заполненных фигур - фигур с замкнутым контуром, автоматически заполняемых сразу после построения. По умолчанию заполнение производится сплошным белым цветом. Цвет и стиль (орнамент) заполнения можно устанавливать из стандартного набора BGI или определять самим.
SetFillStyle(P, N); - процедура установки орнамента P=0, 1, . . . , 12 и
цвета с номером "N" для заполняемых фигур.
P = 0 - сплошное заполнение цветом фона, при этом значение "N" игнорируется,
P = 1 - сплошное заполнение цветом с номером "N",
P = 2. . . 11 - стандартный набор орнаментов BGI,
P = 12 - орнамент и цвет определяет пользователь.
SetFillPattern(PP, N); - процедура установки орнамента пользователя PP
и цвета с номером "N" для заполняемых фигур.
Параметр PP имеет тип FillPatternType или array [1. . 8] of byte. Байт состоит из восьми битов и соответствует ряду из 8 пикселов, т. е. параметр РР определяет элемент орнамента размером 8*8 пикселов (восемь рядов по восемь пикселов). Если бит равен 1, то пиксел высвечивается заданным цветом, если бит равен 0 - текущим цветом фона.
Пример орнамента в виде буквы Y:
№ элемент двоичные шестнадцатеричные
байта орнамента числа числа
1 1 0 0 0 0 0 0 1 $81
2 1 1 0 0 0 0 1 1 $C3
3 0 1 1 0 0 1 1 0 $66
4 0 0 1 1 1 1 0 0 $3C
5 0 0 0 1 1 0 0 0 $18
6 0 0 0 1 1 0 0 0 $18
7 0 0 0 1 1 0 0 0 $18
8 0 0 0 1 1 0 0 0 $18
Шестнадцатеричные цифры соответствуют двоичным тетрадам цифр:
0000 - 0 0100 - 4 1000 - 8 1100 - С
0001 - 1 0101 - 5 1001 - 9 1101 - D
0010 - 2 0110 - 6 1010 - A 1110 - E
0011 - 3 0111 - 7 1011 - B 1111 - F
Причем, двоичное число разбивается на тетрады цифр с конца числа, а шестнадцатеричное число получается заменой каждой тетрады соответствующей цифрой с добавлением в начале числа символа "$".
88
Орнамент удобно задавать, используя переменные с начальным значением (типизированные константы), например:
{оператор описания:}
Const Bukva_Y: FillPatternType=($81,$C3,$66,$3C,$18,$18,$18,$18 );
{оператор выполнения:} SetFillPattern(Bukva_Y, 4);
Можно добавлять один орнамент к другому используя логические операции, например, A и B - исходные орнаменты, Z - результирующий орнамент. Тогда:
Z:= A and B; - орнамент из совпадающих единичных частей исходных орнаментов,
Z:= A or B; - орнамент с добавлением единичных частей исходных орнаментов,
Z:= A xor B; - орнамент из несовпадающих единичных частей исходных орнаментов,
Z:= not A; - орнамент инверсный (обратный) к исходному орнаменту.
Z:= A xor A; - обнуление, Z:= A xor (not A); - сплошное заполнение орнамента.
Приведем процедуры построения заполненных установленным орнаментом фигур. Граница заполняемых фигур рисуется текущим цветом для линий.
Bar(X1, Y1, X2, Y2); - построить заполненный прямоугольник с заданными
координатами левого верхнего (X1, Y1) и правого
нижнего (X2, Y2) углов. Аналог процедуры: Rectangle(X1, Y1, X2, Y2);.
Bar3d(X1, Y1, X2, Y2, d, t); -построить параллелепипед с заполненной
передней гранью. Координаты углов: (X1, Y1), (X2, Y2), глубина "d". Переменная "t" типа boolean задает вывод верхней грани. При t=TopOn (true) верхняя грань показывается, при t=TopOff (false) - нет.
FillEllipse(X, Y, RX, RY); - построить заполненный эллипс с центром в
точке (X, Y) и радиусами ( полуосями ) :
RX - по горизонтали, RY - по вертикали.
Sector(X, Y, A1, A2, RX, RY); - построить заполненный сектор эллипса.
A1 и A2 - начальный и конечный углы (в градусах), отсчитываемые против часовой стрелки относительно направления оси Х. Аналог процедуры: Ellipse(X, Y, A1, A2, RX, RY); строит сектор эллипса без автоматического заполнения.
PieSlice(X, Y, A1, A2, R); - построить заполненный сектор круга с
центром в точке (X, Y) и радиусом R. Аналог процедуры: Arc(X, Y, A1, A2, R); строит дугу окружности.
FillPoly(N, M); - заполнить произвольную плоскую фигуру с границей,
описанной массивом точек. N - число точек границы,
М - параметр - переменная типа PointType, определяемая в модуле Graph в виде:
TYPE PointType = Record x, y: Integer End; В программе массив можно описать операторами: Const N=100; Var M: array[1..N] of PointType;
Присвоение значений можно провести в цикле:
For i:=1 to 3 do begin M[i].x:=random(95); M[i].y:=random(95) end;
Приведем пример программы, выводящей два прямоугольника с орнаментами пользователя (bukva_Y и Red_50), а затем демонстрирующей набор стандартных орнаментов на передней грани параллелепипедов:
89
uses Graph; Сonst
bukva_Y: FillPatternType=($81, $C3, $66, $3C, $18, $18, $18, $18);
Red_50: FillPatternType=($AA, $55, $AA, $55, $AA, $55, $AA, $55);
var i, x1, y1, x2, y2, Gd, Gm : integer;
Begin Gd:= Detect; InitGraph(Gd, Gm, '_');
SetFillPattern(Red_50, Red); { орнамент - 50% красных пикселов }
Bar(250, 10, 350, 110);
SetFillPattern(bukva_Y, Blue); { орнамент - синяя буква "Y" }
Bar(340, 30, 440, 130);
{ стандартный набор из 12 орнаментов BGI выводим цветом с номером "11" }
for i:=0 to 11 do begin SetFillStyle(i, 11);
if i<6 then begin x1:=90*i; y1:=150 end
else begin x1:=90*(i-6); y1:=270 end;
x2:=x1+70; y2:=y1+80;
Bar3d(x1, y1, x2, y2, 10, TopOn) end;
ReadLn; CloseGraph
End.
Заполняя не черный экран орнаментом Red_50, можно получить новые цвета фона.
Выбранным из стандартных или определенным орнаментом можно заполнить любую замкнутую область с границей цвета "N" оператором
FloodFill(X, Y, N);
Заполнение начинает производится из точки X, Y и ограничивается при достижении границы цвета с номером "N". Например: Rectangle(x1, y1, x2, y2); FloodFill((x1+x2) div 2, (y1+y2) div 2, Red); Если область не замкнута или цвет границы не равен "N", то заполнение "разольется" по экрану.