Задача 12.17. Даны натуральное число n и действительные числа a1, a2,…, an Переместить:.б) отрицательные элементы массива в начало, сдвинув положительные элементы в конец, не меняя взаимное расположение ни отрицательных, ни положительных элементов;
Массив...
Сообщений 1 страница 5 из 5
Поделиться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 обход? Так как, ведь перекручивать части массива придётся всеравно через новый цикл.
+ Ещё можно крутить до тех пор, пока первый не станет отрицательным, потом крутить со второго и т.д.. Но и там, два цикла.