===== PascalABC.NET =====
function HasEven(n:integer): boolean;
begin
if n = 0 then
begin
Result := True;
Exit
end;
Result := True;
n := Abs(n);
while n > 0 do
if (n mod 10).IsEven then
Exit
else
n := n div 10;
Result := False
end;
begin
var f: file of integer;
var fn1 := ReadlnString('Укажите имя файла');
if not FileExists(fn1) then // файла нет - создаем
begin
var n := ReadInteger('Количество записей в файле:');
var (a, b) := ReadInteger2('Границы интервала данных:');
if a > b then
Swap(a, b);
f := CreateFileInteger(fn1);
Loop n do
f.Write(Random(a, b));
f.Close;
Println('Файл создан')
end;
// файл есть, обрабатываем его
// Создаем еще один файл и переписываем в него то, что должно остаться
var fn2 := '$$$temp$$$.bin';
if FileExists(fn2) then
DeleteFile(fn2);
var f2 := CreateFileInteger(fn2);
Println('Исходный файл');
var q := False;
f := OpenFileInteger(fn1);
while not f.Eof do
begin
var b := f.Read;
b.Print;
q := q or HasEven(b)
end;
f.Reset;
Writeln;
if q then
begin
// элемент с четной цифрой есть - исключение
while not f.Eof do
begin
var b := f.Read;
if not HasEven(b) then
f2.Write(b)
end
end
else // нет элемента с четной цифрой - все делим надвое
while not f.Eof do
f2.Write(f.Read div 2);
f.Close;
f2.Close;
DeleteFile(fn1);
RenameFile(fn2, fn1);
// выведем результат
Println('Результат');
ReadElements&<integer>(fn1).Println;
if FileExists(fn2) then
DeleteFile(fn2)
end.