:pascal: создать файл f целого типа. вычислить сумму четных компонент файла. увеличить на значение суммы отрицательные компоненты второй половины файла, после этого из файла f удалить минимальную компоненту. исходный и файл после замены распечатать.
// 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.
// Внимание! Если программа не работает, обновите версию!
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);