Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические материалы к ДЗ.doc
Скачиваний:
6
Добавлен:
09.02.2015
Размер:
472.06 Кб
Скачать

Var I : word;

Begin

writeln(Caption:40);

writeln('FIO':20, 'Club':20, 'Time(min.sec)':15,

'bh':5, 'bm':5, 'bl':5);

for i:=1 to ns do

with a[i] do

writeln(FIO:20, Club:20, Time:15:2,

bh:5, bm:5, bl:5);

End;

Var a : Ta;

SportMan : TSportMan;

ns : word;

fs : File of TSportMan;

BEGIN

// Открытие файла для первой записи.

AssignFile(fs, 'Biathlon.dat');

Rewrite(fs);

with SportMan do

begin

write('FIO = '); readln(FIO);

write('Club = '); readln(Club);

write('Time (min.sec) ='); readln(Time);

write('bh bm bl (0..5)='); readln(bh, bm, bl);

end;

write(fs, SportMan);

CloseFile(fs);

// Вывод первой записи.

Reset(fs);

read(fs, a[1]);

OutA('Results', a, 1);

CloseFile(fs);

readln;

END.

Этап 2. На этом этапе в программу добавляется фрагмент кода для добавления новых записей в конец файла и управления вводом. Обязательно необходимо изменить процедуру открытия нового файла на процедуру Reset. Для установки позиции записи в конец файла использована процедура Seek, которая имеет вторым параметром число записей файла, определяемое функцией FileSize. Управление вводом осуществляется в двух местах программы. Вначале запрашивается ввод символьной переменной ch. И если в ответ ввести симол 'n', то дальнейший ввод игнорируется. В противном случае запрашивается ввод значений полей новой записи. Для выхода из режима ввода необходимо в поле FIO ввести пустую строку, нажав клавишу ENTER. В конце программы записи считываются в массив и выводятся вместе с заголовком.

Листинг 13.1б. Текст основной программы с фрагментами открытия файла для чтения/записи и управления вводом. Заголовок программы и разделы описаний опущены. В разделе описаний переменных необходимо добавить объявление ch : char;.

BEGIN

// Открытие файла для чтения/записи.

AssignFile(fs, 'Biathlon.dat');

Reset(fs);// !!! ВНИМАНИЕ !!!

Seek(fs, FileSize(fs));

write('Input data? y/n '); Readln(ch);

if ch <> 'n' then

while True do

begin

writeln('Continue Input? No: Enter/'+

'Yes: Any String');

with SportMan do

begin

write('FIO = '); readln(FIO);

if FIO = '' then Break;

write('Club = '); readln(Club);

write('Time (min.sec) ='); readln(Time);

write('bh bm bl (0..5)='); readln(bh, bm, bl);

end;

write(fs, SportMan);

end;

CloseFile(fs);

// Чтение из файла и формирование массива.

Reset(fs);

ns:=0;

while not EoF(fs) do

begin inc(ns); read(fs, a[ns]); end;

CloseFile(fs);

// Вывод массива.

OutA('Results', a, ns);

readln;

END.

Этап 3. Для выполнения сортировки достаточно иметь одну функцию с передачей в нее критерия сравнения записей через процедурный тип, объявление которого необходимо добавить в раздел объявления типов.

Type TFSortR=Function(r1, r2 : TSportMan) : Boolean;

Исходный код функции сортировки и функций критериев приведены ниже. Что касается последней части задания, то она реализована посредством нескольких небольших функций, смысл которых понятен из комментариев.

Листинг 13.1в. Окончательный вариант программы. Заголовок, часть подпрограмм и разделов описаний опущена.

// Процедура сортировки.

Procedure SortR(Var a : Ta; n : word; FSort : TFSortR);