[100баллов]:PASCAL: Создать файл F целого типа. Вычислить сумму четных компонент файла....

0 голосов
105 просмотров

[100баллов]:PASCAL:
Создать файл F целого типа. Вычислить сумму четных компонент файла. Увеличить на значение суммы отрицательные компоненты второй половины файла, после этого из файла F удалить минимальную компоненту. Исходный и файл после замены распечатать.


Информатика (1.2k баллов) | 105 просмотров
Дан 1 ответ
0 голосов
Правильный ответ
// 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<br>      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);
(150k баллов)
0

Все ок,спасибо.Но мне не понятны эти сокращения типа "f.Close", и цикл с loop.Можно ли как-нить обойтись без них?