- •1. Структура модулей и преимущества их использования
- •2. Описание объектных типов в языке программирования Pascal. Статические и виртуальные методы.
- •Нетипизированные файлы
- •Текстовые фалы
- •4. Моделирование линейных динамических информационных структур средствами высокого уровня
- •5. Рекурсивные процедуры обхода двоичных деревьев.
- •6. Представление разреженных матриц линейными массивами
- •8. Номенклатура сегментных регистров и способы адресации в младших моделях процессоров Intel.
- •8. Макросредства языка Assembler.
- •9. Основные типы ядра операционной системы
- •11. Семиуровневая модель взаимодействия открытых систем iso.
- •Уровни модели osi
- •12. Технология «клиент-сервер». Назначение прокси-сервера, сервера приложений, web-сервера и т.П.
- •13. Барьерная синхронизация. Флаги и управляющие процессы: крупномодульное решение.
- •15. Алгоритмы сортировки.
- •16. Нормализация. 1нф, н1нф, 2нф, 3нф, нфбк.
- •17. Транзакции. Тупики. Уровни изолированности пользователей.
- •II. Транзакции и параллельная работа
- •III. Транзакции, откаты и восстановление после сбоев
- •18. Язык sql. Таблицы. Запросы. Вставка, удаление и обновление.
- •19. Реляционная алгебра.
- •20. Классические и стандартные технологические процессы.
- •21. Основные технологические подходы.
- •3.5.2.4.
- •23. Создание mdi приложений в Delphi.
- •24. Методы описания языков программирования. Бнф. Классы грамматик языков. Общая схема трансляции. Функции отдельных блоков транслятора.
Нетипизированные файлы
Нетипизированные файлы, открываясь и закрываясь также, как и типизированные, читаются и пишутся не записями, а блоками. Принципиальным различием между записью и блоком является то, что размер блока указывается при открытии нетипизированного файла (а не на этапе компиляции). Различий же в порядке работы с ними нет. Из этого можно вывести не совсем корректное, но по сути правильное определение нетипизированного файла: "типизированный файл с переменным размером записи, определяемым в момент открытия".
Чтение и запись в нетипизированные файлы производится по тем же принципам - блоками. Для этого применяют процедуры
Procedure BlockWrite(Var F: File; Var Buf; Count: Word; [Var Result: Word]); |
пишет в открытый файл F Count блоков из переменной Buf |
Procedure BlockRead(Var F: File; Var Buf; Count: Word; [Var Result: Word]); |
читает в переменную Buf из открытого файла F Count блоков |
Переменная в данном случае может быть любого размера, типа и месторасположения, однако ее размер должен быть не меньше, чем <размер>*<размер_блока>, который был указан при открытии - процедуры не проверяют реальный размер переменных, а обрабатывают непрерывный участок памяти, начиная с указанной переменной. Необязательный последний параметр возвращает количество реально записанных или считанных записей. Желательно, чтобы размер записи, указанный при открытии файла, был кратен размеру блока, физически читаемого с диска или размеру блока буфера MS-DOS. Позиционирование производится посредством Seek по блокам точно так же, как и для типизированных файлов.
Таким образом программист имеет возможность обращаться к любому участку файла по своему усмотрению и в произвольном порядке. Кроме того, операции чтения/записи больших блоков выполняются быстрее, чем множество аналогичных операций для маленьких записей. Применение нетипизированных файлов очевидно: для сохранения/восстановления (динамически размещаемых) массивов данных переменного значимого размера.
Простой пример работы с файлом:
Var
f:file of char;
c:char;
begin
assign( f, ‘file.dat’); {установливаем связь с именем файла}
reset( f ); {открываем файл для чтения}
seek( f, 1 ); {устанавливаем позицию файле на первую запись}
read( f, c ); {читаем с из текущей позиции значение в переменную}
close( f ); {закрываем файл}
end.
Последовательный доступ – это способ организации записей, при котором указатель перемещается по записям без пропусков, последовательно. Записи могут быть разной длины, не фиксированы. В такой файл записать новую запись можно только в конец файла.
Текстовые фалы
Текстовые файлы состоят из строк (разной длины), разделенных парами символов возврат каретки - перевод строки (#13#10). Это обстоятельство (различие в длине строк) приводит к тому, что для текстовых файлов не могут быть применены операции позиционирования (во всяком случае быстро). Это обстоятельство делает процесс разработки алгоримов обработки текстовых файлов довольно сложной (и, как следствие, интересной) задачей программирования.
Процедуры Write и Read работают с текстовыми файлами точно так же, как с текстовым экраном (без учета модуля CRT, то есть без окон, цветов, etc.), то есть не завершают строку и не переходят к чтению новой строки соответственно. Для того, чтобы производить эти действия, используют процедуры WriteLN и ReadLN. Эти же процедуры без второго параметра (переменной типа строка) завершают текущую строку (дописывают #13#10) и переходят к чтению новой строки соответственно.