Задача 12.17. Даны натуральное число n и действительные числа a1, a2,…, an Переместить:.б) отрицательные элементы массива в начало, сдвинув положительные элементы в конец, не меняя взаимное расположение ни отрицательных, ни положительных элементов; 
Массив...
Сообщений 1 страница 5 из 5
Поделиться12009-12-03 14:42:43
Поделиться22009-12-03 15:12:20
PROGRAM RN_12_17_v2;
CONST
NA=8;
A:array [1..NA] of integer=(1,14,3,19,-48,11,0,9);
VAR
B:array [1..NA] of integer;
i,n,dt:byte;
BEGIN
writeln;
for i:=1 to NA do
write(A[i]:4);
writeln;
for i:=1 to NA do
B[i]:=A[i];
dt:=1;
n:=0;
repeat
repeat
INC(n);
until (B[n]<0) or (n=NA);
if B[n]<0 then
begin
INC(dt);
for i:=n downto dt do
begin
t:=B[i];
B[i]:=B[i-1];
B[i-1]:=t;
end;
end;
until n=NA;
for i:=1 to NA do
write(B[i]:4);
writeln;
END.Если кому разъяснить, пожалуйста.
+ Личный респект за твой код, благодарность за топик.
Поделиться32009-12-09 00:25:13
Эта задача должна решаться с одним массивом и за один проход, то есть все происходит в массиве А и в одном цикле
Поделиться42009-12-09 22:19:46
Эта задача должна решаться с одним массивом
Да, конечно. Второй от того, что я решение напрямую скопировал из решенния 12.17, а оно имеет подпункты. И что бы не портить массив А, я и создал там В.
Поделиться52009-12-09 22:36:17
Эта задача должна решаться в одном цикле
for n:=2 to NA do
if B[n]<0 then
begin
INC(dt);
for i:=n downto dt do
begin
t:=B[i];
B[i]:=B[i-1];
B[i-1]:=t;
end;
end;
Данное решение можно считать решение через 1 обход? Так как, ведь перекручивать части массива придётся всеравно через новый цикл.
+ Ещё можно крутить до тех пор, пока первый не станет отрицательным, потом крутить со второго и т.д.. Но и там, два цикла.
