- •Р.К. Ахмадулин технология программирования
- •Оглавление
- •§1. Основные понятия
- •Основные символы языка Паскаль
- •Элементарные конструкции языка Паскаль
- •Примеры записи чисел и выражений на языке Паскаль
- •Вопросы для самопроверки
- •§2. Типы данных
- •Целые типы
- •Вещественные типы
- •Символьный тип
- •Логический тип
- •Скалярные типы, определяемые пользователем
- •Вопросы для самопроверки
- •§3. Операции и выражения
- •Приоритет операций и отношений в выражениях
- •Стандартные (встроенные) функции
- •Вопросы для самопроверки
- •§4. Структура программы
- •Комментарии
- •Директивы компилятора
- •Оформление исходного текста
- •Вопросы для самопроверки
- •§5. Переменные и константы. Оператор присваивания
- •Понятие константы
- •Понятие переменной
- •Оператор присваивания
- •Совместимость типов данных
- •Понятие типизированной константы
- •Вопросы для самопроверки
- •§6. Процедуры ввода и вывода
- •Процедуры вывода
- •Форматированный вывод
- •Процедуры ввода
- •Вопросы для самопроверки
- •§7. Условный оператор и оператор выбора. Оператор перехода
- •Условный оператор if
- •Понятие составного оператора
- •Оператор выбора
- •Оператор перехода
- •Вопросы для самопроверки
- •§8. Операторы цикла
- •Циклы с заданным числом итераций
- •Циклы с предусловием
- •Циклы с постусловием
- •Вопросы для самопроверки
- •§9. Пример использования циклов
- •Вычисление факториала
- •Вычисление суммы по заданной формуле
- •Вычисление суммы по формуле с заданной точностью
- •Вычисление максимального элемента последовательности
- •Вычисление длины последовательности элементов
- •Вопросы для самопроверки
- •§10. Массивы
- •Описание массива
- •Обращение к элементам массива
- •Многомерные массивы
- •Допустимые операции с массивами
- •Инициализация массива
- •Вопросы для самопроверки
- •§11. Алгоритмы сортировки
- •Сортировка выбором
- •Сортировка вставкой
- •Пузырьковая сортировка
- •Улучшенные сортировки
- •Вопросы для самопроверки
- •§12. Строковый тип
- •Описание строковых переменных
- •Операции над строками
- •Процедуры и функции для работы со строками
- •Вопросы для самопроверки
- •§13. Записи
- •Объявление записи
- •Обращение к записям
- •Оператор присоединения with
- •Записи с вариантами
- •Инициализация записи
- •Вопросы для самопроверки
- •§14. Множества
- •Описание множеств
- •Операции над множествами
- •Пример использования множеств
- •Множества как типизированная константы
- •Вопросы для самопроверки
- •§15. Процедуры и функции
- •Понятие процедуры и функции
- •Структура процедуры
- •Структура функции
- •Формальные параметры
- •Глобальные и локальные объекты
- •Вопросы для самопроверки
- •§16. Модули
- •Понятие модуля
- •Стандартные модули в Турбо Паскаль
- •Подключение модулей
- •Структура модуля
- •Вопросы для самопроверки
- •§17. Файлы
- •Понятие файла
- •Процедуры и функции для работы с файлами
- •Понятие буфера ввода-вывода
- •Вопросы для самопроверки
- •§18. Типизированные файлы
- •Описание типизированных файлов
- •Операции над типизированными файлами
- •Последовательный и прямой доступ
- •Вопросы для самопроверки
- •§20. Текстовые файлы
- •Описание типизированных файлов
- •Чтение и запись
- •Конец строки и конец файла
- •Дополнительные процедуры для работы с текстовыми файлами
- •Файлы Input и Output
- •Вопросы для самопроверки
- •§21. Ссылки и указатели
- •Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Выделение и освобождение динамической памяти
- •Вопросы для самопроверки
- •Рекомендуемая литература
- •Технология программирования
- •625000, Тюмень, ул. Володарского, 38
- •625039, Тюмень, ул. Киевская, 52
Понятие буфера ввода-вывода
Следует отметить, что с файловой системой в Паскале связано понятие буфера ввода-вывода.
Буфер – это область в памяти, которая выделяется для каждого файла. При записи в файл вся информация сначала направляется в буфер и накапливается там до тех пор, пока весь объем буфера не будет заполнен. Только после этого (или после специальной команды) происходит передача данных на внешнее устройство. При чтении из файла данные вначале считываются в буфер, причем не сколько запрашивается, а сколько поместится в буфер.
Механизм буферизации позволяет более быстро и эффективно обмениваться информацией с внешними устройствами. Однако следует отметить, что если по какой-то причине при завершении работы с выходным файлом не будет выполнена процедура Close, то файл хотя и будет создан на внешнем устройстве, но содержимое последнего буфера в него не перенесется.
Вопросы для самопроверки
1. Что понимают под файлами в языке Паскаль?
2. Какие типы файловых переменных существуют в языке Паскаль?
3. Какие основные операции над файлами существуют в языке Паскаль?
4. Что такое буфер ввода-вывода?
§18. Типизированные файлы
Типизированный файл – это файл с объявленным типом его компонент.
Типизированные файлы хранят информацию в том виде, в котором она представлена в памяти компьютера. В этом плане они неудобны для человека: его нельзя просмотреть, создать или отредактировать, например, с помощью текстового редактора. Однако все эти неудобства компенсируются скоростью работы с данными.
Элементы типизированных файлов могут относиться к любому базовому или структурированному типу данных. Единственное ограничение: все элементы должны быть одного и того же типа.
Описание типизированных файлов
Описание типизированных файлов может иметь вид:
type <имя файлового типа> = file of <тип компонент>;
Пример: описать переменную - типизированный файл
type
FIO = String[20];
Spisok = file of FIO;
var
Stud: Spisok;
Prep: Spisok;
Здесь Stud, Prep – имена файлов, компонентами которых являются строки.
Описание файлов можно задавать и непосредственно в разделе описания переменных.
Пример: описание файловых переменных в разделе var
var
fsimv: file of char;
fr: file of real;
Как уже упоминалось выше, компонентами файла могут быть все скалярные типы, а из структурированных – массивы, множества, записи. Практически во всех конкретных реализациях языка Паскаль конструкция "файл файлов" недопустима.
Никакая файловая переменная не может быть задана константой.
Операции над типизированными файлами
Для типизированных файлов применимы процедуры Assign, Reset, Rewrite, Close, Rename, Erase, Eof, IOResult, рассмотренные ранее. Именно с помощью указанных процедур над типизированными файлами производятся такие операции, как связывание с физическим файлом, открытие и закрытие файла и т.п.
Для организации же ввода-вывода в типизированных файлах используются процедуры Read и Write:
Read(f, X);
Write(f, X);
где f – имя типизированного файла, а Х – переменная с таким же описанием, какое имеет компонента файла.
Выполнение процедуры Read(f, X) состоит в чтении с внешнего устройства одной компоненты файла и записи ее в X. Повторное применение процедуры Read(f, X) обеспечит чтение следующей компоненты файла и запись ее в X.
Пример: напечатать на экране все числа из файла
var
f: file of integer;
x: integer;
begin
assign(f, ‘c:\test.dat’);
reset(f);
while not eof(f) do
begin
read(f, x);
writeln(x);
end;
close(f);
end.
Выполнение процедуры Write(f, X) состоит в записи X в файл как одной компоненты. Повторное применение этой процедуры обеспечит запись X как следующей компоненты файла.
Пример: записать в файл 5 чисел, заданных пользователем
var
f: file of integer;
x: integer;
begin
assign(f, ‘c:\test.dat’);
rewrite(f);
for i:=1 to 5 do
begin
write(‘Введите число для записи в файл: ’);
readln(x);
write(f, x);
end;
close(f);
end.
Для работы с типизированными файлами можно использовать и расширенную форму записи операторов ввода и вывода:
Read(f, X1, X2, …, XK);
Write(f, X1, X2, …, XK);
Здесь f – типизированный файл, а переменные Х1, Х2, … ХК должны иметь тот же тип, что и объявленный тип компонент файла f.
Пример: записать в файл 5 чисел
var
f: file of integer;
x: integer;
begin
assign(f, ‘c:\test.dat’);
rewrite(f);
write(f, 10, 12, 32, 43, 24);
close(f);
end.