![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Организация работы с файлами прямого доступаФайлы прямого доступа характерны тем, что в любой момент времени можно получить доступ к любому существующему компоненту файла - связать буфер файла с любым существующим компонентом файла. Все компоненты файла прямого доступа автоматически пронумерованы, начиная с 0. Номер компонента файла типа longint, т.е. теоретически в файле прямого доступа может быть свыше 2 млн. компонентов (правда, пока таких внешних устройств не существует). В файлах прямого доступа читать можно любой существующий компонент файла, а записывать в файл можно либо на место любого существующего компонента, либо в конец файла. С файлами прямого доступа можно работать в двух режимах: - работа с существующим файлом прямого доступа. Открывается режим с помощью процедуры reset(<имя логического файла>). Попытка открыть этот режим для несуществующего файла приводит к ошибке ввода-вывода; - создание нового файла прямого доступа . Открывается режим с помощью процедуры rewrite(<имя логического файла>). Если до открытия в этом режиме файл существовал, то информация в нем уничтожается. При работе с файлами прямого доступа можно использовать следующие процедуры и функции (во всех нижеприведенных подпрограммах f – это имя логического файла): - procedure write(var f:<имя файлового типа>; r:<тип компонента файла>) - процедура записи в текущий компонент файла значения выражения, указанного при обращении к процедуре. После выполнения процедуры записи буфер файла связывается со следующим по порядку компонентом файла. Если до выполнения процедуры текущим компонентом был конец файла, то, после выполнения записи на место этого признака, в следующий компонент файла запишется признак конца файла, и буфер свяжется с этим признаком. - procedure read(var f:<имя файлового типа>;var r:<тип компонента файла>) - процедура чтения текущего компонента файла. Прочитанное из текущего компонента значение помещается в переменную, указанную при обращении к процедуре. Текущий компонент файла - это тот компонент, с которым связан буфер файла. После выполнения процедуры чтения буфер файла связывается со следующим по порядку компонентом файла. Выполнение процедуры возможно только в том случае, если текущий компонент не является признаком конец файла. Если буфер связан с этим признаком, то при выполнении процедуры происходит ошибка ввода-вывода; - function eof(var f:<имя файлового типа>):Boolean – с помощью этой функции можно проверить связан ли буфер с признаком конец файла. Если результат true, то буфер связан с этим признаком, если – false, то буфер не связан с признаком конец файла, а находится на каком-то существующем компоненте файла; - procedure seek(var f:<имя файлового типа>; n:longint) - процедура установки на n-ый компонент файла прямого доступа f. При выполнении процедуры буфер файла связывается с n-ым компонентом, если такой компонент существует. В случае, если файл содержит меньшее количество компонентов, произойдет ошибка ввода-вывода ( в этом случае при включенной системе прерываний по вводу-выводу программа снимется с решения); - procedure reset(var f:<имя файлового типа>) - процедура установки на начало файла - буфер связывается с первым компонентом файла. Обращения seek(f,0) и reset(f) в процессе работы с файлом прямого доступа эквивалентны; - procedure truncate(var f:<имя файлового типа>) - усекает файл, начиная с текущей позиции. После выполнения процедуры в текущую позицию, с которой был связан буфер, будет записан признак конца файла; - function filepos(var f:<имя файлового типа>):longint - функция определения текущей позиции файла; - function filesize(var f:<имя файлового типа>):longint -функция определения количества компонентов в файле (признак конца файла не учитывается). Алгоритм сортировки файла прямого доступа Сортировка файла методом пузырька (обменная сортировка) Спецификация подпрограммы
Таблица 24.1.Перечень параметров
Метод решения Так как в файле прямого доступа все существующие компоненты пронумерованы (то есть проиндексированы), то для сортировки файла прямого доступа можно использовать любой метод сортировки массива. Используем обменную сортировку с флагом, известную под названием метод "пузырька". При этом для сокращения количества переборов будем просматривать только неупорядоченную часть. 1. Связываем логический и физический файлы assign(f,name) ; 2. Открываем для работы файл прямого доступа в режиме работы с существующим файлом reset(f) ; 3. Определяем размер не отсортированной части файла (перед началом сортировки это все существующие компоненты файла) nkz:=filesize(f) ; 4. Повторяем просмотр не отсортированной части элементов до выполнения условия до выполнения условия – при очередном переборе элементов перестановки не было (признак отсутствия перестановки – флаг flag при отсутствии перестановки имеет значение ложь, а при наличии – значение истина) повторять <просмотр не отсортированной части файла> до При просмотре не отсортированной части выполняются следующие действия: а) признаку перестановки при начале очередного перебора присваивается значение ложь (нет перестановки) flag:=false ; b) перебираются все элементы не отсортированной части c начального по предпоследний. Начальный элемент имеет порядковый номер 0; предпоследний элемент – nkz-2 (минус два, т.к. нумерация не с единицы, а с нуля) Для каждого номера элемента i выполняются следующие действия b.1) буфер файла связывается с текущим элементом seek(f,i) ; b.2) читаются текущий и следующий элементы файла read(f,r1,r2) . Компилятор, обрабатывая такое обращение к процедуре чтения из файла, преобразует его в эквивалентный составной оператор begin read(f,r1); read(f,r2) end; b.3) при сортировки по убыванию, если следующий элемент больше текущего (при сортировки по возрастанию, если меньше), то буфер файла связывается с текущим компонентом; записывается в файл следующее значение, а затем текущее; формируется признак наличия перестановки (флагу перестановки присваивается истина) Компилятор, обрабатывая обращение к процедуре записи в файл, преобразует его в эквивалентный составной оператор begin write(f,r2); write(f,r1) end; c) так как в правую часть файла переместился отсортированный элемент, то размер не отсортированной части уменьшается на единицу nkz:=nkz-1 ; 5. Закрываем файл для работы close(f) . Информационная модель Таблица 24.2.Информационная модель
Программная модель
type tf=file of integer;
procedure sortpuz(name:string); var f:tf; i,nkz:longint; r1,r2:integer; flag:boolean;
begin assign(f,name); reset(f); nkz:=filesize(f); repeat flag:=false; for i:=0 to nkz-2 do begin seek(f,i); read(f,r1,r2); if r2>r1 then begin seek(f,i); write(f,r2,r1); flag:=true end end; nkz:=nkz-1 until not flag; close(f); end;
|
|||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-06-26; просмотров: 848; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.236.209.138 (0.005 с.) |