Чтение из типизированного файла осуществляется по одной компоненте в переменную или переменные, которые должны совпадать по типу с типом компонент файла.
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;
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; {Поиск Max в файле}
k:=i
End;
Seek(f2, k); {Запись суммы вместо Max в файле}
Write(f2, S); {Вывод результатов}
Writeln(‘Измененный файл:’);
Writeln;
Reset(f2);
While not Eof(f2) do begin
Read(f2, x);
Write(x:3);
End;
Close;
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