
- •Часть 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 Ошибки стадии выполнения
- •Ошибки ввода-вывода
- •Фатальные ошибки
- •Библиографический список
Построение и окраска произвольного рисунка на примере замка
Существует два подхода к построению программ воспроизведения изображения на экране: визуальное проектирование и геометрическое моделирование изображения.
В графических программах языка Borland
Pascal 7.0 не предусмотрены
программные средства визуального
программирования, поэтому приходится
поступать следующим образом. Берется
лист миллиметровки размером в миллиметрах,
соответствующий количеству пикселей
по осям
экрана. На этот лист наносится рисунок,
как вы его хотите видеть. Далее по рисунку
вручную снимаются координаты всех
точек, и заполняются массивы координат
X и Y. Далее
в программе соединяют эти точки прямыми
линиями, строят на основании этих
координат прямоугольники, дуги и
окружности. Для иллюстрации этого метода
приведем пример построения замка (см.
рис. 3.14).
Пример 23. На фоне синего неба со звёздами (использован датчик случайных чисел) и желтым полумесяцем нарисован кирпичный замок (из серого кирпича) с крышей из черепицы красного цвета. Код программы, составлен Румянцевой Натальей Сергеевной, студенткой первого курса СПбГУВК, группа ИС-11.
Рис. 3.14 Изображение замка в окне Norton Commander. Результат работы программы PR23
Построение и заливка правильного многоугольника
Геометрическое моделирование изображения рассмотрим на примере построения пятиугольной звезды, которая является частным случаем правильного десятиугольника.
Этот способ заключается в том, что разрабатываются формулы, с помощью которых рассчитываются положения характерных точек геометрической фигуры, и на основании этих расчетов заполняются координатные массивы X и Y. Очевидно, второй способ наиболее удобен для правильных геометрических фигур, к которым относятся и звезды.
Пример 24. Разработать программу, отображающую в центре экрана пятиконечную звезду, с длинами лучей L и M, повернутую относительно центра на угол G (см. рис. 3.15), и окрашенную основным и ярким оттенком цвета С.
Рис. 3.15 Модель звезды (угол поворота G = –90º)
Модель звезды содержит помимо центральной точки (на рис. 3.15 эта точка соответствует началу системы координат XOY), еще 10 пронумерованных по порядку точек - концов лучей. Лучи чередуются и делятся на большие и маленькие. Большие лучи имеют одинаковую длину, равную L в пикселях, а маленькие - M. Угол поворота звезды определяется по положению первого луча и задается углом G (в градусах) и отсчитывается от оси OX по часовой стрелке. Концы больших лучей лежат на окружности радиусом L и центром в точке 0, 0 на осях XOY. Концы малых лучей лежат на окружности радиусом M и центром в точке 0, 0 на осях XOY. Угол между соседними лучами равен 36. Таким образом, пересчет положения концов лучей из полярной системы координат в декартовую XOY можно осуществлять по известным формулам:
,
где
- длина луча с номером i;
- угол поворота луча относительно оси
OX; P -
координата центра экрана по оси X;
Q - координата центра
экрана по оси Y. Ниже
приведен код программы, рисующую звезду
по примеру 24.
PROGRAM PR24;
Uses CRT, GRAPH;
Var dr, md: integer;
G,PG:real; {УГЛЫ ПОВОРОТА - ЗВЕЗДЫ, ЛУЧА}
L,M, {ДЛИНА БОЛЬШОГО И МАЛОГО ЛУЧЕЙ ЗВЕЗДЫ}
P,Q, {МАКСИМАЛЬНЫЕ ЗНАЧЕНИЯ ПО ОСЯМ X И Y}
XP,YQ, {КООРДИНАТЫ ТОЧКИ ЗАЛИВКИ}
C, {ЦВЕТ ЗВЕЗДЫ}
K,I: WORD;
X,Y: ARRAY[1..10] OF WORD; {КООРДИНАТЫ КОНЦОВ ЛУЧЕЙ}
ch: char;
Begin
ClrScr;
WRITELN('Укажите длину лучей - L, M'); READLN(L, M);
WRITELN('Укажите угол поворота звезды, град.- G'); READLN(G);
WRITELN('Укажите цвет звезды, число - С'); READLN(C);
dr := detect; INITGRAPH (dr, md, 'd:\tp\bgi');
P := GetMaxX div 2; Q := GetMaxY div 2;
SetBkColor(7); ClearDevice;
SetColor(1); SetLineStyle(0,0,1);
For I:=1 TO 10
DO Begin {ОПРЕДЕЛЕНИЕ КООРДИНАТ КОНЦОВ ЛУЧЕЙ}
IF ODD(I) THEN K := L ELSE K:=M;
PG:=(G + 36*(I-1))*PI/180; {УГОЛ ЛУЧА}
X[I]:=ROUND(K * Cos(PG) + P);
Y[I]:=ROUND(K * Sin(PG) + Q);
LINE(X[I],Y[I],P,Q);
End;
For I:=1 TO 9
DO LINE(X[I], Y[I], X[I+1], Y[I+1]);
LINE(X[10],Y[10],X[1],Y[1]);
For I := 1 TO 10 {ЗАЛИВКА СЕКТОРОВ ЛУЧЕЙ ЗВЕЗДЫ ЦВЕТОМ C}
DO Begin
IF ODD(I) THEN SetFillStyle(1,C) ELSE SetFillStyle(1,C+8);
PG:=(G+36*(I-1)+18)*PI/180; {УГОЛ ЛУЧА XP, YP - ТОЧКА ЗАЛИВКИ}
XP := ROUND(5*Cos(PG) + P); YQ := ROUND(5*Sin(PG) + Q);
FloodFill(XP, YQ, 1);
END;
ch:=readkey;
End.