Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
22-43_Algoritmizatsia.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
53 Кб
Скачать
☆

30. Типизированный файл - последовательность элементов одного типа. Описание файлового типа для работы с типизированным файлом имеет синтаксис:

file of < тип элементов>;

Допустим, мы имеем дело с файлом, в котором записываются переменные типа Word, тогда переменная файлового типа может быть введена двояко – с явным объявлением файлового типа:

Type   WordFile = file of word; Var   MyFile : WordFile;

или

Var   MyFile : file of word;

Пример. Приведем шаблон программы для записи данных в типизированный файл.

Program Writing; Var   FileName : string; {строка, содержащая имя файла}   FVar : file of byte; {переменная файлового типа}   Index : byte; Begin   write ('Введите имя файла ');{предложение ввести имя файла}   readln (FileName);{ввод имени файла}   assign (FVar, FileName);{связь имени файла и переменной}   rewrite (FVar);{открытие файла для записи}   for Index := 0 to 99 do {цикл для расчетов и вывода данных в файл}     write (FVar,Index);{запись в файл FVar величины Index}   close (FVar); {закрытие файла} End.

Вспомним, что типизированный файл - это линейная последовательность элементов одного типа. При каждом обращении к файлу (чтении, записи) его текущий указатель перемещается к следующему элементу. Возникает вопрос: можно ли нарушить порядок доступа к элементам файла и, например, не считывая из файла первый и второй элемент, сразу обратиться к третьему? Оказывается, можно.

Для изменения теущего положения указателя используется процедура

Seek (МуFilе, n);

где n - требуемое положение указателя.

Внимание! Нумерация элементов типизированного файла начинается с нуля.

Следовательно, для обращения к третьему элементу нужно записать: Seek (МуFilе, 2).

Seek (МуFilе, 0) - устанавливает указатель в начальную позицию (на первый элемент).

Seek (МуFilе, FileSize(МуFilе)) - устанавливает указатель после последнего элемента, то есть на признак конца файла.

Примечание. Функция FileSize(МуFilе) возвращает количество элементов типизированного файла МуFilе.

Текущую позицию указателя дает функция

FilePos (МуFilе);

31. Файлы. Организация связи между файловой переменной и внешним файлом. Прямой и последовательный доступ к элементам файла. Изменение имени файла производится процедурой:

rename(МуFilе, FileName);

+ см 29-32. 32. Текстовые файлы. Наряду с типизированными файлами Pascal имеет средства взаимодействия с файлами несколько иной структуры - так называемыми текстовыми файлами. Введение текстовых файлов несколько нарушает стройность языка, однако позволяет использовать Pascal при программировании широкого класса задач, имеющих нечисловой характер и связанных с обработкой текстовой информации. Текстовому файлу в Pascal-программе соответствует переменная, которая должна быть описана с указанием стандартного типа text:

Var   TextFile : text;

Пусть на диске создан текстовый файл text.txt. Для Turbo Pascal описание и связывание файловой переменной f с файлом text.txt, будет выглядеть так :

Var   f: text; Begin   assign(f, 'd:\tp7\bin\text.txt'); {Полный путь к файлу }   reset(f);{Открыть на чтение]   . . . End.

Ввод-вывод для текстовых файлов подчиняется тем же правилам, что и для типизированных файлов; однако имеется несколько важных особенностей.

Во-первых, для одного текстового файла нельзя одновременно производить операции и ввода, и вывода. Это означает, что после открытия текстового файла процедурой reset возможно только чтение информации из файла, а после процедуры rewrite - только запись в файл.

Во-вторых, обмены с текстовыми файлами всегда являются строго последовательными, то есть после чтения из файла элемента с порядковым номером N следующая операция чтения даст элемент с номером N+1. Иными словами, прямой доступ к любому элементу текстового файла невозможен; для текстовых файлов не допускаются вызовы Seek, FilePos, FileSize. !

Покажем простую программу, выполняющую чтение некоторого текста. Эта программа выводит на экран последовательность кодов символов, составляющих файл text.txt.

Program TextFile1; Var   f : text; {Читаемый текст}   S : char; {Очередной прочитанный символ} Begin   assign(f, 'text.txt'); {Связываем файл text.txt с переменной f}   reset(f); {Открываем файл text.txt для чтения}   while not Eof(f) do {Пока не достигнут конец файла, делай...}     begin       read(f, S); {Читаем из файла очередной символ в переменную S}       writeln(S:2, ord(S):4); {Выводим символ и его код на экран}     end;   close(f); {Закрываем файл}   readln End.

Часто для обработки текстовых файлов используется специфичная для них функция Eoln, позволяющая определить, достигнут ли конец строки. Если достигнут - значение функции равно True, а если нет - False. Таким образом, для анализа конкретных символов строк файла можно применить вложенный цикл типа:

while not Eof(FileName) do {пока не достигнут конец файла FileName, делай}   while not Eoln(FileName) do {пока не достигнут конец очередной строки файла FileName, делай}     begin       {группа операторов обработки символов очередной строки}     end;

33. Модуль (UNIT -модуль, единица) – автономно (отдельно) компилируемая программная единица, которая  содержит компоненты раздела описаний (меток, констант, типов, переменных, процедур, функций), а также может содержать операторы инициализирующей части. Сам модуль не является выполняемой программой, а предназначен для использования другими программами и  модулями.

Unit <имя_модуля>; interface <интерфейсная часть>; implementation < исполняемая часть >; begin <инициирующая часть>; end .

Здесь UNIT – зарезервированное слово (единица); начинает заголовок модуля;

  • <имя_модуля> - имя модуля (правильный идентификатор);

  • INTERFACE – зарезервированное слово (интерфейс); начинает интерфейсную часть модуля;

  • IMPLEMENTATION – зарезервированное слово (выполнение); начинает исполняемую часть модуля;

  • BEGIN – зарезервированное слово; начинает инициирующую часть модуля; причем конструкция begin <инициирующая часть> необязательна;

  • END – зарезервированное слово – признак конца модуля.

Таким образом, модуль Паскаля состоит из заголовка и трех составных частей, любая из которых может быть пустой.

uses<список модулей>

Здесь USES – зарезервированное слово (использует);

<список модулей> - список модулей, с которыми устанавливается связь; элементы списка – имена модулей через запятую.

Интерфейсная часть – начинается с ключевого словаInterface (интерфейс, сочленение, соединение) и содержит обращение к другим модулям и объявления (описания) глобальных объектов  т. е. меток, констант, типов, переменных, и заголовков  процедур и функций которые доступны основной программе и другим модулям (т. е. видимые из вне).

     Раздел реализации – начинается с ключевого словаImplementation(выполнение) и содержит описание локальных для модуля объектов  т. е. меток, констант, типов, переменных которые не доступны основной программе и другим модулям (т. е. не видимые из вне) и полное описание процедур и функций. При этом в заголовке подпрограмм список формальных параметров м.б. опущен, но если он приводится то должен точно соответствовать описанию в интерфейсной части.

     Раздел инициализации – заключается в словесные скобки   BEGIN   END. и содержит операторы, которые будут выполнены до передачи управления основной программе. Это м.б. операторы инициализации данных (переменных) Например операторы присваивания, ввода а также процедуры связывания и открытия файлов. Раздел операторов м.б. пустымBEGIN   END или отсутствовать простоEND.     В конце модуля ставится точка.