PascalABC.NET 3.4.0, сборка 1671 от 31.05.2018 Внимание! Если программа не работает, обновите версию!
begin var n:=36; var a:=ArrRandom(n,-50,50); a.Println; var n4:=n div 4; var (s1,s2):=a.Select((v,i)->(v,i)).TakeLast(n4).Where(t->t[0]<>0) .Slice(1,2).OrderByDescending(t->1/t[0]).UnZipTuple; foreach var t in s1.ZipTuple(s2.Sorted) do a[t[1]]:=t[0]; a.Println end.
Внимание! Если программа не работает, обновите версию!
begin
var n:=36;
var a:=ArrRandom(n,-50,50); a.Println;
var n4:=n div 4;
var (s1,s2):=a.Select((v,i)->(v,i)).TakeLast(n4).Where(t->t[0]<>0)
.Slice(1,2).OrderByDescending(t->1/t[0]).UnZipTuple;
foreach var t in s1.ZipTuple(s2.Sorted) do a[t[1]]:=t[0];
a.Println
end.