
- •Заголовок программы
- •Раздел объявлений и соглашений
- •Раздел текстов процедур и функций
- •Тело программы
- •Структура программы, или главный порядок
- •4. Зарезервированные слова, идентификатор, константа, переменная, типизированная константа и инициализированная переменная. Зарезервированные слова Turbo Pascal 7.0
- •Идентификаторы или имена
- •4.2. Константы в Turbo Pascal 7
- •4.2.1. Целые константы
- •4.2.2. Вещественные константы
- •4.2.3. Строковые и символьные константы
- •4.2.4. Константные выражения
- •4.2.5. Типизированные константы
- •5. Арифметические и логические выражения, операнд, операция, оператор, комментарии.
- •1. Арифметические операции
- •2. Логические операции
- •8. Порядковые, перечисляемые, интервальные и структурированные типы.
- •9. Строки, массивы, множества, записи, указатели, файлы.
- •10. Иерархические структуры типов, данных и подпрограмм.
- •11. Описание, объявление и способы инициализации данных. Свойства типов и данных
- •12. Виды и приоритет элементарных операций (унарные, бинарные, арифметические, логические, отношения). Оператор присваивания и автоматическое преобразование типов операндов. Логические операции
- •13. Условные и безусловные операторы. Операторы перехода и выбора.
- •Оператор безусловного перехода
- •Оператор выбора
- •Цикл с предусловием
- •Цикл с постусловием
- •15. Директивы компилятора (препроцессора).
- •16. Процедуры и функции, их объявление, описание, вызов. Процедурные типы.
- •17. Формальные и фактические параметры. Особенности передачи параметров.
- •18. Стандартные и собственные модули, их организация.
- •19. Встроенные процедуры ввода-вывода информации. Спецификация формата вывода.
- •20. Подпрограммы для работы со строками.
- •22. Открытые и динамические массивы.
- •23. Динамическое определение и преобразование типа переменной.
- •24. Встроенные процедуры и функции для работы с динамическими элементами.
- •25. Указатели, односторонние и двухсторонние списки. Приемы работы с указателями.
- •Списки с двойной связью
- •28. Объектно-ориентированное программирование. Основная идея, принципы, понятия.
- •29. Классы, объекты, методы и свойства.
- •30. Инкапсуляция, наследование, полиморфизм. Конструкторы и деструкторы.
- •31. Интерфейс и система управления реализацией программного проекта.
- •36. Библиотеки, их организация и подключение.
- •37. Тестирование и оценка эффективности программ.
Списки с двойной связью
Каждый элемент в списке с двойной связью имеет указатель на следующий элемент списка и указатель на предыдущий элемент списка.
Список, который вместо одной имеет две связи, отличается двумя основными преимуществами. Во-первых, список может читаться в обоих направлениях. Это не только упрощает сортировку списка, но также позволяет пользователям базы данных просматривать данные в обоих направлениях. Во-вторых, и прямая и обратная связь позволяют прочитать список полностью и поэтому при нарушении одной из связей список может быть восстановлен по другой связи. Это свойство имеет смысл использовать при отказах оборудования, приводящих к нарушению списка.
Для списка с двойной связью предусматриваются три основные операции: вставка нового первого элемента, вставка нового среднего элемента и вставка нового последнего элемента.
Список с двойной связью строится подобно списку с одной связью, причем в записи должно быть предусмотрено место для двух указателей.
Указатели:
26. Типизированные, не типизированные и текстовые файлы. Файловая переменная. Определение. Файлом называется область памяти жесткого диска, имеющая свое имя.
Вы знаете, различные виды физических файлов: системные, графические, текстовые и другие, зачастую созданные той или иной прикладной программой. И любой из этих физических файлов, Вы сможете считать, проанализировать и повлиять на его изменение и запись. Но чтобы работать с конкретным физическим файлом на диске, надо представить в программе так называемую файловую переменную и произвести их логическую связку.
Зачем нужны файлы? Дело в том, что количество элементов файла может быть любым: число компонент файла может изменяться (увеличиваться или уменьшаться), то есть заранее не фиксируется. Поэтому в них можно хранить достаточно большое количество данных. После каждого элемента автоматически ставится признак конца элемента, а в конце файла ставится признак конца файла.
Один и тот же физический файл(Файловый тип или переменную файлового типа) можно по-разному представить в программе. Язык Турбо Паскаль предлагает три вида такого представления:
file of тип - типизированный файл (указан тип компоненты);
text - текстовый файл;
file - нетипизированный файл.
И Вы, в зависимости от решаемой задачи, вольны выбирать один их трех видов, а может быть и несколько. Но чтобы определиться, Вы должны хорошо знать не только процедуры и функции, являющиеся общими для всех видов файлов, но и специфичные для каждого вида.
Работа с типизированными файлами
Типизированный файл - это последовательность компонент любого заданного типа (кроме типа "файл"). Доступ к компонентам файла осуществляется по их порядковым номерам. Компоненты нумеруются, начиная с 0. После открытия файла указатель (номер текущей компоненты) стоит в его начале на нулевом компоненте. После каждого чтения или записи указатель сдвигается к следующему компоненту.
Запись в файл:
Write(f, список переменных);
Процедура записывает в файл f всю информацию из списка переменных.
Чтение из файла:
Read(f, список переменных);
Процедура читает из файла f компоненты в указанные переменные. Тип файловых компонент и переменных должны совпадать. Если будет сделана попытка чтения несуществующих компонент, то произойдет ошибочное завершение программы. Необходимо либо точно рассчитывать количество компонент, либо перед каждым чтением данных делать проверку их существования (функция eof, см. выше)
Смещение указателя файла:
Seek(f, n);
Процедура смещает указатель файла f на n-ную позицию. Нумерация в файле начинается с 0.
Определение количества компонент:
FileSize(f): longint;
Функция возвращает количество компонент в файле f.
Определение позиции указателя:
FilePos(f): longint;
Функция возвращает порядковый номер текущего компонента файла f.
Отсечение последних компонент файла:
Truncate(f);
Процедура отсекает конец файла, начиная с текущей позиции включительно.
Работа с текстовыми файлами
Текстовый файл - это совокупность строк, разделенных метками конца строки. Сам файл заканчивается меткой конца файла. Доступ к каждой строке возможен лишь последовательно, начиная с первой. Одновременная запись и чтение запрещены.
Чтение из текстового файла:
Read(f, список переменных);
ReadLn(f, список переменных);
Процедуры читают информацию из файла f в переменные. Способ чтения зависит от типа переменных, стоящих в списке. В переменную char помещаются символы из файла. В числовую переменную: пропускаются символы-разделители, начальные пробелы и считывается значение числа до появления следующего разделителя. В переменную типа string помещается количество символов, равное длине строки, но только в том случае, если раньше не встретились символы конца строки или конца файла. Отличие ReadLn от Read в том, что в нем после прочтения данных пропускаются все оставшиеся символы в данной строке, включая метку конца строки. Если список переменных отсутствует, то процедура ReadLn(f) пропускает строку при чтении текстового файла.
Запись в текстовый файл:
Write(f, список переменных);
WriteLn(f, список переменных);
Процедуры записывают информацию в текстовый файл. Способ записи зависит от типа переменных в списке (как и при выводе на экран). Учитывается формат вывода. WriteLn от Write отличается тем, что после записи всех значений из переменных записывает еще и метку конца строки (формируется законченная строка файла).
Добавление информации к концу файла:
Append(f)
Процедура открывает текстовый файл для добавления информации к его концу. Используйте эту процедуру вместо Rewrite.
Работа с нетипизированными файлами
Нетипизированные файлы - это последовательность компонент произвольного типа.
Открытие нетипизированного файла:
Reset(f, BufSize)
Rewrite(f, BufSize)
Параметр BufSize задает число байтов, считываемых из файла или записываемых в него за одно обращение. Минимальное значение BufSize - 1 байт, максимальное - 64 К байт. Если BufSize не указан, то по умолчанию он принимается равным 128.
Чтение данных из нетипизированного файла:
BlockRead(f, X, Count, QuantBlock);
Эта процедура осуществляет за одно обращение чтение в переменную X количества блоков, заданное параметром Count, при этом длина блока равна длине буфера. Значение Count не может быть меньше 1. За одно обращение нельзя прочесть больше, чем 64 К байтов.
Необязательный параметр QuantBlock возвращает число блоков, прочитанных текущей операцией BlockRead. В случае успешного завершения операции чтения QuantBlock = Count, в случае аварийной ситуации параметр QuantBlock будет содержать число удачно прочитанных блоков. Отсюда следует, что с помощью параметра QuantBlock можно контролировать правильность выполнения операции чтения.
Запись данных в нетипизированный файл:
BlockWrite(f, X, Count, QuantBlock);
Эта процедура осуществляет за одно обращение запись из переменной X количества блоков, заданное параметром Count, при этом длина блока равна длине буфера.
Необязательный параметр QuantBlock возвращает число блоков, записанных успешно текущей операцией BlockWrite.
Для нетипизированных файлов можно использовать процедуры Seek, FIlePos и FileSize, аналогично соответствующим процедурам типизированных файлов.
27. Встроенные процедуры и функции для работы с файлами. Встроенные процедуры и функции для работы с файлами.
Процедуры и функции работы с файлами |
Модуль System |
Procedure AssignFile(var F; FileName: String); Для избежания конфликтов, AssignFile заменяет стандартную процедуру Assign в Delphi. Однако для обратной совместимости вы можете использовать Assign. Процедура AssignFile сопоставляет имя внешнего файла с файловой переменной. F - файловая переменная любого файлового типа |
|
Procedure CloseFile(var F); Из-за конфликтов наименования, процедура CloseFile заменяет стандартную процедуру Close из Borland Pascal. Используйте CloseFile чтобы разорвать связь между файловой переменной и внешним дисковым файлом и закрыть файл. F - файловая переменная любого файлового типа |
|
Function Eof(var F): Boolean; (типизированные или нетипизированные файлы) Function Eof[(var F: Text)]: Boolean; (текстовые файлы) Проверяет, является или нет текущая позиция файла концом файла. Eof(F) возвращает True, если текущая позиция файла находится за последним символом файла или если файл пуст; иначе, Eof (F) возвращает False. |
|
Procedure Erase(var F); Удаляет внешний файл, связанный с F. F - файловая переменная любого файлового типа. Перед вызовом процедуры Erase, файл необходимо закрыть. |
|
Function FileSize(var F): Integer; Возвращает размер в байтах файла F. Однако, если F - типизированный файл, FileSize возвратит число записей в файле. |
|
Function FilePos(var F): LongInt; Возвращает текущую позицию файла внутри файла. |
|
Procedure Reset(var F [: File; RecSize: Word]); Открывает существующий файл. F - переменная любого файлового типа, связанного с внешним файлом с помощью AssignFile. RecSize - необязательное выражение, которое используется, если F - нетипизированный файл. Если F - нетипизированный файл, RecSize определяет размер записи, который используется при передаче данных. Если RecSize опущен, заданный по умолчанию размер записи равен 128 байт. Процедура Reset открывает существующий внешний файл, ассоциированный с файловой переменной F. Если внешнего файла с таким именем нет, возникает ошибка времени выполнения. Если файл, связанный с F уже открыт, он сначала закрывается и затем вновь открывается. Текущая позиция файла устанавливается к началу файла. |
|
Procedure Rewrite(var F: File [; Recsize: Word]); Создает и открывает новый файл. F - переменная любого файлового типа, связанного с внешним файлом с использованием AssignFile.RecSize - необязательное выражение, которое используется, если F - нетипизированный файл. Если F - нетипизированный файл, RecSize определяет размер записи, который используется при передаче данных. Если RecSize опущен, заданный по умолчанию размер записи равен 128 байт. Процедура Rewrite создает новый внешний файл с именем, связанным с F. Если внешний файл с тем же самым именем уже существует, он удаляется, и создается новый пустой файл. |
|
Procedure Seek(var F; N: LongInt); Перемещает текущую позицию файла к определенному компоненту. Вы можете использовать процедуру только с открытыми типизированными или нетипизированными файлами. Текущая позиция файла F перемещается к номеру N. Номер первого компонента файла - 0. Инструкция Seek(F, FileSize(F)) перемещает текущую позицию файла в конец файла. |
|
Procedure Append(var F: Text); Открывает существующий текстовый файл для добавления информации в конец файла (дозаписи). Если внешнего файла с данным именем не существует, происходит ошибка времени выполнения. Если файл F уже открыт, он закрывается и вновь открывается. Текущая позиция файла устанавливается к концу файла. |
|
Function Eoln[(var F: Text)]: Boolean; Проверяет, является ли текущая позиция файла концом строки текстового файла. Eoln(F) возвращает True, если текущая позиция файла - в конце строки или файла; иначе Eoln(F) возвращает False. |
|
Procedure Read(F, V1 [, V2, ..., Vn]); (типизированные и нетипизированные файлы) Procedure Read([var F: Text;] V1 [, V2, ..., Vn]); (текстовые файлы) Для типизированных файлов процедура читает компонент файла в переменную. При каждом считывании текущая позиция в файле продвигается к следующему элементу. Для текстовых файлов читается одно или несколько значений в одну или несколько переменных. С переменными типа String Read считывает все символы вплоть до следующей метки конца строки (но не включая ее), или пока функция Eof(F) не примет значение True. Переменной присваивается получившаяся в результате символьная строка. |
|
Procedure Readln([var F: Text;] V1 [, V2, ..., Vn]); Является расширением процедуры Read и определена для текстовых файлов. Считывает строку символов в файле (включая маркер конца строки) и переходит к началу следующей строки. Вызов функции Readln(F) без параметров приводит к перемещению текущей позиции файла на начало следующей строки, если она имеется, в противном случае происходит переход к концу файла. |
|
Function SeekEof[(var F: Text)]: Boolean; Возвращает признак конца файла и может использоваться только для открытых текстовых файлов. Обычно применяется для считывания числовых значений из текстовых файлов. |
|
Function SeekEoln[(var F: Text)]: Boolean; Возвращает признак конца строки в файле и может использоваться только для открытых текстовых файлов. Обычно применяется для считывания числовых значений из текстовых файлов. |
|
Procedure Write([var F: Text;] P1 [, P2, ..., Pn]); (текстовые файлы) Записывает одну или более величин в текстовый файл. |
|
Procedure Write(F, V1, ..., Vn); (типизированные файлы) Записывает переменную в компонент файла. |
|
Procedure Writeln([var F: Text;] P1 [, P2, ..., Pn]); (текстовые файлы) Выполняет операцию Write, затем помещает метку конца строки в файл. |