- •Глава 1
- •Свойства алгоритма
- •Словесный способ записи алгоритма.
- •Структурно-стилизованный способ записи алгоритма.
- •Программный способ записи алгоритма.
- •Графический способ записи алгоритма.
- •Циклическая структура с постусловием
- •Циклическая структура с предусловием
- •Циклическая структура с параметром
- •Глава 2
- •Символы разделители:
- •Зарезервированные слова
- •Стандартные идентификаторы
- •Стандартные константы
- •Операции div и mod
- •Стандартные функции
- •Правила написания арифметических выражений
- •Возведение в степень
- •Раздел описания меток
- •Раздел описания констант
- •Раздел описания переменных
- •Раздел определения типов данных
- •Перечисляемый тип
- •Интервальный тип
- •Раздел описания процедур и функций
- •Раздел var ?
- •Глава 3
- •Оператор присваивания
- •Оператор безусловного перехода goto
- •Оператор вызова процедуры
- •Пустой оператор
- •Составной оператор
- •Условные операторы
- •Операторы повтора
- •Глава 4
- •Линейная сортировка
- •Метод сортировки Шелла
- •Метод прямого обмена (пузырьковый метод)
- •Глава 5
- •Глава 6
- •Цветовая шкала
- •Стандартные стили заполнения
- •Стиль линии
- •Толщина линии
- •Построение прямоугольников
- •Построение дуг и окружностей
- •Глава 1 3
- •Глава 2 36
- •Глава 3 78
- •Глава 4 130
- •Глава 5 157
- •Глава 6 167
Стиль линии
Таблица 6.4
Константа |
Значение |
Описание |
SolidLn DottedLn CenterLn DashedLn UserBitLn |
0 1 2 3 4 |
Непрерывная линия Линия из точек Линия из точек и тире Штриховая линия Тип пользователя |
Толщина линии
Таблица 6.5
Константа |
Значение |
Описание |
NormWidth ThickWidth |
1 3 |
Нормальная толщина (1 пииксель) Жирная линия |
6.2.4 Построение графических фигур
Построение прямоугольников
Процедура Rectangle строит прямоугольник, внутренняя область которого не закрашивается и совпадает по цвету с фоном.
Rectangle (X1, Y1, X2, Y2 : integer);
где X1, Y1 – координаты левого верхнего угла прямоугольника,
X2, Y2 - координаты правого нижнего угла прямоугольника.
Например, выведем на экран 100 вычерченных разным цветом случайным образом меняющихся по высоте прямоугольников:
for i:=1 to 100 do
begin
SetColor(Green); {Установка цвета}
Rectangle (200, random(300),250, 300); {i-й прямоугольник}
Delay(50); {Задержка}
ClearDevice; {Очистка экрана}
end;
Более эффектные для восприятия прямоугольники можно строить с помощью процедуры Bar, которая рисует закрашенный столбец. Цвет закраски устанавливается с помощью SetFillStyle.
Bar (X1, Y1, X2, Y2 : integer);
Например,
SetFillStyle(1,3);
Bar (10,10,50,100);
вычерчивается прямоугольник сплошной линией, закрашенный бирюзовым цветом.
Еще одна весьма эффектная процедура, которая вычерчивает трехмерный закрашенный прямоугольник (параллелепипед):
Bar3D (X1, Y1, X2, Y2 : integer; Depth : word; Top : boolean);
где Depth – представляет собой число пикселей, задающее глубину трехмерного контура;
Top – определяет, строить над прямоугольником вершину (Top:=True) или нет (Top:=False).
Например,
SetFillStyle(1,3);
Bar3D (10, 10, 50, 100, 10, True);
вычерчивается прямоугольник сплошной линией, закрашенный бирюзовым цветом.
Построение дуг и окружностей
Д ля задания углов используется полярная система координат (см. рис.6.2).
Рис.6.2. Полярная система координат
Процедура вычерчивания окружности текущим цветом имеет следующий формат:
Circle (X, Y, Radius :word);
где X, Y – координаты центра окружности,
Radius – ее радиус.
Например.
SetColor(Green);
Circle (450, 100, 50);
обеспечит вывод окружности зеленого цвета с радиусом 50 пикселей и центром в точке (450, 100).
Для вычерчивания дуги используется процедура
Arc(X, Y : integer; StAngle, EndAngle, Radius : word);
где X, Y – координаты центра окружности,
StAngle и EndAngle – начальный и конечный угол,
Radius – ее радиус.
Если StAngle=0 и EndAngle=359, то вычерчивается полная окружность.
Например.
SetColor(Red);
Arc (450, 100, 0, 90, 50);
позволит вывести дугу красного цвета от 0 до 90 градусов.
Для построения эллиптических дуг предназначена процедура
Ellipse(X,Y : integer; StAngle, EndAngle : word, xR, yR : word);
где X, Y – центр эллипса в линейных координатах,
xR, yR – горизонтальные и вертикальные оси.
Если StAngle=0 и EndAngle=360, то вычерчивается полный эллипс.
Например.
SetColor(LightCyan);
Ellipse (100, 100, 0, 360, 30, 50);
выводит эллипс ярко-голубого цвета, причем фон внутри эллипса совпадает с фоном экрана.
Чтобы создать закрашенный эллипс используется специальная процедура FillEllipse, а заполнитель устанавливается процедурами SetFillStyle и SetColor.
FillEllipse(X,Y : integer; xR, yR : word);
Например.
SetFillStyle(10, 2); {Установка стиля заполнения}
SetColor(LightCyan); {Цвет для вычерчивания эллипса}
Ellipse (100, 100, 0, 90, 50);
В этом фрагменте эллипс вычерчивается ярко-красной кривой и заполняется приведенной в таблице 6.3 стандартной маской 10 (редкие точки) зеленого цвета.
Для создания и заполнения сектора в эллипсе используется процедура
Sector(X,Y : integer; StAngle, EndAngle, xR, yR : word);
где X, Y – центр,
xR, yR – горизонтальные и вертикальные радиусы.
Сектор вычерчивается от начального угла StAngle до конечного угла EndAngle текущим цветом и заполняется стилем, заданной процедурой SetFillStyle.
Например.
SetFillStyle(11, 9);
SetColor(13);
Sector(300, 150, 180, 135, 60, 70);
6.3 РАБОТА С ТЕКСТОМ
Выводимые на экран изображения обычно сопровождаются пояснительным текстом. В графических режимах для этого используются процедуры OutText и OutTextXY.
Процедура OutText выводит строку текста, начиная с текущего положения курсора.
OutText(Textstring : string)
где Textstring – константа или переменная типа string.
Например, OutText(‘Вводите данные: ‘);
Явный недостаток этой процедуры – нельзя указать произвольную точку начала вывода. Его можно устранить с помощью процедуры OutTextXY.
OutTextXY(X,Y : integer; Textstring : string)
где X, Y – координаты точки начала вывода текста.
Например,
OutText(60,100, ‘Для продолжения нажмите любую клавишу… ‘);
выводит сообщение “Для продолжения нажмите любую клавишу”, начиная с точки 60, 100.
Вывод текста в графических режимах может осуществляться самыми различными стандартными и пользовательскими шрифтами. Различают два типа шрифтов: растровые и и векторные. Растровый задается матрицей точек, а векторный – рядом векторов, составляющих символ.
По умолчанию после инициализации графического режима устанавливается шрифт DefaultFont, который, как правило, является шрифтом, используемым установленным драйвером клавиатуры. Активизация нужного шрифта осуществляется с помощью процедуры
SetTextStyle(Font : word; Direction : word, CharSize : word);
где Font – выбранный шрифт,
Direction – направление (горизонтальное или вертикальное),
CharSize – размер выводимых символов.
Возможные значения двух первых параметров представлены в таблице 6.6.
Шрифты
Таблица 6.6
Константа |
Значение |
Описание |
DefaultFont TriplexFont SmallFont SansSerifFont GothicFont |
0 1 2 3 4 |
8x8 битовый шрифт Штриховые шрифты Малый шрифт Сансериф Готический |
Константы ориентации |
||
HorizDir VertDir |
0 1 |
Слева направо Снизу вверх |
В качестве примера шрифтом DefaultFont выведем две строки: вертикальную и горизонтальную разной величины:
SetTextStyle(0, 1, 1) {Буквы стандартной величины}
OutTextXY(200,200, ‘Вертикальная строка‘);
SetTextStyle(0, 1, 1) {Размер букв увеличен}
OutTextXY(200,200, ‘Горизонтальная строка‘);
Пример. Нарисовать эмблему. В левой верхней части графического экрана на черном фоне нарисовать голубой квадрат, а в нем – черный круг, закрашенный желтым цветом. В центре эмблемы черными буквами написать слово «АГНИ».
program Emblema;
uses Crt, Graph;
var driver, mode : integer;
begin
clrscr;
driver:=detect;
initgraph(driver, mode,’’);
setbkcolor(0);
setcolor(3);
rectangle(100, 0, 300, 200);
setfillstyle(1, 3);
floodfill(200, 100, 3);
setcolor(14);
circle(200, 100, 100);
setfillstyle(1, 14);
floodfill(200, 100, 14);
setcolor(0);
circle(200, 100, 100);
settextstyle(0, 0, 3);
outtextxy(135,100, ‘АГНИ‘);
readln
end.
Пример. Нарисовать разными цветами десять концентрических окружностей с общим центром в точке с графическими координатами (320; 240), и описать вокруг них красный прямоугольник.
program Circle10;
uses Crt, Graph;
var driver, mode, r : integer;
begin
clrscr;
driver:=detect;
initgraph(driver, mode,’’);
r:=10; {радиус первой окружности 10 пикселей}
while r<=100 do
begin
setcolor(random(15));
circle(320, 240, r)
r:= r+10
end
setcolor(4);
rectangle(220, 140, 420, 340);
readln
end.
Пример. Написать программу рисования графика функции y=2Sin(2x)+1 на отрезке[0;2], протабулировав функцию с шагом h=0,1.
Program GrafikSin;
uses Crt, Graph;
const a=0; b=2*pi;
h=0.1; h1=5;
x0=60; y0=240; M=50;
var driver, mode, x1, y1 : integer;
x, y : real;
function f(x:real) : real;
begin
f:=2*sin(2*x)+1
end;
begin
clrscr;
driver:=detect;
initgraph(driver, mode,’’);
setcolor(14);
setbkcolor(1);
line(20, y0, 600, y0); {Координатная ось х}
line(x0, 440, x0, 20); {Координатная ось y}
x:=a;
x1:=x0 + trunc(M*x);
{x, y – математические координаты}
y:=f(x);
y1:=y0 - trunc(M*y);
{x1, y1 – графические координаты}
moveto(x1, y1);
setcolor(15);
while x<=b do
begin
y:=f(x);
y1:=y0 - trunc(M*y);
lineto(x1, y1);
x1:= x1+h1;
x:= x+h;
end
readln
end.
6.4 ПОНЯТИЯ ОБ АНИМАЦИИ
Чередование засвечиваний и гашений изображения используют для имитации движения этого изображения на экране. Перед очередным засвечиванием объект необходимо переместить в направлении его движения. Движение изображения на экране называют анимацией.
Для имитации движения объекта на экране нужно выполнить такой циклический алгоритм:
Нарисовать объект в нужной точке, сделать паузу.
Удалить объект, закрасив его цветом фона.
Изменить координаты объекта.
Возвратиться к пункту 1.
Пример. Изобразить движение солнца на голубом небе в горизонтальном направлении.
program Sonce;
uses Crt, Graph;
var driver, mode, r : integer;
begin
clrscr;
driver:=detect;
initgraph(driver, mode,’’);
i:=0;
while i<=590 do
begin
setcolor(14); {цвет солнца}
setbkcolor(3); {цвет неба}
setfillstyle(1, 14); {рисуем солнце желтым цветом}
circle(i, 100, 50);
floodfill(i, 100, 14);
delay(200);
setfillstyle(1, 3); {закрашиваем солнце цветом фона - голубым}
setcolor(3);
circle(i, 100, 50);
floodfill(i, 100, 3);
i:= i+5
end
readln
end.
СПИСОК ЛИТЕРАТУРЫ
Алаев Ю.А., Гладков В.П., Козлов О.А. Практикум по алгоритмизации и программированию на языке Паскаль. М.:Финансы и статистика, 2004.
Глинский Я.Н., Анохин В.Е., Ряжская В.А. Turbo Pascal 7.0 и Delphi. СПб.:ДиаСофтЮП, 2003.
Культин Н. Turbo Pascal в задачах и примерах. СПб.: БХВ - Петербург, 2003.
Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0. Киев: Век+, 2000.
Немнюгин С.А., Перколаб Л. Изучаем Turbo Pascal. СПб.: Питер, 2003.
Немнюгин С.А., Turbo Pascal. Практикум. СПб: Питер, 2001.
Попов В.Б. Паскаль и делфи. Учебный курс. М.: Питер, 2005.
Рапаков Г.Г., Ржеуцкая С.Ю. TURBO PASCAL для студентов и школьников. СПб.: БХВ - Петербург, 2004.
Семакин И.Г., Шестаков А.П. Основы программирования. М.: Академия 2003.
Шпак Ю.А., Turbo Pascal 7.0 на примерах. Киев: Юниор, 2003.
ОГЛАВЛЕНИЕ
Методика подготовки 1
и решения задачи на ПК 1