
- •Федеральное агентство по образованию
- •Структурированные типы данных. Классификация
- •Массивы Определение массива
- •Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
- •Действия над массивами
- •Поиск элемента (одномерного ) массива Поиск среди неупорядоченных элементов массива
- •Поиск среди упорядоченных элементов массива
- •Сортировка элементов (одномерного) массива
- •Линейная сортировка (сортировка отбором)
- •Сортировка методом пузырька
- •5 4 3 1 2
- •5 4 3 2 1 Метод быстрой сортировки с разделением
- •Множества
- •Объявление множеств
- •Представление в памяти переменной типа множество
- •Операторы для работы с множествами Проверка принадлежности элемента множеству
- •Операции над множествами
- •Сравнение множеств
- •Применение множеств
- •Процедуры и структурное программирование
- •Преимущества структурного программирования
- •Планирование структурированной программы
- •Метод программирования сверху вниз
- •Определение процедуры
- •Передача управления при вызовах процедур и функций
- •Функции: подпрограммы,возвращающие единственный результат
- •Понятие блока
- •Область действия и время жизни переменных
- •Особенности локальных переменных
- •Особенности глобальных переменных
- •Особенности использования процедур и функций в турбо паскале
- •Опережающее определение процедур и функций
- •Рекурсия и итерация
- •Процедуры и функции как параметры
- •Директивы подпрограмм
- •Отладка и тестирование программ, содержащих подпрограммы
- •Нисходящее тестирование и подпрограммы-заглушки
- •Восходящее тестирование и программы-тестеры
- •Рекомендации по отладке программ, содержащих подпрограммы
- •Использование отладчикадля трассировки процедур
- •Запуск внешних программ
- •Стандартные модули
- •Модуль Crt
- •Модуль Graph
- •Функции
- •Текстовые файлы
- •Нетипизированные файлы
- •Типизированные файлы
- •Прямой доступ
- •Дополнительные функции работы с файлами
- •Обработка ошибок ввода-вывода
- •Указатели и динамические переменные Статические и динамические переменные
- •Адресация памяти в Турбо Паскале
- •Карта памяти Турбо Паскаля
- •Указатели
- •Операция для получения адреса
- •Функции для работы с адресами
- •Процедуры для работы с указателями
- •Присваивание значений указателям
- •Организация ссылок
- •Динамические структурированные переменные Динамические записи
- •Динамические массивы
- •Массивы размером более 64 кбайт
- •Строки с завершающим нулем (asciiz)
- •Процедуры и функции модуля strings
- •Указатели на процедуры и функции
- •Динамические структуры данных
- •Линейные списки
- •60 Лекции по курсу «Языки программирования» Часть II
Нетипизированные файлы
Нетипизированные файлы предназначены для хранения участков оперативной памяти на внешних носителях. После описания файловой переменной
var имя : file:
ее требуется связать с физическим файлом с помощью процедуры assign. Чтение и запись производится через буфер «порциями», равными размеру буфера. Размер буфера, отличающийся от стандартного (128 байт), можно задать с помощью второго параметра процедур reset и rewrite при открытии файла.
reset(var f : file; bufsize : word)
rewrite(var f : file; bufsize : word)
Размер буфера должен находиться в пределах от 1 байта до 64 Кбайт.
Собственно чтение и запись выполняются с помощью процедур blockread и blockwrite.
blockread(var f : file; var x; count : word; var num : word);
blockwrite(var f : file; var x; count : word; var num : word);
Процедура blockread считывает в переменную х количество блоков count. Длина блока равна размеру буфера. Значение count должно быть больше или равно 1, за одно обращение нельзя ввести больше 64 Кбайт. Поскольку при вводе никаких преобразований данных не выполняется, имеет значение только адрес начала области памяти и ее длина, поэтому тип переменной х не указывается.
Необязательный параметр num возвращает количество прочитанных блоков. В случае успешного завершения операции чтения оно равно запрошенному, в случае аварийной ситуации параметр num будет содержать число успешно прочитанных блоков. Следовательно, с помощью параметра num можно контролировать правильность выполнения операции чтения.
Процедура blockwrite записывает в файл количество блоков, равное count, начиная с адреса, заданного переменной х. Длина блока равна длине буфера. Необязательный параметр num возвращает число успешно записанных блоков (неудача может произойти, например, из-за переполнения или сбоя диска).
Для нетипизированных файлов применяется как последовательный, так и прямой доступ.
Типизированные файлы
Типизированные файлы применяются для хранения однотипных элементов в их внутренней форме представления. Тип компонент задается после ключевых слов file of.
var
имя : file of тип_компонент;
Компоненты могут быть любого типа, кроме файлового, например вещественным числом, массивом, множеством, строкой, записью или массивом записей. В операциях ввода-вывода могут участвовать только величины того же типа, что и компоненты файла.
За одну операцию записывается или считывается столько компонент, сколько перечислено в
Типизированные файлы, так же как и нетипизированные, применяются не для просмотра их человеком, а для использования в программах. Рассмотрим, как выполняется прямой доступ к элементам этих файлов.
Прямой доступ
При последовательном доступе чтение или запись очередного элемента файла возможны только после аналогичной операции с предыдущим элементом. Например, чтобы получить n-й элемент файла, требуется считать n-1 элементов. Типизированные файлы, так же как и нетипизированные файлы состоят из блоков одинакового размера. В нетипизированном файле размер блока равен длине буфера, а в компонентном – длине компоненты. Это позволяет применить к таким файлам прямой доступ, при котором операции выполняются с заданным блоком. Прямой доступ применяется только для физических файлов, расположенных на дисках.
С помощью стандартной процедуры seek производится установка текущей позиции в файле на начало заданного блока, и следующая операция чтения-записи выполняется, начиная с этой позиции. Первый блок файла имеет номер 0.
Процедуры и функции для для реализации прямого доступа
filepos(var f) : longint |
Функция возвращает текущую позицию в файле f. Для только что открытого файла текущей позицией будет 0. После чтения или записи первого блока текущая позиция станет равной 1. После прочтения последней записи функция возвратит количество блоков в файле. |
filesize(var f) : longint |
Функция возвращает количество блоков в открытом файле f. |
seek(var f; n: longint) |
Процедура выполняет установку текущей позиции в файле (позиционирование). В параметре п задается номер блока, к которому будет выполняться обращение. Блоки нумеруются с нуля. Например, чтобы работать с четвертым блоком, необходимо задать значение п, равное 3. Процедура seek работает с открытыми файлами. |
truncate(var f) |
Процедура устанавливает в текущей позиции признак конца файла и удаляет все последующие блоки. |