Имеется задача:
Цитата
С помощью динамических переменных реализуйте вещественную матрицу размером n x m максимального размера на всю динамическую память. Каждому элементу матрицы присвойте случайное значение из заданного диапазона. Отсортируйте элементы масссива по сквозному порядку их размещения в матрице как в одномерном массиве. Выдайте на экран первую под-матрицу размером 20 x 10. . Для сортировки используйте метод обменной сортировки.
Я ее почти решил, вот только сделал с вводом количества строк и столбцов, а по условию, нужно реализовать на всю динамическую память. Вот не могу понять как это можно сделать . Наверное, используя MemAvail.
Помогите пожалуйста!
Заранее огромное Вам спасибо!
Программа:
Program lab12_2;
Uses Crt;
Type
Ttype=Real;
PVector=^Tvector;
TVector=array[1..1] of Ttype;
PDynMatrix=^TDynMatrix;
TDynMatrix=array[1..1] of PVector;
Var
mxDynamic: PDynMatrix;
i,j:Integer;
n,m:Integer;
procedure create_matrix(x,y:Integer);
begin
GetMem(mxDynamic, x * Sizeof(PVector));
for i:=1 to x do
GetMem(mxDynamic^[i], y * Sizeof(Ttype));
Randomize;
for i:=1 to x do {Строки}
for j:=1 to y do {Столбцы}
mxDynamic^[i]^[j]:=10*random(50);
end;
procedure sort_matrix(mxDynamic:PdynMatrix; x,y:Integer);
var
tmp:Real;
begin
for i:=1 to x do
for j:=1 to y do
if (mxDynamic^[i]^[j] > mxDynamic^[i]^[j+1]) then begin
tmp:=mxDynamic^[i]^[j];
mxDynamic^[i]^[j]:= mxDynamic^[i]^[j+1];
mxDynamic^[i]^[j+1]:=tmp;
end;
end;
procedure show_matrix(mxDynamic:PDynMatrix; x,y:integer);
begin
for i:=1 to x do begin
Writeln;
for j:=1 to y do
Write(mxDynamic^[i]^[j]:7:2);
end;
end;
procedure matrix_clear(mxDynamic:PdynMatrix; x,y:Integer);
begin
for i:=1 to x do
FreeMem(mxDynamic^[i], y * Sizeof(Ttype));
FreeMem(mxDynamic, x * Sizeof(PVector));
end;
Begin
ClrScr;
Write('Количество строк, n=');
Readln(n);
Write('Количество столбцов, m=');
Readln(m);
create_matrix(n,m);{Создаем динамическую матрицу}
{show_matrix(mxDynamic,n,m);{Выводим ее на экран}
sort_matrix(mxDynamic,n,m);{Сортируем матрицу}
Writeln;
Writeln('Сортированная матрица:');
show_matrix(mxDynamic,20,10);{Выводим подматрицу 20x10}
matrix_clear(mxDynamic,n,m);{Освобождаем дин. память}
Writeln;
Write('Нажмите клавишу Enter...');
Readln;
End.
За основу брал в FAQ данного форума.