merged document (820599), страница 5
Текст из файла (страница 5)
В файле вещественного типа упорядочить все компоненты по возрастанию ихзначений. Т.к. процедуры создания и просмотра вещественного файла неотличаются представленных выше, ограничимся написанием процедурысортировки данных. Используем алгоритм отыскания наименьшего.Procedure SortFile(namefile:string);Varf : File of Real;x,xmin : Real;i,n,j : Word;BeginAssignfile (f,namefile);Reset (f);n := FileSize (f);For i := 1 To n-1 DobeginSeek (f,i-1);Read (f,xmin);For j := i+1 To n DobeginRead (f,x);If xmin > x ThenbeginSeek (f,i-1); Write (f,x);Seek (f,j-1); Write (f,xmin);xmin := x;end;end;end;Closefile (f);End;3.
Результаты предварительных соревнований по бегу содержатся в виде записей втипизированном файле. Полями являются фамилия спортсмена и его результат(время забега). Удалить из файла спортсменов с результатами нижеквалификационного.program project1;TypeSport = Recordname : String[20];time : Real;end;Procedure Createfile(namefile:string);Varf : File of Sport;s : Sport;i,n,j : Word;BeginAssignfile (f,namefile);ReWrite (f);Write ('Количество спортсменов n= ');Readln (n);Writeln ('Введите фамилию и результат');For i := 1 To n DobeginWrite (i,': ');Readln (s.name);Readln (s.time);Write (f,s); //Запись в файл через буферную переменную//комбинированного (базового) типаend;Closefile(f);End;Procedure Viewfile(namefile:string);Varf : File of Sport;s : Sport;i,n,j : Integer;BeginAssignfile (f,namefile);Reset (f);While not Eof(f) dobeginRead (f,s); //Считывание из файла через буферную переменную//комбинированного (базового) типаWriteln (s.name,'',s.time:6:3);end;Closefile (f);End;Procedure DelInfile(namefile:string;tlim:real);Varf : File of Sport;s : Sport;i,n,j : Integer;BeginAssignfile (f,namefile);Reset (f);n := FileSize (f);i := 1;While i <= n DobeginSeek(f,i-1); Read (f,s);If s.time > tlim ThenbeginFor j := i + 1 To n DobeginSeek(f,j-1); Read (f,s);Seek(f,j-2); Write(f,s);end;n := n-1;endElsei := i + 1;end;If n < FileSize (f) ThenbeginSeek(f,n);Truncate (f);end;Closefile (f);End;Varnf:string;tlim:real;Beginnf:='f3_a';Createfile(nf);Writeln ('Содержимое исходного файла');Viewfile(nf);Write ('квалификационне время - ');Readln (tlim);DelInfile(nf,tlim);Writeln ('Содержимое файла после обработки');Viewfile(nf);readln;End.Суть алгоритма, реализованного в процедуре DelInfile , заключается в следующем.
Вцикле, начиная с первого компонента файла, проверяем его время. Если оно превышаетквалификационное, сдвигаем все последующие компоненты влево на одну позицию,затирая значение удаляемого компонента, и уменьшаем на единицу число спортсменов,которые должны остаться в файле. После окончания цикла устанавливаем файловыйуказатель в позицию после спортсмена, который оказался последним в списке оставшихся,и удаляем правую часть файла.
Иными словами говоря, в этом алгоритме мы обращаемвнимание на удаляемые компоненты файла. Можно использовать и другой подход, когдаоперации надо производить с компонентами файла, которые должны остаться в файле. Вэтом случае мы перезаписываем их в этот файл, затирая удаляемые компоненты файла.После проверки всех спортсменов удаляем процедурой Truncate () правую часть файла.Описанные алгоритмы по сути совпадают с алгоритмами удаления элементов водномерных массивах. Только в массивах мы оперируем с индексированнымиэлементами, а в файле позиция компонента фиксируется с помощью процедуры Seek().Задание для самостоятельной работы:1. В файле вещественного типа поставить компонент с минимальным значением передкомпонентом с минимальным значением.
Порядок следования остальных компонентне должно меняться.2. Создать файл записей, полями которых являются фамилия и рост. Упорядочитьзаписи, расположив их в порядке возрастания роста. Для упорядочивания использоватьметод обмена.Дополнительно: В упорядоченный файл вставить несколько новых компонент,значения которых вводятся с клавиатуры..