
- •Псевдокод
- •Один из примеров псевдокода - школьный алгоритмический язык.
- •Блок-схема
- •Запись на псевдокоде
- •Вопросы для самоконтроля
- •Формулы бэкуса-наура
- •Перминов о.Н. Программирование на языке Паскаль
- •Синтаксические диаграммы
- •Алгоритмы сортировки
- •Сортировка с помощью прямого включения
- •Сортировка с помощью прямого выбора (линейная)
- •Сортировка с помощью прямого обмена (пузырьковая)
- •Быстрая сортировка (ч. Хоара, сортировка с помощью разделения)
- •Рекурсия
- •Параметры-процедуры и параметры-функции
- •Символьные типы
- •Строковые типы
- •Строковые типы в Borland Pascal
- •Строковые типы в Delphi
- •Множества
- •Тип "запись" (record)
- •Вариантная часть записи
- •Процедуры и функции для работы с файлами
- •Работа с текстовыми файлами*
- •Работа с типизированными и нетипизированными файлами
- •Типизированные файлы
- •Последовательный и прямой доступ к файлам
- •Нетипизированные (бестиповые) файлы
- •Класс tfilestream (факультатив, для зачета 1 семестра не требуется)
- •Работа с данными файла
- •Закрытие файла
Типизированные файлы
Типизированный (компонентный) файл содержит набор данных одного типа.
ОБЪЯВЛЕНИЕ В ПРОГРАММЕ
Var
f:File of <тип_компонента>
<тип_компонента> может быть простым или структурированным, предопределенным или определяемым пользователем, но компоненты файла не могут содержать другие файлы или объекты.
Содержимое файла можно рассматривать как непрерывную последовательность записей ранее объявленного типа (<тип_компонента>). Разделители между записями отсутствуют, все записи файла имеют одинаковую длину, равную SizeOf(<тип_компонента>) байт.
Данные в файле хранятся в том же виде, что и в памяти ЭВМ (машинное представление данных).
ПРИМЕР 1. ДОПУСТИМЫЕ ОБЪЯВЛЕНИЯ ТИПИЗИРОВАННЫХ ФАЙЛОВ
-
Type (a)
Arr2X2X2= Array[1..2,1..2,1..2] of integer;
Person=record
Name:String[20];
Age:Byte;
End;
Var
Fi: File of Integer; {Размер записи= 4 (2) байта}
Fc:File of Char; {Размер записи= 1 байт}
Fs:File of String[20]; {Размер записи= 21 байт}
F_Arr: File of Arr2X2X2; {Размер записи= 32 (16) байт}
Fp:File of Person; {Размер записи= 22 байта}
Type (b)
Exam=record
Subject:String[10];
Mark:1..5;
End;
Stud_Marks=Record
StudName:String[20];
ExamsMark:Array[1..5] of Exam;
End;
Var
FSM:File of Stud_Marks; {Размер записи:21+5*(11+1)=81 байт}
Student: Stud_Marks;
ОТКРЫТИЕ ТИПИЗИРОВАННЫХ ФАЙЛОВ
Для открытия файлов используются процедуры Reset и Rewrite. Независимо от того, с помощью какой из процедур открыт файл, его данные будут доступны для чтения и для записи.
Переменная FileMode (тип Byte, модуль System) позволяет задавать режим доступа к данным типизированных и нетипизированных файлов, открытых с помощью процедуры Reset: 0 (режим "только чтение"), 1 (режим "только запись"), 2 (по умолчанию, режим "чтение и запись").
Файлы, открытые с помощью Rewrite, всегда открываются в режиме "чтение/запись".
ЧТЕНИЕ/ЗАПИСЬ ДАННЫХ
Для чтения/записи данных типизированного файла используются процедуры
Read(F, V1[, V2,…Vn])
Write(F, V1[, V2,…Vn]),
где F - файловая переменная, а V1,…Vn - переменные того же типа, что и <тип_компонента>, указываемый при объявлении файловой переменной F.
Так, для открытого файла FSM (пример 1b) допустимы операторы Read(FSM,Student) или Write(FSM,Student), а операторы Readln(FSM, Student), Read(FSM, Student.StudName), Write(FSM, Student.ExamsMark[1].Subject) и т.п. недопустимы.
ОТЛИЧИЯ ТЕКСТОВЫХ ФАЙЛОВ ОТ ТИПИЗИРОВАННЫХ
Пусть задан текстовый файл (Text/TextFile):
-
Я#13#10
изучаю#13#10
информатику#13#10
В этот файл можно дописать (а затем считать) данные любого допустимого типа. Кроме того, в программе можно использовать все процедуры и функции, предназначенные для работы с текстовыми файлами.
Данный текстовый файл можно также рассмотреть как типизированный (File of Char).
-
|Я|#13|#10|и|з|у|ч|а|ю|#13|#10|и|н|ф|о|р|м|а|т|и|к|у|#13|#10|
Cодержимое файла представляется в виде набора символов (тип Char), допустим лишь посимвольный ввод/вывод, а в программе нельзя будет использовать подпрограммы, предназначенные только для текстовых файлов (Readln, Writeln, Append, Eoln и т.п.).
Аналогичные ограничения будут действовать, если сохранить соответствующие строки текстового файла в типизированном файле, объявленном как File of String[255].
Этот файл будет содержать набор строк и допустимым будет «построчный» ввод/вывод.
Размер такого файла будет равен 256*3=768 байт, а его структура изменится:
-
#1Я
не используется
#6изучаю
не используется
#11информатику
не используется
2
256-2
7
256-7
12
256-12
Примечание. В отличие от среды Borland|Free Pascal, в Delphi объявление типизированного файла в виде File of String не допускается (связано с реализацией этого строкового типа в данной среде). Вместо этого используйте типы ShortString/String[n].
В типизированном файле возможен как последовательный, так и прямой доступ к данным (см. далее), а в текстовом – только последовательный.