Другие языки программирования и технологии
Вопрос по Турбо-Паскаль
Нужно помощь. Отсортировать двумерный массив. Сначала преобразовать двумерный массив в одномерный а потом наоборот. Буду очень благодарен кто напишет программу целиком. Ну или хоть объясните те кто может
По какому принципу происходит преобразование двухмерного массива в одномерный и обратно?
Как сортируется массив?
В программе ниже одномерный массив формируется из двухмерного "по строкам". Одномерный массив сортируется по возрастанию.
{$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.

Как сортируется массив?
В программе ниже одномерный массив формируется из двухмерного "по строкам". Одномерный массив сортируется по возрастанию.
{$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.

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