Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2012_METODICh_POSOBIE_PASCAL.doc
Скачиваний:
18
Добавлен:
15.09.2019
Размер:
2.97 Mб
Скачать

Лабораторная работа № 13. Обработка информации из файлов прямого доступа.

При выполнении работы необходимо знать:

  • Что такое файл

  • Файловые типы и файловые переменные

  • Виды файлов: текстовые, типизированные, нетипизированные

  • Операции над типизированными файлами

Теоретический минимум:

Типизированные файлы содержат информацию определенного типа. Компонентами файла являются элементы одного типа, кроме типа файл. Типизированные файлы можно заполнить данными только из программы (не в редакторе).

Типизированные файлы являются файлами прямого доступа, то есть мы можем обратиться к любой компоненте файла с номером N (указатель текущей позиции файла настраивается на заданную компоненту).

Команды для всех видов файлов.

Объявление файловых переменных.

Var

F1=file of integer; {объявление типизированного файла}

F2=file; {объявление нетипизированного файла }

Для того, чтобы конкретный файл стал доступным, его необходимо связать (ассоциировать) с конкретной файловой переменной. Такое связывание осуществляется с помощью процедуры Assign ( f, ’имя файла на диске’ );

Var

f1: file of real;

Begin

Assign (f1, ‘c:\users\info.dat’ );

Здесь файловая переменная f1 ассоциируется с типизированным файлом info.dat (с компонентами типа real ) , содержащемся на диске C: в каталоге C:\users.

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

Reset(f); - открытие существующего файла для чтения (указатель текущей позиции файла настраивается на начало файла).

Rewrite(f); - открытие существующего файла для записи (указатель файла настраивается на начало файла со стиранием информации) или создание нового файла для записи.

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

Close(f); - закрытие файла, ассоциированного с файловой переменной f.

Close; - закрытие всех файлов, открывавшихся в программе.

Erase(f); - удаление файла.

Команды для типизированных файлов.

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

Read(f, x); - чтение из типизированного файла одной компоненты в переменную x.

Read(f, x1, x2,x3, ... xn); - чтение из файла нескольких компонент в переменные.

Write(f, x); - запись в файл значения x. Запись начинается с того места, где был

установлен указатель файла.

Seek(f, n); - для типизированных файлов (прямого доступа) устанавливает

указатель файла на компоненту с номером n.

Eof(f) - функция, определяющая признак конца файла. Принимает значение True,

если указатель текущей позиции файла находится за последним элементом

файла либо файл пустой

Eoln – функция, определяет признак конца строки при считывании строк из

текстовых файлов

Truncate(f); - удаление части файла, начиная с места, где установлен указатель файла.

FilePos(f); - функция, определяет позицию указателя файла.

FileSize(f); - функция, определяет размер файла (число компонент).

Задача 13.1.

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

Текст программы к задаче 13.1.

Program Ex_12_1;

Uses Crt;

Label A;

Var f2: file of integer;

x: integer; {компонента}

i: integer; {счетчик цикла}

S: integer; {сумма}

Max: integer; {максимум}

k: integer; {номер максимума}

Begin

ClrScr;

Randomize;

Assign(f2, ‘g:\f2.dat’);

{Запись чисел в файл}

Rewrite(f2);

Writeln(‘Исходный файл:’);

Writeln;

For i:=0 to 15 do begin

x:=random(100)-50;

Write(f2, x);

Write(x:3);

End;

{Подсчет суммы нечетных компонент}

Reset(f2);

For i:=0 to 15 do begin

Read(f2, x);

If x mod 2<>0 then

S:=S+x;

End;

{Примем первую компоненту за Max}

Reset(f2);

Read(f2, x);

Max:=x;

{Поиск Max в файле}

For i:=1 to 15 do begin

Read(f2, x);

If x>Max then begin

Max:=x;

k:=i

End;

{Запись суммы вместо Max в файле}

Seek(f2, k);

Write(f2, S);

{Вывод результатов}

Writeln(‘Измененный файл:’);

Writeln;

Reset(f2);

While not Eof(f2) do begin

Read(f2, x);

Write(x:3);

End;

Close(f2);

Readln;

End.

Задача 13.2.

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

Текст программы к задаче 13.2.

Program Ex_12_2;

Uses Crt;

Label A;

Var

f1: file of integer;

x: integer; {компонента}

Otr1, Otr2: integer; {отрицательные}

k1, k2: integer; {номера отриц.}

i: integer; {счетчик цикла}

Begin

ClrScr;

Randomize;

Assign(f1, ‘g:\f1.dat’);

{Запись чисел в файл}

Rewrite(f1);

Writeln(‘Исходный файл:’);

Writeln;

For i:=0 to 15 do begin

x:=random(100)-50;

Write(f1, x);

Write(x:3);

End;

{Поиск первого отрицательного}

Reset(f1);

For i:=0 to 15 do begin

Read(f1, x);

If x<0 then begin

Otr1:=x;

k1:=i;

Goto A;

{Как только нашли, выходим из цикла}

End;

End;

{Поиск последнего отрицательного}

A: Reset(f1);

For i:=0 to 15 do begin

Read(f1, x);

If x<0 then begin

Otr2:=x;

k2:=i;

End;

End;

{Обмен в файле значений местами }

Seek(f1, k1);

Write(f1, Otr2);

Seek(f1, k2);

Write(f1, Otr1);

{Подсчет суммы ком. между k1 и k2}

i:=k1+1;

Repeat

Seek(f1, i);

Read(f1,x);

S:=S+x;

i:=i+1;

Until i<k2;

{Вывод результатов}

Writeln(‘Измененный файл:’);

Writeln;

Reset(f1);

While not Eof(f1) do begin

Read(f1, x);

Write(x:3);

End;

Close(f1);

Readln;

End.

С хема программы к задаче 13.2