
- •Часть 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 Ошибки стадии выполнения
- •Ошибки ввода-вывода
- •Фатальные ошибки
- •Библиографический список
Присвоение значений полям вложенных записей
Ниже приведен пример прямого присвоения значений полям первой записи USP[1] в массиве записей USP – успеваемость группы. Уровень вложения соответствует числу разделителей имен, то есть точек в идентификаторе поля.
USP[1].TAB := 910678; {Уровень вложения 1}
USP[1].ATT.D1 := TRUE; {Уровень вложения 2}
USP[1].ATT.D2 := TRUE;
USP[1].ATT.D3 := FALSE;
USP[1].ATT.D4 := TRUE;
USP[1].ATT.D5 := FALSE;
Используем оператор WITH для этого же примера.
WITH USP[1] {Уровень вложения 1}
DO BEGIN
TAB := 910678;
WITH ATT {Уровень вложения 2}
DO BEGIN
D1 := TRUE;
D2 := TRUE;
D3 := FALSE;
D4 := TRUE;
D5 := FALSE
END
END;
Из нашего примера видно, что в конкретном случае использование оператора WITH существенно усложнило структуру программы.
3 Файлы записей
В практике программирования часто встречаются задачи, решение которых требует большого количества относительно мало изменяемых во времени данных. Ввод данных с экрана заново при каждом счете для этих задач очень трудоемок, а часто просто невозможен из-за временных ограничений. Для решения этой проблемы в языках программирования была реализована концепция файлов, что позволяет после набора информации на клавиатуре запоминать ее на магнитном носителе и обращаться к ней непосредственно из обрабатывающих программ при каждом счете.
Напомним, что файл - это структурированный тип данных, состоящий из компонентов одного типа. Файлы записей часто называют базой данных и относят к так называемым типизированным файлам. Типизированный Файл с точки зрения языка ПАСКАЛЬ - это структурированный тип данных, состоящий из последовательности компонентов одного типа и одной длины. Для типизированных файлов файловый тип и файловую переменную задают с помощью следующей синтаксической конструкции:
TYPE <Имя типа файла> = FILE OF <Тип компонент файла>;
VAR <Идентификатор файловой переменной>: <Имя типа файла>;
где типом компонент файла данных может быть любой тип Турбо Паскаля, кроме файлов, но чаще всего является комбинированный тип RECORD (запись).
Определение типа файлов начинается ключевыми словами FILE OF, после которого задается тип компонентов файла, который описывает, что содержит данный файл. Далее следует идентификатор предварительно определенного типа файла. Число компонентов, называемое длиной файла, определением типа файла не фиксируется.
Идентификатор файловой переменной определяет имя файла в программе. Можно в разделе VAR определить несколько файловых переменных, что дает, возможность программе работать одновременно с несколькими файлами одного или различных типов.
В качестве примера приведем фрагмент программы, работающей с файлом Fstd базы данных, хранящим сведения о студентах:
Type Student = record
Tab: Longint; {Номер зачетной книжки}
Fio: String[20]; {Фамилия И.О.}
Data: String[8]; {Дата рождения}
Grup: String[7]; {Номер группы}
Stepa: Real {Размер стипендии, руб.}
end;
Var Std: Student; Mstd: array[0..19] of Student;
Fstd: File of Student;
В этом примере имя типа файла в явном виде не используется. Для описания файла, использован второй способ, так называемое неявное определение файлового типа, непосредственно в разделе VAR:
Var F: file of <тип компонент>;
где F - переменная для доступа к файлу (файловая переменная).
Вторая форма описания файлов проще запоминается и не вызывает ошибок при программировании даже у новичков. Переменные файлового типа нельзя использовать в выражениях. Их используют только в качестве аргументов процедур и функций предназначенных для работы с файлами.