
- •Часть 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.5 Работа с текстом
Для вывода на экран текстового литерала или значения переменной St типа String применяют две процедуры OutText(St: string) или OutTextXY(X, Y:Integer; St:string). Отличие этих процедур состоит в следующем. Процедура OutText отображает строку St начиная с позиции, в которой располагается графический курсор. Процедура OutTextXY устанавливает графический курсор на пиксель с координатами X, Y, а затем выводит строку St.
Выбор стандартного шрифта. Процедура SetTextStyle
Для выбора стандартного шрифта используется процедура SetTextStyle(Font, Direction, Size: Word). Параметр Font определяет шрифт (см. табл. 3.5). Параметр Direction задает ориентацию выводимой строки: 0 - слева направо, 1 - снизу вверх. Размер литер шрифта определяется значением параметра Size и выбирается из ряда 1, 2, … , 10. Следует отметить, что многие графические шрифты нерусифицированны.
Таблица 3.5
Код Font |
Шрифт |
Образец шрифта |
Размер, Size |
0 |
8 8 битовый |
|
2 |
1 |
Штриховой |
|
4 |
2 |
Малый |
|
6 |
3 |
Сансериф |
|
4 |
4 |
Готический |
|
4 |
Пример 25. Образцы шрифтов получить с помощью следующей программы.
PROGRAM PR25;
Uses CRT, GRAPH;
Var dr, md: integer; ch: char;
Begin
dr := detect; INITGRAPH (dr, md, 'd:\tp\bgi');
SetBkColor(7); ClearDevice; SetColor(1);
SetTextStyle(0,0,2); OutTextXY(100,100,'Пример 0123456789');
SetTextStyle(1,0,4); OutTextXY(100,150,'Text 0123456789');
SetTextStyle(2,0,6); OutTextXY(100,200,'Text 0123456789');
SetTextStyle(3,0,4); OutTextXY(100,250,'Text 0123456789');
SetTextStyle(4,0,4); OutTextXY(100,300,'Text 0123456789');
ch := readkey;
End.
Коррекция стандартного шрифта. Процедура SetUserCharSize
Программист имеет возможность изменить размеры литер выбранного стандартного шрифта выводимой строки с помощью процедуры SetUserCharSize(MX, DX, MY, DY: Word).
Параметры MX и DX представляют собой целые числа, управляющие размером текста по оси X:
MX = 1, DX = 1 - по горизонтали текст не изменяет своей ширины;
MX = 2, DX = 1 - текст по горизонтали в два раза шире;
MX = 1, DX = 2 - текст по горизонтали сжимается в два раза;
MX = 3, DX = 1 - текст по горизонтали в три раза шире;
MX = 1, DX = 3 - текст по горизонтали сжимается в три раза и т.д.
Параметры MY и DY представляют собой целые числа, управляющие размером текста по оси Y. Принцип расширения / сжатия аналогичный, рассмотренному выше, для оси X.
Вывод числовых величин на экран
Стандартных процедур для вывода числовых величин в графическом режиме работы экрана не предусмотрено. Поэтому программист должен в своей программе преобразовать целые или вещественные числа в строку текста, а затем, используя процедуры OutText, OutTextXY отобразить эту строку на экране.
Имеет смысл разработать свои собственные функции для преобразования числовых величин в строки. В качестве примера приведем две функции - RealStr и IntStr, которые преобразуют в строку вещественное R и целое L числа, соответственно.
Function RealStr(R:Real; Dig,Dec:Integer):String;
Var Buf:String[20];
Begin
Str(R:Dig:Dec, Buf);
RealStr:=Buf
End;
Параметры Dig и Dec в функции RealStr определяют формат (внешний вид) отображаемого вещественного числа R и задают общее количество литер и число значащих разрядов после десятичной точки. Функция IntStr имеет только один параметр форматирования Dig, не превышающий 10, который определяет ширину выводимого целого числа (в литерах).
Function IntStr(L,Dig:Integer):String;
Var Buf:String[10];
Begin
Str(L:Dig, Buf);
IntStr:=Buf
End;
Пример 26. Составить программу для вывода целых чисел 100, 200, 300, 400, 500, а так же вещественных чисел -1.000, -1.105, -1.210, -1.315, -1.420, -1.525, -1.630 - как показано на рис. 3.16.
Рис. 3.16 Результат работы программы PR26
PROGRAM PR26;
Uses CRT, GRAPH;
Var dr, md:integer; ch:char; I,L:Integer; VOL:String; R:REAL;
Function IntStr(L, Dig: Integer): String;
Var Buf: String[10];
Begin Str(L: Dig, Buf); IntStr := Buf; End;
Function RealStr(R: Real; Dig, Dec: Integer): String;
Var Buf: String[20];
Begin Str(R: Dig: Dec, Buf); RealStr := Buf; End;
Begin
dr := detect; INITGRAPH (dr, md, 'd:\tp\bgi');
SetBkColor(7); ClearDevice; SetColor(1);
SetTextStyle(1, 0, 2);
FOR I := 0 to 4
DO begin
L:=100 + I*100; VOL := IntStr(L, 3);
OutTextXY(50, 50 + I*20, VOL);
END;
SetTextStyle(1, 1, 1);
FOR I := 0 to 6
DO begin
R:=-1.0-I*0.105;
VOL:=RealStr(R, 6, 3);
OutTextXY(150 + I*20, 90, VOL);
END;
ch:=readkey;
END.