
- •Часть I. Этапы решения задачи на компьютере 7
- •Часть II. Задачи. Алгоритмизация и программирование 15
- •Часть III. Теоретические положения и примеры программ 188
- •Введение
- •Часть I. Этапы решения задачи на компьютере
- •1.1 Постановка и формализация условий задачи
- •1.2 Алгоритмизация задачи
- •1.2.1 Интерпретация объектов
- •1.2.2 Вычислительная схема
- •1.2.3 Вычислительная схема решаемой задачи
- •1.2.4 Составление блок-схемы
- •1.2.5 Трассировка
- •1.3 Составление программы на языке Паскаль
- •1.4 Подготовка текста программы на машинном носителе
- •1.5 Трансляция (компиляция) программы
- •1.6 Компоновка (редактирование связей)
- •1.7 Запуск программы на исполнение
- •1.8 Анализ результатов
- •Часть II. Задачи. Алгоритмизация и программирование классических вычислительных процессов
- •1 Линейный вычислительный процесс
- •1.1 Программирование формул
- •1.2 Формализация и алгоритмизация задачи
- •2 Разветвляющийся вычислительный процесс
- •2.1 Программирование формул
- •2.2 Формализация и алгоритмизация графических задач
- •2 .3 Параметрические задачи
- •3 Циклические вычислительные процессы
- •3.1 Арифметический цикл
- •Вычисление произведения n сомножителей.
- •Табулирование функции на конечном отрезке.
- •3.2 Итерационный цикл
- •Вычисление предела последовательности с заданной точностью.
- •Вычисление суммы бесконечного ряда с заданной точностью.
- •3.3 Арифметические циклы с рекуррентными соотношениями
- •3.4 Итерационные циклы с рекуррентными соотношениями
- •3.5 Двойной вложенный цикл
- •4. Пользовательские алгебраические функции
- •4.1 Применение функции в линейных и разветвляющихся вычислительных процессах
- •4.2 Использование функции в циклических процессах
- •4.3 Табуляция функции
- •5 Одномерные числовые массивы
- •5.1 Работа с компонентами массива
- •5.2 Работа с векторами
- •6 Двумерные числовые массивы
- •6.1 Работа с элементами массива
- •6.2 Работа с векторами и матрицами
- •6.3 Использование процедур и функций для работы с массивами
- •7 Работа со строками
- •7.1 Анализ и преобразование текста строки
- •7.2 Работа со строковыми функциями и процедурами
- •8 Работа со списками
- •8.1 Стеки
- •8.2 Очереди
- •8.3 Бинарные деревья
- •9 Работа с текстовыми файлами
- •10 Работа с файлами записей
- •11 Компьютерная графика
- •12 Анимация изображений
- •Часть III. Теоретические положения и примеры программ
- •1 Вычисление определителя квадратной матрицы
- •2.2 Использование записей для описания таблиц
- •Работа с полями записи
- •Использование оператора with … do
- •Ввод данных в массив записей с клавиатуры
- •2.3 Вложение записей
- •Присвоение значений полям вложенных записей
- •3 Файлы записей
- •3.1 Структура файла
- •3.2 Встроенные процедуры и функции обработки файлов
- •3.3 Организация последовательного доступа к записям файла
- •3.4 Организация прямого доступа к компонентам файла
- •3.5 Создание индексного файла
- •3.6 Работа с файлом произвольного доступа
- •Просмотр файла
- •Редактирование записей
- •Изменение структуры основного файла
- •Использование клавиш для управления программой
- •Удаление записи из файла
- •Добавление записи в файл
- •3.7 Информационное взаимодействие текстовых файлов и файлов записей
- •Экспорт данных. Копирование информации из файла записей в текстовый файл
- •Импорт данных. Копирование информации из текстового файла в файл записей
- •3.8 Запросы к файлам записей
- •Запрос с группировкой
- •4 Графическое программирование
- •4.1 Управление видеорежимом
- •Инициализация видеорежима. Процедура InitGraph
- •Закрытие видеорежима. Процедура CloseGraph
- •Создание графического окна. Процедура SetViewPort
- •Закрытие графического окна. Процедура ClearDevice
- •4.2 Построение графических фигур
- •Построение прямой линии. Процедуры SetColor, SetLineStyle, Line, LineRel, LineTo
- •Построение прямоугольника. Процедуры Rectangle и Bar
- •Построение окружности. Процедура Circle
- •Построение дуги окружности. Процедура Arc
- •Построение эллипса. Процедуры Ellipse, FillEllipse
- •Построение сектора. Процедуры PieSlice, Sector
- •4.3 Корректировка изображения Процедуры GetAspectRatio, SetAspectRatio
- •4.4 Создание пользовательского шаблона заливки
- •Заливка замкнутой области. Процедура FloodFill
- •Построение и окраска произвольного рисунка на примере замка
- •Построение и заливка правильного многоугольника
- •4.5 Работа с текстом
- •Выбор стандартного шрифта. Процедура SetTextStyle
- •Коррекция стандартного шрифта. Процедура SetUserCharSize
- •Вывод числовых величин на экран
- •5 Анимация изображений
- •5.1 Дублирования спрайта цветом фона
- •5.2 Манипулирование фрагментами изображения
- •5.3 Использование страниц видеопамяти
- •6 Сообщения об ошибках
- •6.1 Ошибки стадии компиляции
- •6.2 Ошибки стадии выполнения
- •Ошибки ввода-вывода
- •Фатальные ошибки
- •Библиографический список
4.4 Создание пользовательского шаблона заливки
Пользователь кроме перечисленных в табл. 7 стандартных шаблонов заливок может создавать свои с помощью процедуры SetFillPattern и заливать ими замкнутые области с помощью процедуры FloodFill.
Основной принцип создания шаблона заливки состоит в следующем. Дана матрица 8 8 = 64 пикселя. Эта матрица многократно дублируется, накрывая словно черепицей всю заливаемую поверхность. Поэтому узор матрицы должен быть таким, чтобы сложенные вместе тождественные узоры матриц образовывали общий однородный узор поверхности. Узор матрицы образуется путем выделения цветом некоторых пикселей, остальные пиксели образуют фон. В качестве примеров на рис. 3.12.a приведен узор "Черепица", а на рис. 3.12.б - узор "Кирпич".
Рис. 3.12 Кодирование шаблона заливки: а) Черепица, б) Кирпич
Пиксели фона получают код 1, а пиксели узора код 0. Восемь пикселей строки (8 бит) составляют один байт матрицы. Всего матрица содержит 8 строк, то есть описывается 8 байтами. Например, первая строка матрицы а) содержит 8 бит двоичного кода 11110111, которые кодируются в шестнадцатеричной системе счисления как $F7. На рис. 3.12 кодировка соответствующих строк матриц представлена справа от матриц.
Процедура SetFillPattern(MP: FPT, CL: WORD) устанавливает текущим пользовательский шаблон MT. MT - переменная типа FPT, где тип FPT определяется следующим образом:
TYPE FTP = Array[1..8] of Byte.
Массив MP содержит 8 байт кодов матрицы шаблона. Переменная CL определяет цвет пикселей, соответствующих значениям 1 в матрице (см. рис. 3.12). Пиксели, помеченные 0, окрашиваются цветом фона, установленным с помощью оператора SetBkColor.
Заливка замкнутой области. Процедура FloodFill
Процедура FloodFill(X, Y: Integer; CB: WORD) осуществляет заполнение текущей заливкой замкнутой области экрана ограниченной кривой цвета CB. Краска заливается в точку с координатами X, Y. Процедура FloodFill одинаково успешно использует для заливки как стандартные шаблоны, определяемые процедурой SetFillStyle, так и пользовательские, устанавливаемые процедурой SetFillPattern.
Пример 22. На черном фоне нарисовать окружность и залить ее черепицей красного цвета, слева от окружности расположить прямоугольник и заполнить его желтыми кирпичами (см. рис. 3.13).
PROGRAM PR22;
USES CRT, GRAPH;
Const MP: FillPatternType = ($F7,$F7,$EB,$1C,$7F,$7F,$BE,$C1);
MP1: FillPatternType = ($7F,$7F,$7F,$00,$F7,$F7,$F7,$00);
VAR dr, md : integer; ch: char;
begin
dr := detect; InitGraph (dr, md, 'd:\tp\bgi');
SetLineStyle (0, 0, 1); {ШИРИНА ЛИНИИ 1 ПИКСЕЛЬ}
SetFillPattern(MP, red); {СТИЛЬ И ЦВЕТ ЗАКРАСКИ КРУГА, ЧЕРЕПИЦА}
SetBkColor (black); ClearDevice; SetColor (1);
Circle (250, 100, 50);
FloodFill(250, 100, 1); {ЗАЛИВКА ОКРУЖНОСТИ ШАБЛОНОМ MP}
SetLineStyle(0, 0, 3); {ШИРИНА ЛИНИИ 3 ПИКСЕЛЯ}
SetFillPattern(MP1, 14); {СТИЛЬ И ЦВЕТ ЗАКРАСКИ ПРЯМОУГОЛЬНИКА,
ЖЕЛТЫЙ КИРПИЧ}
Rectangle(60, 50, 150, 150);
FloodFill(65, 55, 1); {ЗАЛИВКА ПРЯМОУГОЛЬНИКА ШАБЛОНОМ MP1}
ch := readkey;
CloseGraph {ЗАКРЫТИЕ ГРАФИЧЕСКОГО ВИДЕОРЕЖИМА}
End.
Рис. 3.13 Результат работы программы PR22