В сортировке выдаёт ошибку
Unhandled Exception: System.ArgumentNullException: Значение не может быть неопределенным.
Имя параметра: source
в System.Linq.OrderedEnumerable`2..ct or(IEnumerable`1 source, Func`2 keySelector, IComparer`1 comparer, Boolean descending)
в System.Linq.Enumerable.OrderByDesce nding[TSource,TKey](IEnumerable`1 source, Func`2 keySelector)
в P.P.sort_file() в C:\Users\Евгений\Downloads\Praktich eskaya_1 (1).pas:строка 75
в P.P.$Main() в C:\Users\Евгений\Downloads\Praktich eskaya_1 (1).pas:строка 190
в Prakticheskaya_1 (1).Program.Main()Программа завершена, нажмите любую клавишу . . .
Код:
program P;
uses crt;
type
Date = record
day: 1..31;
month: 1..12;
year: integer;
end;
detail = record
fio: string[15];
d: Date;
k: integer;
end;
var
f1, f2: file of detail;
f: file of detail;
procedure input;
var
a: detail;
begin
rewrite(f);
var n := ReadlnInteger('Введите количество записей:');
for var i := 1 to n do
begin
writeln(i, '-я запись:');
a.fio := ReadlnString('ФИО: ');
(a.d.day, a.d.month, a.d.year) := ReadlnInteger3('Введите число, месяц и год: ');
a.k := ReadlnInteger('Количество деталей: ');
write(f, a);
end;
close(f);
end;
procedure part_file(d1, d2: date);
var
a: detail;
begin
rewrite(f1);
rewrite(f2);
while not eof(f1) do
begin
read(f1, a);
var b1 := (a.d.year > d1.year) or // b1:boolean;
(a.d.year = d1.year) and (a.d.month > d1.month) or
(a.d.year = d1.year) and (a.d.month = d1.month) and (a.d.day > d1.day);
var b2 := (a.d.year < d2.year) or // b2:boolean;
(a.d.year = d2.year) and (a.d.month < d2.month) or
(a.d.year = d2.year) and (a.d.month = d2.month) and (a.d.day < d2.day);
if b1 and b2 then write(f2, a);
end;
close(f1);
close(f2);
end;
procedure sort_file;
var
a: detail;
mas: array of detail;
begin
reset(f1);
rewrite(f2);
if not eof(f1) then
begin
read(f1, a);
mas := Arr(a);
end;
while not eof(f1) do
begin
read(f1, a);
mas := mas + Arr(a);
end;
mas := mas.OrderByDescending(x -> x.k).ToArray;
foreach var t in mas do write(f2, t);
close(f1);
close(f2);
end;
procedure print_full;
var
a: detail;
begin
reset(f);
var i := 0;
writeln('┌───┬────────────────┬───────────────────┬────────────┐');
writeln('│ │ │ Дата │ Количество │');
writeln('│ № │ ФИО рабочего │изготовления детали│ деталей │');
writeln('├───┼────────────────┼───────────────────┼────────────┤');
while not eof(f) do
begin
i := i + 1;
read(f, a);
write('│', i:2, ' │', a.fio, '│':17 - length(a.fio), ' ');
writeln(a.d.day:3, a.d.month:3, a.d.year:5, '│':6, a.k:7, '│':6);
end;
writeln('└───┴────────────────┴───────────────────┴────────────┘');
close(f);
end;
procedure print_brief;
var
a: detail;
begin
rewrite(f);
var i := 0;
var s := 0;
writeln('┌───┬────────────────┬────────────┐');
writeln('│ │ │ Количество │');
writeln('│ № │ ФИО рабочего │ деталей │');
writeln('└───┴────────────────┴────────────┘');
while not eof(f) do
begin
i := i + 1;
read(f, a);
s := s + a.k;
writeln('|', i:2, ' |', a.fio, '|':17 - length(a.fio), a.k:7, '|':6);
end;
writeln('┌───┬────────────────┬────────────┐');
writeln('│ │ Итого │', s:7, '│':6);
writeln('└───┴────────────────┴────────────┘');
close(f);
end;
var
d1, d2: date;
q: byte;
begin
Assign(f1, 'имя 1');
Assign(f2, 'имя 2');
Assign(f, 'имя');
if (fileexists('имя 1')) and (fileexists('имя 2')) and (fileexists('имя')) then
begin
writeln('Восстановить прошлые таблицы?');
writeln('1. Да');
writeln('2. Нет');
repeat
readln(q);
until (q=1) or (q=2);
end;
if not(q=2) then
begin
input;
print_full;
writeln('Задайте отрезок времени:');
(d1.day, d1.month, d1.year) := ReadlnInteger3('начало (число, месяц и год): ');
(d2.day, d2.month, d2.year) := ReadlnInteger3('конец (число, месяц и год): ');
part_file(d1, d2);
write('Выпуск продукции цеха за ');
writeln(d1.day, '.', d1.month, '.', d1.year, ' - ', d2.day, '.', d2.month, '.', d2.year);
print_full;
sort_file;
writeln('Отсортированный список:');
print_brief;
clrscr;
end;
repeat
writeln('Выберите');
writeln('1. Вывод таблицы, содержащую данные о производстве деталей в цехе за год');
writeln('2. Вывод таблицы, содержащую данные о производстве деталей в цехе за отрезок времени');
writeln('3. Отсортировать список по количеству деталей');
writeln('4. Выход');
repeat
readln(q);
until (q > 0) and (q < 5);
clrscr;
case q of
1:
begin
print_full;
readkey;
clrscr;
end;
2:
begin
(d1.day, d1.month, d1.year) := ReadlnInteger3('начало (число, месяц и год): ');
(d2.day, d2.month, d2.year) := ReadlnInteger3('конец (число, месяц и год): ');
part_file( d1, d2);
write('Выпуск продукции цеха за ');
writeln(d1.day, '.', d1.month, '.', d1.year, ' - ', d2.day, '.', d2.month, '.', d2.year);
print_full;
readkey;
clrscr;
end;
3:
begin
sort_file;
writeln('Отсортированный список:');
print_brief;
clrscr;
readkey;
clrscr;
end
end;
until q = 4;
end.