Задан массив из 20 чисел. Преобразовать его по следующему принципу: все отрицательные элементы перенести в начало массива, а все
остальные в конец, сохраняя исходное взаимное расположение, как среди отрицательных, так и среди остальных элементов массива. Элементы массива не сортировать. Буду очень благодарна за помощь :)
Const n=20; var a:array[1..n] of integer; i,j,k,c:integer; begin Randomize; for i:=1 to n do begin a[i]:=random(51)-25; write(a[i]:4); end; writeln; k:=0; for i:=1 to n do if a[i]<0 then begin k:=k+1; c:=a[i]; for j:=i-1 downto k do a[j+1]:=a[j]; a[k]:=c; end; for i:=1 to n do write(a[i]:4); writeln; end.
Современные версии программного обеспечения (и в том числе, для языка Паскаль) позволяют в короткие сроки создавать очень короткие, наглядные и эффективные решения.
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016 begin var a:=ArrRandom(20,-99,99); a.Println; a.Where(x->x<0).Concat(a.Where(x->x>=0)).Println end.
<u><em>Замечание:</em></u> Если стоит задача получить именно массив, а потом его вывести, можно написать так: // PascalABC.NET 3.1, сборка 1250 от 28.05.2016 begin var a:=ArrRandom(20,-99,99); a.Println; a:=a.Where(x->x<0).Concat(a.Where(x->x>=0)).ToArray; a.Println end.