Другие языки программирования и технологии

Вопрос по Турбо-Паскаль

Нужно помощь. Отсортировать двумерный массив. Сначала преобразовать двумерный массив в одномерный а потом наоборот. Буду очень благодарен кто напишет программу целиком. Ну или хоть объясните те кто может
По какому принципу происходит преобразование двухмерного массива в одномерный и обратно?
Как сортируется массив?

В программе ниже одномерный массив формируется из двухмерного "по строкам". Одномерный массив сортируется по возрастанию.

{$E-,N+,R-}
program N169334300;

const
  Nmax = 10;
  Mmax = 11;

type
  TVector = array [1 .. 1] of double;
  PVector = ^TVector;
  TMatrix = array [1 .. 1] of PVector;
  PMatrix = ^TMatrix;

function CreateMatrix(n, m: byte): PMatrix;
var
  a: PMatrix;
  i, j: byte;
begin
  GetMem(a, n * sizeof(PVector));
  for i := 1 to n do
  begin
    GetMem(a^[i], m * sizeof(double));
    for j := 1 to m do
      a^[i]^[j] := random * 200 - 100
  end;
  CreateMatrix := a
end;

procedure WriteMatrix(a: PMatrix; n, m: byte);
var
  i, j: byte;
begin
  for i := 1 to n do
  begin
    for j := 1 to m do
      write(a^[i]^[j]:7:2);
    writeln
  end;
  writeln
end;

procedure DeleteMatrix(var a: PMatrix; n, m: byte);
var
  i: byte;
begin
  for i := 1 to n do
    FreeMem(a^[i], m * sizeof(double));
  FreeMem(a, n * sizeof(PVector));
  a := nil
end;

function MatrixToVector(Matrix: PMatrix; n, m: byte): PVector;
var
  i, j, k: byte;
  a: PVector;
begin
  GetMem(a, n * m * sizeof(a^[1]));
  k := 1;
  for i := 1 to n do
    for j := 1 to m do
    begin
      a^[k] := Matrix^[i]^[j];
      inc(k)
    end;
  MatrixToVector := a
end;

procedure VectorToMatrix(var Vector: PVector; Matrix: PMatrix; n, m: byte);
var
  i, j, k: byte;
begin
  k := 1;
  for i := 1 to n do
    for j := 1 to m do
    begin
      Matrix^[i]^[j] := Vector^[k];
      inc(k)
    end;
  FreeMem(Vector, n * m * sizeof(Vector^[1]));
  Vector := nil
end;

procedure qSort(a: PVector; b, e: byte);
var
  i, j: byte;
  m, t: double;
begin
  i := b;
  j := e;
  m := a^[(i + j) div 2];
  repeat
    while a^[i] < m do
      inc(i);
    while a^[j] > m do
      dec(j);
    if i <= j then
    begin
      t := a^[i];
      a^[i] := a^[j];
      a^[j] := t;
      inc(i);
      dec(j)
    end;
    if b < j then
      qSort(a, b, j);
    if e > i then
      qSort(a, i, e)
  until i > j
end;

var
  a: PMatrix;
  b: PVector;
  n, m, i, j :byte;

begin
  randomize;
  n := random(Nmax - 1) + 2;
  m := random(Mmax - 1) + 2;
  a := CreateMatrix(n, m);
  writeln('Дан массив [', n, ', ', m, ']:');
  WriteMatrix(a, n, m);
  b := MatrixToVector(a, n, m);
  qSort(b, 1, n * m);
  VectorToMatrix(b, a, n, m);
  writeln('Отсортированный массив: ');
  WriteMatrix(a, n, m);
  write('Для завершения работы нажмите Enter...');
  readln;
  DeleteMatrix(a, n, m)
end.

Агабек Акбаев
Агабек Акбаев
51 590
Лучший ответ
После ТАКОГО вопроса: "Вопрос такой (как и на каком языке можно создать собственную платформу для создания трёхмерной графики )", - этот вопрос кажется ВЕСЬМА странным!
begemot 777<.>blogspot<.>com
там есть про сортировку
А)
Алекс )))
42 613