ТЕМА: ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ ТИПИЗИРОВАННЫХ И НЕТИПИЗИРОВАННЫХ ФАЙЛОВ

  • docx
  • 26.12.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л3-0025387.docx

ТЕМА: ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ ТИПИЗИРОВАННЫХ И НЕТИПИЗИРОВАННЫХ ФАЙЛОВ

 

Цель работы: научиться описывать в программе типизированные файлы, обрабатывать типизированные и нетипизированные файлы.

Оборудование: ПК, ИСР Pascal ABC

 

ТЕОРЕТИЧЕСКИЕ ДАННЫЕ

 

Типизированные файлы

Длина любого компонента типизированного файла строго постоянна, что дает возможность организовать прямой доступ к каждому из них (т.е. доступ к компоненту по его порядковому номеру).

Перед первым обращением к процедурам ввода-вывода указатель файла стоит в его начале и указывает на первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Переменные в списках ввода-вывода должны иметь тот же тип, что и компоненты файла. Если этих переменных в списке несколько, указатель будет смещаться после каждой операции обмена данными между переменными и дисковым файлом.

 

Процедура READ

Обеспечивает чтение очередных компонентов типизированного файла. Формат обращения: READ (<ф.п.>,<сп.ввода>)

Здесь <cn.вводa> - список ввода, содержащий одну или более переменных такого же типа, что и компоненты файла.

Файловая переменная <ф.п.> должна быть объявлена предложением FILE OF... и связана с именем файла процедурой ASSIGN. Файл необходимо открыть процедурой RESET. Если файл исчерпан, обращение к READ вызовет ошибку ввода-вывода.

Процедура WRITE

Используется для записи данных в типизированный файл. Формат обращения: WRITE (<ф.п.>,<сп.вывода>)

Здесь <сп.вывода> - список вывода, содержащий одно или более выражений того же типа, что и компоненты файла.

Процедура SEEK

Смещает указатель файла к требуемому компоненту. Формат обращения: SEEK (<ф.п.>,<N компонента>)

Здесь <N компонента> - выражение типа LONGINT, указывающее номер компонента файла. Первый компонент файла имеет номер 0. Процедуру нельзя применять к текстовым файлам.

 

Функция FILEPOS

Возвращает значение типа LONGINT, содержащее порядковый номер компонента файла, который будет обрабатываться следующей операцией ввода-вывода.

Формат обращения: FILEPOS (<ф.п.>)

Функцию нельзя использовать для текстовых файлов. Первый компонент файла имеет порядковый номер 0.


2. Нетипизированные файлы

Нетипизированные файлы объявляются как файловые переменные типа FILE и отличаются тем, что для них не указан тип компонентов. Отсутствие типа делает эти файлы, с одной стороны, совместимыми с любыми другими файлами, а с другой - позволяет организовать высокоскоростной обмен данными между диском и памятью.

 

Чтение файла осуществляется с помощью стандартной процедуры RESET:

RESET (<ф.п.>);

Здесь <ф.п.> - файловая переменная, связанная ранее процедурой ASSIGN с уже существующим файлом

При выполнении этой процедуры дисковый файл подготавливается к чтению информации. В результате специальная переменная-указатель, связанная с этим файлом, будет указывать на начало файла, т.е. на компонент с порядковым номером 0.

Стандартная процедура REWRITE (<ф.п.>).

инициирует запись информации в файл, связанный ранее с файловой переменной <ф.п.>. Процедурой REWRITE нельзя инициировать запись информации в ранее существовавший дисковый файл: при выполнении этой процедуры старый файл уничтожается и никаких сообщений об этом в программу не передается. Новый файл подготавливается к приему информации и его указатель принимает значение 0.

 

При инициации нетипизированного файла процедурами RESET или REWRITE можно указать длину записи нетипизированного файла в байтах.

Например, так:

var

f: file; begin

.......

assign(f, 'myfile.dat') reset(f,512);

.......

end.

Длина записи нетипизированного файла указывается вторым параметром при обращении к процедурам RESET или REWRITE, в качестве которого может использоваться выражение типа WORD. Если длина записи не указана, она принимается равной 128 байтам.

При работе с нетипизированными файлами могут применяться все процедуры и функции, доступные типизированным файлам, за исключением READ и WRITE

Работа с файлам записей

Пример1. Сформировать файл Fm.dat, содержащий экзаменационную ведомость одной студенческой группы. Записи файла состоят из следующих полей: фамилия, имя, отчество, номер зачетной книжки, оценка.

 

Program examen; Uses crt;

Type stud=record fio:string[30]; Nz:string[6]; mark:integer end;

Var Fstud:file of stud;

S:stud;

N,I:byte; Begin clrscr;


Assign(Fstud, 'Fm.dat'); Write('kolvo studentov'); Readln(n);

For I:=1 To n do Begin

Write('vvedite fio:'); readln(s.fio); Write('vvedite nomer zachetki:'); readln(s.Nz); Write('vvedite ocenka:'); readln(s.mark); Write(Fstud,s)

end;

Writeln('Formirovanie zaversheno'); Close(Fstud)

End.

 

Прямой доступ к записям файла

 

В стандарте языка Паскаль допустим только последовательный доступ к элементам файла. Одной из дополнительных возможностей, реализованный в Паскале, является прямой доступ к записям файла

Задав номер элемента файла, можно непосредственно установить указатель на него. После этого можно читать или перезаписывать данный элемент. Установка указателя на нужный элемент файла производится процедурой:

Процедура SEEK

Смещает указатель файла к требуемому компоненту. Формат обращения: SEEK (<ф.п.>,<N компонента>)

Здесь <N компонента> - выражение типа LONGINT, указывающее номер компонента файла. Первый компонент файла имеет номер 0. Процедуру нельзя применять к текстовым файлам.

 

ЗАДАНИЕ

 

1.                  Записать в файл последовательного доступа N действительных чисел. Вычислить произведение компонентов файла.

2.                  В типизированном файле, компонентами которого являются целые числа, подсчитать количество отрицательных чисел.

3.                  В типизированном файле, компонентами которого являются вещественные числа, вычислить произведение положительных чисел.