Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2019, 21:51   #1
30D1AK
Новичок
Джуниор
 
Регистрация: 28.01.2019
Сообщений: 1
По умолчанию Нужна помощь в исправлении ошибки в коде Pascal ABC.NET

В сортировке выдаёт ошибку
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.
30D1AK вне форума Ответить с цитированием
Старый 28.01.2019, 23:02   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Что-то с файлами намудрили. Файл на входе в сортировку пустой. Массив не создаётся
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь по Pascal ABC.NET - сделать HTTP запрос Sanek2515 Помощь студентам 3 16.01.2017 11:27
нужна помощь в составлении программы на Pascal ABC BAstra Помощь студентам 2 21.10.2015 10:04
Анимация в Pascal ABC - закат солнца. (Очень нужна помощь, доделать программу) Господин Никто Паскаль, Turbo Pascal, PascalABC.NET 5 28.05.2015 13:11
Нужна помощь с задачами! (Pascal ABC) Александр_ТГМТ Помощь студентам 4 02.12.2014 17:33
Нужна помощь в исправлении кода #С serzmerz Помощь студентам 5 14.11.2013 04:05