:pascal: создать файл f целого типа. вычислить сумму четных компонент файла. увеличить на значение суммы отрицательные компоненты второй половины файла, после этого из файла f удалить минимальную компоненту. исходный и файл после замены распечатать.

ксюня264 ксюня264    2   20.09.2019 18:00    0

Ответы
Koko1324 Koko1324  08.10.2020 05:09
// PascalABC.NET 3.3.5, сборка 1636 от 10.03.2018
// Внимание! Если программа не работает, обновите версию!

begin
  // создание файла
  var f:file of integer;
  var n:=20; // размер файла
  Randomize;
  Rewrite(f,'F.bin');
  var b:integer;
  loop n do begin
    b:=Random(-50,50);
    Write(f,b)
    end;
  f.Close;
  // вывод содержимого исходного файла
  Reset(f,'F.bin');
  while not f.Eof do Print(f.Read);
  Writeln;
  // нахождение суммы четных компонент файла
  // в связи с двусмысленностью условия считается, что
  // понятие четности применяется к значению компоненты.
  f.Reset;
  var s:=f.ReadElements.Where(t->t.IsEven).Sum; // -48
  // увеличение на значение суммы отрицательных компонент
  // второй половины файла
  f.Seek(f.FileSize div 2);
  while not f.Eof do begin
    b:=f.Read;
    if b<0 then begin
      b+=s;
      f.Seek(f.FilePos-1);
      Write(f,b)
      end
    end;
  // удаляем минимальную компоненту
  f.Reset;
  var a:=f.ReadElements.ToArray;
  var imin:=a.IndexMin;
  a:=(a?[:imin]+a?[imin+1:]).ToArray;
  f.Reset;
  foreach b in a do Write(f,b);
  f.Truncate;
  // вывод содержимого полученного файла
  f.Reset;
  while not f.Eof do Print(f.Read);
  Writeln;
  f.Close
end.

Пример
-21 20 37 -30 6 -32 -25 45 -15 -12 0 31 20 -47 -42 41 -38 36 26 -2
-21 20 37 -30 6 -32 -25 45 -15 -12 0 31 20 -90 41 -86 36 26 -50

Замечание
Чтобы получить именно такие данные, укажите в программе
Randomize(3);
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика