- •Содержание
- •1Алгоритмы линейных структур
- •2 Циклы
- •Введение
- •1 Алгоритмы линейных структур
- •1.1 Этапы разработки программы
- •1.2 Основные понятия
- •1.3 Основная структура программы
- •1.4 Алфавит языка
- •1.5 Идентификаторы
- •1.6 Константы
- •1.7 Понятие переменной Типы
- •1.8 Оператор присваивания Арифметические выражения
- •1.9 Операторы ввода и вывода информации
- •1.10 Практические задачи
- •1.11 Примеры решения задач
- •2 Циклы
- •2.1 Цикл с предусловием
- •Цикл с постусловием
- •Цикл со счетчиком
- •2.2 Задачи
- •2.3 Примеры
- •3 Немного об алгоритмах Алгоритм Кнута - Морриса - Пратта
- •Алгоритм Бойера – Мура
- •Алгоритм Рабина
- •Алгоритмы сортировки
- •Метод пузырька.
- •Сортировка выбором
- •Метод Шелла
- •Метод Хoopа
- •3.1 Разветвляющиеся алгоритмы
- •3.2 Задачи Свойства и виды треугольников (задачи 1-4)
- •Свойства и виды четырехугольников (задачи 5, 6)
- •Каким будет значение переменной а после выполнения фрагмента программы с составным оператором?
- •4 Массивы
- •4.1 Объявление массива
- •4.2 Действия над массивами
- •4.3 Вывод массива
- •4.4 Ввод массива
- •4.5 Сортировка массива
- •4.6 Поиск в массиве
- •4.7 Поиск минимального (максимального) элемента массива
- •4.8 Многомерные массивы
- •4.9 Ошибки при использовании массивов
- •4.10 Практические задачи
- •5 Множества
- •5.1 Описание типа множество
- •5.2 Операции над множествами
- •5.3 Группы операций
- •5.4 Упражнения
- •5.5 Задачи Тема: Множества
- •6 Записи
- •6.1 Понятие записи
- •6.2 Оператор присоединения With ... Do
- •6.3 Вариантные записи
- •6.4 Работа с файлами записей
- •6.5 Задачи
- •7 Файлы
- •7.1 Работа с файлами
- •7.2 Текстовые файлы
- •7.3 Типизированные файлы
- •7.4 Нетипизированные файлы
- •7.5 Задачи
- •8 Графика
- •8.1 Графика в Турбо Паскале
- •8.2 Базовые процедуры и функции
- •Процедуры модуля Graph
- •Функции модуля Graph
- •8.3 Экран и окно в графическом режиме
- •8.4 Вывод простейших фигур
- •8.5 Графические процедуры
- •8.6 Построение прямоугольников
- •8.7 Построение многоугольников
- •8.8 Построение дуг и окружностей
- •8.9 Работа с текстом
- •8.10 Построение графиков функций
- •8.11 Циклы в графике. Построение случайных процессов
- •8.12 Создание иллюзии движения
- •Задания
- •Контрольные тесты
- •1. Программирование алгоритмов линейных структур
- •2. Программирование алгоритмов разветвляющейся структуры
- •3. Программирование алгоритмов циклических структур
- •4. Массивы
- •5. Множества
- •6. Записи
- •7. Файлы
- •8. Графика
7 Файлы
7.1 Работа с файлами
В Паскале имеются три класса файлов: текстовый файл, типизированный файл и нетипизированный файл. Начнем с текстовых файлов.
7.2 Текстовые файлы
Текстовый файл содержит последовательность символов, организованных в строки, причем каждая строка заканчивается специальным символом возврата каретки CR#13 и перевода строки LF#10. Заканчивается текстовый файл признаком конца файла. Специальные символы обычно не отображаются программами просмотра текстовых файлов, Работу с текстовыми файлами обеспечивает модуль System Турбо Паскаля, не требующий использования оператора uses.
В Паскале имеется стандартный файловый тип text. Прежде чем приступить к операциям над текстовыми файлами, необходимо ввести переменные (одну или несколько) типа text:
var in_file: Text;
Переменная in_f1le сопоставляется внешнему файлу на диске или какому-нибудь устройству процедурой Assign:
Assign(in_fi1e. 'C:\user\Newton\my_file'):
Assign(my_text. 'prn'):
Процедура Assign связывает имя внешнего файла с файловой переменной. Внешний файл может быть обычным файлом, расположенным на жестком диске, компьютера, но это может быть и файл, связанный с каким-либо устройством, например, дисплеем или принтером. Файловая переменная далее используется D программе в качестве параметра процедур работы с файлами.
Следующий шаг заключается в том, что внешний файл надо открыть для записи или чтения из него какой-то информации. При открытии файла выполняются необходимые системные операции, подготавливающие файл к записи или считыванию информации. Текстовый файл my file открывается процедурой Reset(my_file) только для чтения и процедурой Rewrite(my_file) — только дли записи.
При завершении обработки файла программой он должен закрываться. После закрытия файла связанный с ним внешний файл обновляется. Затем файловая переменная может быть связана с другим внешним файлом. Закрывается файл с помощью процедуры Close(my_file).
После того как текстовый файл открыт, с ним можно выполнять определенные действия, и прежде всего это запись в файл и чтение из него. Доступ к текстовому файлу организуется последовательно — это означает, что программа не может в любой момент времени считать из него произвольную порцию информации или произвести запись в произвольное место файла. Любой файл представляет собой линейную последовательность элементов, каждый из которых имеет свой помер. Можно считать, что имеется указатель, который при считывании очередного элемента файла перемещается к следующему элементу (то есть становится ближе к концу файла).
Для чтения из текстового файла или записи в текстовый файл можно использовать процедуры Write, WriteLn, Read и ReadLn, но в качестве первого параметра в этих процедурах должна быть указана файловая переменная:
Read(in_file. а. х):
WriteLn(out file. 'Urgent message!'):
Первая процедура присваивает а и х значения очередных двух элементов из in_file.
Опepaтop вывода допускает описание формата вывода. Если а является выражением целого, булевого или строкового типа, то
WriteLn(a:n);
означает запись а в правые позиции поля размером в n позиций. Если указанная длина поля n меньше, чем длина значения а, то заданная длина игнорируется, например,
WrIteLn('12345', 3);
приведет к выводу всего символьного значения 12345. Значение n может быть и отрицательным, в этом случае значение записывается в левые n позиций. В том случае, когда а имеет вещественный тип, должны быть описаны два поля формата:
Write(a:10:3);
Такое обращение к процедуре вывода означает запись а в форме с фиксированной точкой, с тремя десятичными разрядами и выравниванием по правой границе поля размером 10 позиций.
Мы уже знаем, что в Паскале имеются две стандартных файловых переменных текстового типа — Input и Output. Стандартная файловая переменная Input представляет собой доступный только для чтения файл, связанный со стандартным файлом ввода операционной системы (клавиатура). Вторая стандартная файловая переменная Output — это доступный только для записи файл, связанный со стандартным файлом вывода (дисплей). Перед началом выполнения программы DOS эти файлы автоматически открываются. Имя файла в процедурах Read и Write не указывается, если работа ведется со стандартным файлом. При обращениях к стандартным функциям и процедурам ввода/вывода автоматически производится проверка на наличие ошибок. При обнаружении ошибки программа прекращает работу и выводит на экран сообщение. Иногда это неудобно. С помощью директив компилятора {$I+} и {$I-} автоматическую проверку ошибок ввода/вывода можно включить или выключить. Если автоматическая проверка отключена, ошибки ввода/вывода, возникающие при работе программы, не приводят к ее останову. Стандартная функция IOResult возвращает код ошибки. Нулевое значение кода ошибки означает нормальное завершение операции ввода/вывода. В табл. 1 приведены процедуры и функции для работы с файлами (не обязательно текстовыми).
Таблица Процедуры и функции для работы с файлами
Функция |
Описание |
procedure Append(var f: text)
procedure Assign(var f: String)
procedure BlockRead(var F: File; var Buf; Count: Word)
procedure BlockWrite(var F: File; var Buf; Count: Word)
procedure ChDir(S: String)
procedure Close(var F)
procedure Erase(var F)
function Eof(var F): boolean
function FiTePos(var F): Longlnt
function FileSize(var F): Longlnt
procedure Flush(var F: text)
procedure GetDir(D: Byte: var S: String);
function lOResult: Integer
procedure MkDir(S: String)
procedure Read(var F: text; v1, ...)
procedure Readln(var F: text; v1, ...)
procedure Renane(var F, S)
procedure Reset(var F)
procedure Rewrite(var F)
procedure RMDir(S: String)
function SeekEof(var F: text): Boolean
function SeekEoln(var F: text): Boolean
procedure SetTextBuf(var F: Text var Buf)
procedure Truncate(var F)
procedure Write(var F: text, v1, ...)
Procedure Writeln(var F: text, v1, ...) |
Открывает существующий файл, связанный с файловой переменной f, для добавления в него новых записей Связывает внешний файл, имя которого указано в _ строковой константе String, с файловой переменной f Считывает из нетипизированного файла, связанного с файловой переменной f, одну или несколько записей (их количество задается целочисленным выражением Count) в переменную Buf Записывает в нетипизированный файл, связанный с файловой переменной f, одну или несколько записей (их количество задается целым выражением Count) из переменной Buf Выполняет смену текущего каталога на каталог, маршрут к которому указан в текстовой переменной S Закрывает открытый файл, связанный с файловой переменной F Стирает внешний файл, связанный с файловой переменной F Возвращает для файла, связанного с файловой переменной F, состояние End-of-file (конец файла): True — если текущее положение указателя находится в конце файла или файл пустой; False — во всех остальных случаях Возвращает текущую позицию для файла, связанного с файловой переменной F. При положении текущего указателя в начале файла возвращает нулевое значение. Для текстовых файлов не используется Возвращает текущий размер файла, связанного с файловой переменной F. Если файл пустой, возвращает нулевое значение. Для текстовых файлов не используется Сбрасывает буфер текстового файла, связанного с файловой переменной F и открытого для вывода процедурами Rewrite или Append. Это дает гарантию того, что вся информация, записываемая в файл, будет сохранена во внешнем файле. Не влияет на файлы, открытые для ввода Возвращает текущий каталог на заданном диске. Имя каталога находится в строковой переменной S, а диск задается значением параметра D: 0 — текущий диск; 1 — диск А; 2 — диск В; 3 — диск С и т. д. Если значение, заданное в параметре D, неверное, возвращается результат «X:\» Возвращает целое значение, являющееся состоянием последней выполненной операции ввода/вывода. Нулевое значение соответствует нормальному завершению операции Создает подкаталог, имя для которого задается строковой переменной S Считывает одно или несколько значений из файла, связанного с файловой переменной F, в одну или несколько переменных vl... To же, что и Read, но выполняет пропуск до начала следующей строки текстового файла Переименовывает внешний файл, связанный с файловой переменной F, присваивая ему имя, содержащееся в строковой переменной S Открывает существующий файл, связанный с файловой переменной F. Текущий указатель устанавливается в начало файла. Текстовый файл открывается только для чтения Создает и открывает новый файл, связанный с файловой переменной F. Если файл с указанным именем уже существует, старый файл будет стерт, а на его месте создается новый пустой файл. Текущий указатель устанавливается в начало файла Удаляет пустой подкаталог, маршрут которого указан в строковой переменной S Перемещает текущую позицию в файле, связанном с файловой переменной F, на заданный элемент. Началу файла соответствует нулевое значение N. Для текстовых файлов не используется Возвращает для текстового файла, связанного с файловой переменной F, состояние «конец файла» Возвращает для текстового файла, связанного с файловой переменной F, состояние «конец строки» Назначает для текстового файла, связанного с файловой переменной F, буфер ввода-вывода. Никогда не применяется к открытым файлам, поскольку в этом случае возможны потери данных Усекает размер файла, связанного с файловой переменной F, до текущей позиции. Вся информация после текущего положения указателя теряется. Для текстовых файлов не используется Записывает в файл, связанный с файловой переменной F, одно или несколько значений, хранящихся в переменных vl... Файловая переменная может быть связана не только с текстовым файлом. В случае текстового файла значения могут иметь целый, вещественный, строковый, символьный или булев типы. В случае типизированного файла тип значений должен совпадать с типом компонентов файла Делает то же, что Write, но затем записывает в текстовый файл признак конца строки |