
- •Часть 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 Ошибки стадии выполнения
- •Ошибки ввода-вывода
- •Фатальные ошибки
- •Библиографический список
3.3 Организация последовательного доступа к записям файла
Режим последовательного доступа используются для решения задач, требующих поочередной обработки компонентов файла при отсутствии жестких ограничений на время решения. Работа с последовательными файлами предполагает создание файла, обработку и возможно корректировку всех его компонентов.
Для создания последовательного файла необходимо выполнить следующие шаги:
присвоить файлу имя (процедура Assign);
открыть новый файл (процедура Rewrite);
подготовить информацию для ввода;
записать в файл компоненты (оператор write);
закрыть созданный файл (процедура Close).
Пример 2. Ввести с клавиатуры в соответствии из табл. 3.1 сведения о двадцати студентах и сохранить эту информацию в файле STUDENTS.DAT в корневом каталоге диска A.
Таблица 3.1
Номер зачетной книжки |
Фамилия студента |
Дата рождения |
Номер группы |
Размер стипендии, руб. |
TAB |
FIO |
DATA |
GRUP |
STEPA |
100000 |
АФАНАСЬЕВ |
01.02.90 |
ПИ-11 |
500.00 |
100001 |
СЫЧЕВ |
13.03.91 |
ПИ-11 |
500.00 |
100002 |
ВАСИЛЬЕВ |
15.01.91 |
ПИ-11 |
350.00 |
100003 |
УШАКОВ |
12.12.90 |
ПИ-11 |
0.00 |
100004 |
СИДОРОВ |
01.11.90 |
ПИ-11 |
500.00 |
100005 |
ГАВРИЛОВ |
10.12.91 |
ПИ-11 |
850.00 |
100006 |
ИВАНОВА |
15.05.90 |
ПИ-11 |
500.00 |
100007 |
ВЕЙНЕРМАН |
09.06.90 |
ПИ-11 |
500.00 |
100008 |
ЯКУШЕВ |
24.10.90 |
ПИ-11 |
0.00 |
100009 |
ЗИБЕРМАН |
13.09.91 |
ИС-11 |
0.00 |
100010 |
АНИСИМОВ |
11.04.91 |
ИС-11 |
500.00 |
100011 |
ПЕТРОВ |
03.05.91 |
ИС-11 |
350.00 |
100012 |
БУНАКОВ |
21.06.90 |
ИС-11 |
850.00 |
100013 |
ФАДЕЕВ |
04.10.90 |
ИС-11 |
350.00 |
100014 |
СЕМЕНОВ |
30.01.90 |
ИС-11 |
500.00 |
100015 |
ЩУКИНА |
15.03.91 |
ИС-11 |
0.00 |
100016 |
ВАХРУШЕВА |
13.02.91 |
ИС-11 |
350.00 |
100017 |
ВЫСОЦКИЙ |
06.08.90 |
ИС-11 |
850.00 |
100018 |
СЕРЕГИНА |
05.04.91 |
ИС-11 |
500.00 |
100019 |
ГОРОХОВ |
15.09.90 |
ИС-11 |
500.00 |
Ниже приведен код программы, выполняющий эту задачу. В качестве рабочей таблицы для промежуточного хранения информации о студентах используется массив записей MSTD. Программа работает в два в два этапа. Первый этап состоит в вводе информации о всех 20 студентах (цикл FOR). На втором этапе создается новый файл A:\STUDENTS.DAT и содержимое таблицы MSTD строка за строкой переносится в этот файл.
PROGRAM PR2;
TYPE STUDENT = RECORD
TAB: LONGINT; {НОМЕР ЗАЧЕТНОЙ КНИЖКИ}
FIO: STRING[20]; {ФАМИЛИЯ И.О.}
DATA: STRING[8]; {ДАТА РОЖДЕНИЯ}
GRUP: STRING[7]; {НОМЕР ГРУППЫ}
STEPA: REAL {РАЗМЕР СТИПЕНДИИ, РУБ.}
END;
VAR MSTD: ARRAY[0..19] OF STUDENT;
I: INTEGER; FSTD: FILE OF STUDENT;
BEGIN {ИНИЦИАЛИЗАЦИЯ ТАБЛИЦЫ}
WRITELN('ВВЕДИТЕ ДАННЫЕ О 20 СТУДЕНТАХ');
FOR I := 0 TO 19
DO WITH MSTD[I] {ВВОД ДАННЫХ В I-ю СТРОКУ ТАБЛИЦЫ}
DO BEGIN
WRITE(I+1: 2,'. НОМЕР ЗАЧЕТНОЙ КНИЖКИ: '); READLN(TAB);
WRITE(' ФАМИЛИЯ И.О. : '); READLN(FIO);
WRITE(' ДАТА РОЖДЕНИЯ : '); READLN(DATA);
WRITE(' НОМЕР ГРУППЫ : '); READLN(GRUP);
WRITE(' РАЗМЕР СТИПЕНДИИ,РУБ.: '); READLN(STEPA)
END;
{ЗАПИСЬ ТАБЛИЦЫ MSTD В ФАЙЛ}
ASSIGN(FSTD, 'A:\STUDENTS.DAT');
REWRITE(FSTD);
FOR I := 0 TO 19
DO IF LENGTH(MSTD[I].FIO) > 0
THEN WRITE(FSTD, MSTD[I]);
CLOSE(FSTD)
END.
В результате выполнения программы в файл STUDENTS.DAT будет занесена информация из табл. 3.1.
Пример 3. В файле STUDENTS.DAT, расположенном в корневом каталоге диска A хранятся сведения о 20 студентах (см. табл. 3.1). Требуется вывести на экран монитора в алфавитном порядке фамилии студентов группы "Информационные системы и технологии" (код ИС-11) и номера зачетных книжек тех студентов, которые получают стипендии указанного размера.
Решение этой задачи осуществляется в три этапа. На первом этапе следует прочитать по порядку все записи из файла режиме последовательного доступа. Каждую запись проанализировать на условия отбора (то есть, отфильтровать). При выполнении условий GRUP = 'ИС-11' и STEPA = 1000 запись о студенте следует поместить в промежуточный массив записей MSTD. Подсчитать K - число записей в массиве.
На втором этапе, если K > 1, следует отсортировать записи в массиве MSTD в порядке возрастания значений поля FIO.
На последнем этапе в зависимости от значения K следует на экран монитора вывести сообщения:
при K = 0 - 'В группе ИС-11 нет студентов не получающих стипендию 1000 руб.';
при K > 0 - список студентов, содержащий поля FIO (Фамилия) и TAB (Номер зачетной книжки).
PROGRAM PR3;
TYPE STUDENT = RECORD
TAB: LONGINT; {НОМЕР ЗАЧЕТНОЙ КНИЖКИ}
FIO: STRING[20]; {ФАМИЛИЯ И.О.}
DATA: STRING[8]; {ДАТА РОЖДЕНИЯ}
GRUP: STRING[7]; {НОМЕР ГРУППЫ}
STEPA: REAL {РАЗМЕР СТИПЕНДИИ, РУБ.}
END;
VAR STD, RAB: STUDENT; MSTD: ARRAY[0..19] OF STUDENT;
FSTD: FILE OF STUDENT; SFILE, SGR: STRING;
I, J, K: LONGINT; STP: REAL;
BEGIN
WRITELN('ВВЕДИТЕ ДИСК, ПУТЬ И ИМЯ ФАЙЛА'); READLN(SFILE);
WRITELN('УКАЖИТЕ НОМЕР ГРУППЫ'); READLN(SGR);
WRITELN('УКАЖИТЕ РАЗМЕР СТИПЕНДИИ'); READLN(STP);
{ЧТЕНИЕ ДАННЫХ ИЗ ФАЙЛА}
ASSIGN(FSTD, SFILE);
RESET(FSTD);
K:=0; {Число записей удовлетворяющих условиям поиска}
WHILE NOT EOF(FSTD)
DO BEGIN
READ(FSTD, STD);
IF (STD.GRUP = SGR) AND (STD.STEPA = STP)
THEN BEGIN
MSTD[K]:=STD; {Копирование записи STD в массив MSTD}
K := K + 1
END
END;
CLOSE(FSTD);
IF K > 0
THEN BEGIN
FOR I := 1 TO K-1
DO FOR J := K-1 DOWNTO I
DO IF MSTD[J-1].FIO > MSTD[J].FIO
THEN BEGIN {Перестановка записей местами}
RAB := MSTD[J-1]; MSTD[J-1] := MSTD[J];
MSTD[J] := RAB
END
END;
IF K>0
THEN FOR I:= 0 TO K-1
DO WRITELN(MSTD[I].FIO:22, MSTD[I].TAB:9, MSTD[I].STEPA: 9:2)
ELSE WRITELN('В группе ',SGR,' нет студентов имеющих стипендию ',
STP: 2: 2, 'руб.')
END.
Если задать значения SGR = 'ИС-11' и STP = 500, то результатом работы программы будет таблица представленная на рис. 3.4.
Рис. 3.4 Результаты работы программы PR3 в окне DOS