Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Упорядочивание элементов массива


Автор: Рус 25.1.2009, 08:58
В матрице элементы массива разместить в следующем порядке: сначала все отрицательные, потом все положителные, в той последовательности в которой они распологаються в исходной матрице.

Автор: Metalex 25.1.2009, 13:55
Код
Program Perestanovka;
CONST n=10;
type mas=array [1..n] of integer;
Var A,B:mas; i,j:integer;
Begin
randomize;

for i:=1 to n do
A[i]:=random(50)-random(20);

for i:=1 to n do
write (A[i]:4);
writeln;

j:=1;

for i:=1 to n do
if A[i]<0
then begin
B[j]:=A[i];
j:=j+1;
end;

for i:=1 to n do
if A[i]>=0
then begin
B[j]:=A[i];
j:=j+1;
end;

for i:=1 to n do
write (B[i]:4);

readln
end.


А тему стоило бы назвать так:
Цитата
Перестановка элементов массива
 smile 

Автор: volvo877 26.1.2009, 11:44
Metalex, полный аналог твоей программы:
Код
Program Perestanovka;
CONST n=10;
type
  mas = array [1..n] of integer;
Var A, B: mas; i, j, t: integer;

Begin
  randomize;
  for i:=1 to n do
    A[i]:=random(50)-random(20);

  for i:=1 to n do write (A[i]:4);
  writeln;

  b := a;
  for i := 1 to n do
    for j := n downto i + 1 do
      if (b[j - 1] > 0) and (b[j] < 0) then begin
        t := b[j]; b[j] := b[j - 1]; b[j - 1] := t;
      end;
  for i:=1 to n do write (b[i]:4);
  readln;
end.
(можно использовать и более быстрый алгоритм сортировки, главное - известна функция сравнения - вместо того, чтобы проходить по исходному массиву дважды)...

Рус, массив и матрица - несколько разные вещи. Уточни, что именно ты имеешь в виду? Одномерный массив, или двумерную матрицу?

Автор: Рус 26.1.2009, 11:56
Цитата(volvo877 @ 26.1.2009,  11:44)
Metalex, полный аналог твоей программы:
Код
Program Perestanovka;
CONST n=10;
type
  mas = array [1..n] of integer;
Var A, B: mas; i, j, t: integer;

Begin
  randomize;
  for i:=1 to n do
    A[i]:=random(50)-random(20);

  for i:=1 to n do write (A[i]:4);
  writeln;

  b := a;
  for i := 1 to n do
    for j := n downto i + 1 do
      if (b[j - 1] > 0) and (b[j] < 0) then begin
        t := b[j]; b[j] := b[j - 1]; b[j - 1] := t;
      end;
  for i:=1 to n do write (b[i]:4);
  readln;
end.
(можно использовать и более быстрый алгоритм сортировки, главное - известна функция сравнения - вместо того, чтобы проходить по исходному массиву дважды)...

Рус, массив и матрица - несколько разные вещи. Уточни, что именно ты имеешь в виду? Одномерный массив, или двумерную матрицу?

...двумерная матрица...вот условие (уточненное)      В матрице все ее элементы разместить в следующем порядке: сначала все отрицательные, потом все положителные, в той последовательности в которой они распологаються в исходной матрице.          

Автор: volvo877 26.1.2009, 12:25
Цитата(Рус @  26.1.2009,  10:56 Найти цитируемый пост)
...двумерная матрица...
В таком случае никто не мешает сделать вот такой трюк:
Код
Program Perestanovka;
CONST n=10;
type
  mas = array [1..n, 1..n] of integer;
Var
  A, B: mas; i, j, t: integer;
  m: array[1 .. sqr(n)] of integer absolute b;

Begin
  randomize;
  for i:=1 to n do for j := 1 to n do
    A[i,j]:=random(50)-random(20);

  for i:=1 to n do begin
    for j := 1 to n do write (A[i,j]:4);
    writeln;
  end;
  writeln;

  b := a;
  for i := 1 to sqr(n) do
    for j := sqr(n) downto i + 1 do
      if (m[j - 1] >= 0) and (m[j] < 0) then begin
        t := m[j]; m[j] := m[j - 1]; m[j - 1] := t;
      end;

  for i:=1 to n do begin
    for j := 1 to n do write (B[i,j]:4);
    writeln;
  end;
  writeln;
  readln;
end.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)