
- •Методические указания по выполнению домашних заданий для студентов 1 курса специальности иу-10.
- •Введение.
- •Домашнее задание 1. Практикум 6. Приближенные вычисления.
- •Задача 6.1.
- •Var a, b, c : real;
- •Iter : longword;
- •Inc(iter);
- •Задания.
- •Задача 6.2.
- •Inc(n); inc(iter);
- •Задания.
- •Практикум 7. Процедурные типы.
- •Задача 7.1.
- •Var a, b, X, dx, y1, y2, s1, s2 : real;
- •Var a, b, X, dx, y1, y2, s1, s2 : real;
- •Inc(iter);
- •Задания.
- •Задача 7.2.
- •Var s1, s2 : real;
- •Задания.
- •Домашнее задание 2. Практикум 13. Типизированные файлы.
- •Задача 13.1.
- •Var I : word;
- •Var I, j : word; buf : tSportMan;
- •If fSort(a[I], a[j]) then
- •Var I : word;
- •Var I : word;
- •Var aHi : Ta; Var nHi : word);
- •Var I : word;
- •Задания.
- •Домашнее задание 3. Практикум 18. Использование объектной технологии для построения движущихся фигур.
- •X, y : real;
- •2*T0.X-border, 2*t0.Y-border);
- •X3, y3 : real;
- •X1, y1, x2, y2, x3, y3 : real;
- •Inherited Init(fx0, fy0, fmx, fcnv);
- •Var t : array[1..3] of tPoint; I : byte;
- •Var t0 : tPoint; tc : trPoint; tri:cTri;
- •0,0, 1,0, 0,1, Tc, clRed);
- •Var I : byte; r, a : real;
- •Var t0 : tPoint; tc : trPoint;
- •0,0, 1,0, 0,1, Tc, clRed);
- •Var I : word;
- •Var dx : real; tr : trPoint; tp: tPoint; I : word;
- •Inherited Init(fx0, fy0, fmx, fcnv);
- •Var dx : real;
- •Var t : array[1..3] of tPoint; tr : trPoint;
- •I : byte;
- •Var dx : real;
- •Var list : cList;
- •Var I : word;
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);