Команды для типизированных файлов
Чтение из типизированного файла осуществляется по одной компоненте в переменную или переменные, которые должны совпадать по типу с типом компонент файла.
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
|