- •Содержание
- •Часть 1. Основные понятия программирования §1.1. Этапы разработки программного обеспечения
- •§1.2. Основные сведения об алгоритмах Понятие алгоритма
- •Свойства алгоритма
- •Формы записи алгоритмов
- •Блок-схемы алгоритмов
- •§1.3. Языки программирования
- •§1.4. Паскаль и Object Pascal, Турбо-Паскаль и Delphi
- •Контрольные вопросы
- •Язык, оболочка и интегрированная среда разработки
- •Часть 2. Общие сведения о языке Паскаль §2.1. Алфавит и служебные слова
- •Описание общих конструкций языка
- •§2.2. Структура программы
- •§2.3. Разделы описаний Описание меток
- •Определение констант
- •Определение типов
- •Описание переменных
- •Контрольные вопросы
- •Часть 3. Простые типы данных Иерархия типов
- •§3.1. Целые типы
- •§3.2. Вещественные типы
- •§3.3. Логический тип
- •§3.4. Литерный тип
- •§3.5. Перечисляемый тип
- •§3.6. Диапазоны (интервальный тип)
- •Дополнительные типы в Delphi
- •Контрольные вопросы
- •Глава 4. Операторы языка Паскаль Выражения
- •§4.1. Оператор присваивания
- •§4.2. Ввод-вывод данных
- •§4.3. Составной оператор
- •§4.4. Пустой оператор
- •§4.5. Безусловный оператор перехода
- •§4.6. Условный оператор
- •§4.7. Оператор цикла с параметром for
- •§4.8. Оператор цикла с предусловием while
- •§4.9. Оператор цикла с постусловием repeat
- •§4.10. Оператор выбора case
- •Контрольные вопросы
- •Глава 5. Процедурное программирование §5.1. Функции
- •Параметры – значения
- •Параметры – переменные
- •Бестиповые параметры
- •§5.2. Процедуры
- •Правила использования подпрограмм
- •Рекурсия
- •Директивы
- •Процедурные типы
- •Пример использования подпрограмм
- •Контрольные вопросы
- •Глава 6. Структурированные типы данных
- •§6.1. Массивы
- •§6.2. Строки
- •§6.3. Записи
- •§6.4. Множества
- •Пример использования множеств
- •§6.5. Файлы
- •Установочные и завершающие операции
- •Операции ввода-вывода
- •Перемещения по файлу
- •Пример работы с файлом
- •Обработка ошибок ввода-вывода
- •Специальные операции
- •Пример объединения двух файлов
- •Текстовые файлы
- •Стандартные текстовые файлы
- •Файлы без типа
- •Контрольные вопросы
- •Глава 7. Динамические структуры данных §7.1. Динамические переменные
- •§7.2. Указатели
- •Работа с динамическими переменными
- •Пример двухсвязанного циклического списка
- •Указатели без типа
- •Контрольные вопросы
- •Глава 8. Низкоуровневые возможности Паскаля §8.1. Язык Ассемблер
- •§8.2. Доступ к аппаратуре Доступ к памяти
- •Доступ к портам ввода-вывода
- •Работа по прерываниям
- •Контрольные вопросы
- •Глава 9. Модули §9.1. Основные понятия
- •§9.2. Использование модулей
- •§9.3. Стандартные модули
- •§9.4. Модуль Crt
- •Работа с экраном в текстовом режиме
- •Работа с клавиатурой
- •Работа со звуком
- •§9.5. Модуль dos
- •§9.6. Графический режим монитора
- •Контрольные вопросы
- •Глава 10. Введение в объектно-ориентированное программирование §10.1. История развития программирования
- •Понятие объекта
- •§10.2. Свойства объектов
- •Раннее и позднее связывание
- •§10.3. Виртуальные методы
- •Конструкторы и деструкторы
- •§10.4. Динамические объекты
- •Скрытые поля и методы
- •Контрольные вопросы
- •Литература
§9.6. Графический режим монитора
Для создания графических изображений, то есть для работы монитора в графическом режиме, предназначен модуль GRAPH, хранящийся в соответствующем файле.
В настоящее время используются самые разнообразные видеоадаптеры, поддерживающие несколько режимов работы монитора, стандартными из которых считаются:
VGA (Video Graphics Array) с максимальным разрешением 640х480 точек (пикселов);
SVGA (Super VGA) — 800x600;
1024x768:
1280x1024;
1600x1200 и другие.
Более того, в каждом режиме можно отображать разное количество цветов, что существенно зависит от объема видеопамяти. При работе с 16-ю цветами каждая точка занимает полбайта, с 256 — 1 байт, в режиме High Color (более 65 тыс. цветов) — 2 байта, в режиме True Color (более 16 млн. цветов) — 3 байта.
В модуле Graph поддерживается только режим VGA. Здесь можно задавать только 16 цветов, но три варианта точек по вертикали: 200, 350 и 480, которые задаются режимами: VGALo=0,VGAMed=1, VGAHi=2. Для управления режимом VGA необходимо подключать специальный драйвер, находящийся в файле EGAVGA.BGI (Borland Graphic Interface).
Если программа запускается из DOS, то графический режим надо инициализировать, задав драйвер и его режим в процедуре инициализации:
InitGraph (< драйвер >,< режим >,< путь к драйверу >);
например:
D:=VGA;
R:=VGAHi;
InitGraph (D,R,’’);
Аналогично для восстановления текстового режима используется процедура
CloseGraph;
Удобнее автоматически распознавать используемый адаптер процедурой
DetectGraph (<драйвер>,<режим>);
например
DetectGraph (D,R);
InitGraph (D,R,’’);
В графическом режиме курсор отсутствует. Его функции выполняет невидимый текущий указатель CP (Current Pointer), выполняющий аналогичные функции. Для его перемещения используется процедура
MoveTo (X,Y:Integer);
причем Х для режима Hi может изменяться в диапазоне от 1 до 640, а Y — от 1 до 480.
Для перемещения указателя относительно его последнего положения используется процедура
MoveRel (dX,dY:Integer);
Аналогично текстовому режиму, здесь используется цвет переднего плана и цвет фона, устанавливаемые процедурами
SetColor (Color:Word);
SetBkColor (Color:Word);
Дополнительно используется процедура заливки для закрашивания фигур и замкнутых областей
SetFillStyle (Pattern:Word; Color:Word);
где Pattern определяет стиль заполнения.
Модуль включает множество простейших процедур рисования: отображение точки, прямой, прямоугольников, окружностей и т.п. Для вывода текста используются специальные процедуры.
Пример построения столбцовой диаграммы двух функций.
Program Diagram;
{ Демонстрационный пример на использование модуля Graph:
столбцовая диаграмма функций F1 и F2 }
Uses Crt,Graph;
Const
xmin:real=0.05; { Начальные значения аргумента }
xmax:real=1;
step:real=0.05;
Var x, { текущее значение аргумента }
Fmin,Fmax:real;
stdiag, { ширина большого прямоугольника }
xdiag, { текущая точка диаграммы }
rezim,razm:integer; { режим и разрешение монитора }
stng:string; { временная переменная для преобразования
числовых данных при выводе }
Function F1(x:real):real;
Begin
F1:=exp(-x)*sin(x)
end;
Function F2(x:real):real;
Begin
F2:=exp(-sqrt(x))*cos(x);
end;
Begin
{ Поиск экстремумов функции }
x:=xmin;
Fmin:=F1(x);
Fmax:=Fmin;
Repeat
if F1(x)>Fmax then Fmax:=F1(x);
if F2(x)>Fmax then Fmax:=F2(x);
if F1(x)<Fmin then Fmin:=F1(x);
if F2(x)<Fmin then Fmin:=F2(x);
x:=x+step;
until x>xmax;
{ Контроль за масштабом шкалы ординат }
Writeln('min=',Fmin:8:5,' max=',Fmax:8:5);
Read(Fmin,Fmax);
{ Установка графического режима и цветов }
DetectGraph(rezim,razm);
InitGraph(rezim,razm,'');
SetBkColor(Black);
SetColor(White);
{ Заголовок диаграммы }
OutTextXY(220,20,'Диаграмма двух функций');
{ Координатные линии }
Line(44,50,44,451);
Line(44,451,595,451);
{ Масштабы по X иY - числовые значения }
Str(xmin:4:2,stng);
OutTextXY(44,460,stng);
Str(xmax:4:2,stng);
OutTextXY(570,460,stng);
Str(Fmax:4:2,stng);
OutTextXY(1,50,stng);
Str(Fmin:4:2,stng);
OutTextXY(1,445,stng);
{ Определение расстояния между столбцами }
stdiag:=round(500/((xmax-xmin)/step));
x:=xmin;
xdiag:=45;
{ Вывод в цикле по два столбца }
Repeat
{ F1 - широкий и зеленый столбец }
SetFillStyle(SolidFill,Green);
Bar(xdiag,450,xdiag+stdiag-2,round(450-400*(F1(x)-Fmin)/(Fmax-Fmin)));
{ F2 - красный и узкий столбец }
SetFillStyle(SolidFill,Red);
Bar(xdiag+round(stdiag/4),450,
xdiag+round(stdiag/4*3)-2,round(450-400*(F2(x)-Fmin)/(Fmax-Fmin)));
x:=x+step;
xdiag:=xdiag+stdiag;
until x>xmax;
{ Индицируем результат, пока не будет нажата какая либо клавиша }
Repeat
until KeyPressed;
{ Выход из графического режима }
CloseGraph
end.
