- •Оглавление
- •1. 2. Среда Турбо-Паскаль
- •1. 3. Структура языка Турбо-Паскаль
- •1. 4. Типы переменных
- •Var a1, a2 : array [ 1 . . 1000 ] of real ;
- •Var m1: array[1..200] of integer; a1: array[100..200] of real;
- •Var t1,t2:Date_m; c1:Ruch_b; s1:Lat_b; a1,a2:Otmetka; b:Ball;
- •1. 5. Структура программы
- •1. 6. Операции и стандартные функции
- •1. 7. Операторы Турбо-Паскаля
- •Составной оператор Begin "операторы" end;
- •1. 7. 1. Операторы ввода/вывода данных
- •Операторы вывода данных на экран Write("сп"); или Writeln("сп");
- •X1, y1, z1: integer; xb, yb, zb: boolean;
- •Var n, X, y: real;
- •1. 7. 2. Оператор выбора
- •0..9: Writeln('однозначное');
- •1. 7. 3. Условный оператор
- •If "условие" Then "оператор1" Else "оператор2";
- •Var V : integer; Then
- •If Writeln(a2)
- •1. 7. 4. Оператор цикла с параметром
- •Var a, s, Sn, I, n: word;
- •Var s, Sn, pr: real; I, n: integer;
- •Var y, X, a, dx: real; I, j: integer;
- •Var a1, a2, n1, s, g: longint; bb: boolean;
- •1. 7. 5. Операторы цикла с условием
- •Var y, y1, X, eps, a, k: real; n: Word;
- •1. 7. 6. Операторы ограничения и прерывания цикла
- •1. 7. 7. Оператор перехода к метке
- •Var b, a: longint;
- •1. 8. Блок - схемы алгоритмов
- •1. 9. Составление диалоговых программ
- •Var I, n, n1: integer;
- •1. 10. Массивы
- •1. 10. 1. Линейные массивы
- •1. 10. 2. Работа с элементами переменной строкового типа
- •1. 10. 3. Двумерные массивы
- •Var a: array[1..30, 1..7] of byte;
- •2 S[2] Массив a: a[2, 1] a[2, 2] a[2, 3] a[2, 4] . . . A[2, j] . . . A[2, m]
- •1. 10. 4. Создание баз данных с использованием массивов записей
- •I: byte;
- •1. 10. 5. Работа с большими массивами
- •I, j: word;
- •1. 11. Текстовые файлы
- •Var c: char; j, I: word;
- •1. 12. Разработка функций и процедур
- •1. 12. 1. Описание функций и процедур
- •Viz(Dat); { вызов процедуры } Readln end.
- •Var z: r_1000; x1, x2: real; n: word;
- •Var X: m_30х30_r; I, j, n, m: byte;
- •Var a, b, c, ha, hb, hc: real;
- •Var p, s: real;
- •Var y, y1, x1: real;
- •Var a, k, y: real; I: longint;
- •1. 12. 2. Рекурсивные функции и процедуры
- •Var n_1: Longint; I: word;
- •Var ch: char; I: word;
- •Var n, n1: integer;
- •1. 13. Разработка модулей
- •Interface
- •1. 14. Модуль сrt
- •1. 14. 1. Управление экраном в текстовом режиме
- •InsLine; Вставка пустой строки.
- •1. 14. 2. Управление клавиатурой
- •Var n : word; f, dx, X, y, I, j, xm, ym : byte;
- •1. 14. 3. Работа с символьными переменными
- •Var r: registers;
- •X, y, I, xm, ym: byte;
- •1. 14. 4. Работа со строковыми переменными
- •1. 14. 5. Управление звуковыми сигналами
- •1. 15. Модуль Graph
- •1. 15. 1. Инициализация графического режима
- •InitGraph(Gd, Gm, 'way');
- •1. 15. 2. Простейшие графические процедуры и функции
- •Var X, y, VX, Vy, p: array[1..N] of integer; ch: char;
- •I1, i2, zx, zy, ax, ay, I, k: integer;
- •1. 15. 3. Рисование геометрических фигур
- •1. 15. 3. 1. Построение заполненных фигур
- •Var I, x1, y1, x2, y2, Gd, Gm : integer;
- •1. 15. 3. 2. Работа с линиями
- •1. 15. 3. 3 Создание графических узоров
- •1. Перемещение фигуры.
- •2. Масштабирование фигуры.
- •3. Симметричное отображение фигуры.
- •4. Штриховка углов.
- •Var xx1, xx2, yy1, yy2, I: integer; k: real;
- •5. Использование рекурсии.
- •Var gD, gM, n, X, y, x1, y1, k: integer; dl, ugol, ugol_0, s, I: real;
- •6. Создание узоров построением зеркальных отображений фигуры.
- •Var I, j : integer;
- •Var I, j : integer;
- •1. 15. 3. 4. Работа с текстом в графическом режиме
- •Var Gd, Gm, k, X, y, Size: integer; s: string;
- •1. 15. 5. Мультипликация
- •1. 15. 5. 1. Мультипликация с запоминанием части экрана
- •Var Gd, Gm, I, j, k, Size, X, y, Xmax, Ymax: Integer;
- •1. 15. 5. 2. Мультипликация с чередованием видеостраниц
- •1. 15. 5. 3. Мультипликация с управлением движения образа
- •1. 15. 5. 4. Модификация контурного изображения
- •Var Gd, Gm, I, j, k, n, xc, yc, r, m: integer;
- •X, y, x1, y1, x2, y2: array[1..12] of integer; alfa: real;
- •Глава 2. Программирование в среде Турбо - Паскаль
- •2. 1. Геометрические построения на плоскости
- •2. 1. 1. Построение графиков функций
- •0 Left, right GetMaxX
- •Interface
- •Var right, left, down, up: integer; k_xy, kx, ky, x_max, x_min, y_max, y_min: double; { описание глобальных переменных }
- •Implementation
- •Var XX, yy: word; xg_m, yg_m:integer;
- •Var xg0, yg0:integer;
- •1 Спираль a*fi 0 ... 8 -1 1 3 -
- •4 Логарифмическая a*Exp(b*fi) -3 ... 3 -1 1 -1 0 1
- •5 Спираль a*fi2 - b -8 ... 8 -1 1 2 0 1 2
- •6 Роза a*Sin(b*fi) 0 ... 8 -1 1 2 целые и
- •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. Графическое решение уравнений
- •2. 1. 3. Уравнение прямой на плоскости
- •2. 1. 4. Построение касательных и нормалей к плоским кривым
- •2. 1. 5. Двумерные преобразования координат
- •Var z: real;
- •Var alfa: real;
- •I_r; picture;
- •2. 1. 6. Проецирование пространственного изображения тела на плоскость
- •2. 2. Некоторые задачи физики
- •2. 2. 1. Механика
- •Var x3, y3, l, Lc, sa, ca, s3, c3: double;
- •2. 2. 2. Оптика и свет
- •2. 2. 3. Электростатика и электромагнетизм
- •2. 3. Математическое моделирование физических процессов
- •2. 4. Моделирование многовариантных задач с использованием графов
- •2. 5. Программы математических расчетов
- •2. 5. 1. Численное решение уравнений
- •2. 5. 2. Аппроксимация по методу наименьших квадратов
- •2. 5. 3. Численный расчет интегралов
- •2. 5. 4. Сортировка одномерных массивов
- •Список литературы
Var I, j : integer;
ugol : real;
begin
for j:= 1 to n do begin
moveto(x[m,j],y[m,j]);{ установка курсора в m-ную точку ломаной }
for i:= 1 to m do begin { цикл рисования j-ой ломаной по m точкам }
setcolor(i mod 7+9);
lineto(x[i, j], y[i, j])
end end
end;
100
{-----------------------------------------------------------------}
{ процедура расчета координат отражений точки (x, y) относительно центра узора}
Procedure MIRROR(n, m: integer; var x, y: mas);
Var I, j : integer;
r, ugol: real; { координаты точки в полярной системе координат }
begin
for i:= 1 to m do begin
if x[i,1]<>0 then ugol:=arctan(y[i,1]/x[i,1]) else ugol:=Pi/2;
r:= sqrt(1.*x[i,1]*x[i,1]+y[i,1]*y[i,1]);
for j:= 1 to n do begin
ugol:= 4*Pi*j/n - ugol;
x[i,j]:=round(r*cos(ugol)); y[i,j]:=round(r*sin(ugol)) end
end
end;
{ ---------------------------------------------------------------- }
BEGIN Gd:= Detect; InitGraph(Gd, Gm, 'C:\tp7\bgi'); SetWriteMode(1);
xc:= GetmaxX div 2; yc:= GetmaxY div 2; { координаты центра узора }
n:= 12; { число зеркал }
m:= 10; { число узловых точек ломаной }
Rz:= 150; { длина линии зеркала }
for i:= 1 to n do begin alf:= 2. *PI*i/n;
xr:= xc + round(Rz*cos(alf));
yr:= yc - round(Rz*sin(alf));
setcolor(7); line(xr,yr,xc,yc) { построение линий зеркал }
end;
Randomize;
Repeat
for i:= 1 to m do begin {расчет координат точек исходной фигуры }
x[i,1]:= Random(200)+1; y[i,1]:= Random(100) end;
MIRROR(n, m, x, y); { расчет координат отраженных точек
в системе координат узора }
for i:= 1 to m do { расчет координат точек узора}
for j:= 1 to n do begin { в системе координат экрана }
x[i,j]:= x[i,j] + xc; y[i,j]:= y[i,j] + yc end;
UZOR(m,n,x,y); delay(1000); UZOR(m,n,x,y) { рисование узора }
Until KeyPressed; CloseGraph
END.
Практическое задание N 1. 61
1. Смоделировать детский калейдоскоп для набора из трех разноцветных "кристаллов" ( 3-х, 4-х и 5-ти угольников), размещенных в одном секторе.
2. Смоделировать калейдоскоп с 8 осями симметрии. Смещая при каждом изменении фигуры на пять пикселов диапазон задания координат "х" точек исходной ломанной (10 раз увеличивая, затем 10 раз уменьшая получить пульсирующее движение фигур.
3. Смоделировать вращение узора, полученного из отражений ломанной линии.
Смоделировать случайное перемещение узора, полученного из отражений ломанной линии. Контролировать выход узора за границу экрана.
101
1. 15. 3. 4. Работа с текстом в графическом режиме
Для вывода на экран текста в графическом режиме используются следующие процедуры:
OutText(S); -вывод строки S (типа string) в текущей позиции курсора.
OutTextXY(x,y,S);-вывод строки Sв позиции с координатами (x, y).
Строку S можно определять явно в виде символов, заключенных в апострофы, например, OutText('Sample 1');, или как переменную (константу) типа string. Если требуется вывести значение переменной числового типа, то необходимо приме-нить процедуру ее преобразования в строковый тип. Например:Str(x:10:5,S); -определяем переменную "S" (типа string), полученную преобразованием переменной "x" (вещественного типа) по указанному формату.
Перечислять несколько переменных через запятые (подобно параметрам функций write и writeln) в графических функциях вывода текста не допускается. При выводе нескольких строковых переменных они соединяются знаком "+" , например: OutText('x='+ S);
Для установки стиля вывода текста используется процедура
SetTextStyle(F, D, Z);
где F -номер шрифта, D-направление вывода надписи, Z-увеличение размера относительно базового варианта. Параметры F, D, Z-типа Word.
Шрифт в графическом режиме может создаваться двумя методами. В первом типе шрифта -матричном,берется стандартный шрифтовой набор BIOS ПК, где каждому символу соответствует матрица 8*8 пикселов. Матричный шрифт используется по умолчанию. Изменение размера матричного шрифта производится увеличением исходной матрицы в N-раз: 8N*8N пикселов. При увеличении размера явно проявляется "грубость" матричного шрифта.
Второй тип шрифтов -векторный (штриховой). При этом буквы рисуются как совокупность отрезков, соединяющих узловые точки букв. Качество в этом случае от размера не зависит. Однако вывод текста векторными шрифтами более медленный, чем матричным.
В стандартном наборе BGI определено:
F = 0 (DefaultFont)-8х8 пикселов-матричный шрифт,
векторные шрифты:
F = 1 (TriplexFont)-триплекс (полужирный),
F = 2 (SmallFont)-уменьшенный,
F = 3 (SansSerifFont)-прямой (книжный),
F = 4 (GothicFont)-готический.
Направление шрифта: D= 0 -по горизонтали слева направо,
D= 1 -по вертикали снизу вверх, символы повернуты на 900.
Увеличение размера Zварьируется от 1 до 31 для матричного шрифта и от 1 до 10 для векторных шрифтов. Причем базовый размер соответствуетдля матричного шрифта Z= 1, для векторного шрифта Z= 4. При Z= 0 базовый размер устанавливается по умолчанию.
102
Для векторного шрифта, можно изменить его пропорции относительно базового размера процедурой
SetUserCharSize(XN, X, YN, Y);
При этом (XN/X) -множитель для изменения ширины символов, (YN/Y)-множитель для изменения высоты символов. Параметры XN, X, YN, Y-типа Word.
Текст можно выравнивать относительно позиции его вывода с помощью процедуры
(0,2) (1,2) (2,2)
SetTextJustify(H, V); * * *
(0,1)*_ЦЕНТРИРУЕМЫЙ ТЕКСТ*(2,1)
* * *
Выравнивание по горизонтали: (0,0) (1,0) (2,0)
H = 0-текст справа от позиции вывода, В скобках указаны значения H, V.
H = 1-центрирование текста,
H = 2-текст слева от позиции вывода.
Выравнивание по вертикали:
V = 0 -текст выше позиции вывода,
V = 1 -центрирование текста,
V = 2 -текст ниже позиции вывода.
По умолчанию установлено H= 0, V= 2.
Длину строки S (в пикселах) можно определить функцией TextWidth(S);
Высота строки Sопределяется функцией TextHeight(S);
Если строка не помещается в области экрана, то в случае матричного шрифта эта строка не выводится, а для векторных шрифтов часть строки отсекается.
Цвет текста в графике устанавливается процедуройSetColor(N);где N-номер цвета.
{ --------Пример программы, демонстрирующей различные шрифты:---------}
uses Graph;