IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача на динамическую матрицу., Помогите пожалуйста исправить!
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Здравствуйте!
Имеется задача:
Цитата
С помощью динамических переменных реализуйте вещественную матрицу размером n x m максимального размера на всю динамическую память. Каждому элементу матрицы присвойте случайное значение из заданного диапазона. Отсортируйте элементы масссива по сквозному порядку их размещения в матрице как в одномерном массиве. Выдайте на экран первую под-матрицу размером 20 x 10. . Для сортировки используйте метод обменной сортировки.

Я ее почти решил, вот только сделал с вводом количества строк и столбцов, а по условию, нужно реализовать на всю динамическую память. Вот не могу понять как это можно сделать wacko.gif . Наверное, используя MemAvail.
Помогите пожалуйста! rolleyes.gif
Заранее огромное Вам спасибо! smile.gif

Программа:
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 данного форума.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ну, например,
Цитата
Write('Количество строк, n=');
Readln(n);
Write('Количество столбцов, m=');
Readln(m);
поменяй на
  n := trunc(sqrt(memavail div sizeof(ttype)));
m := ((memavail div n) div sizeof(ttype)) - 1;
, тогда будет выделена матрица максимально возможного размера...

Добавлено через 1 мин.
Цитата
За основу брал в FAQ данного форума.
Плохо брал... Добавляй {$R-} в начале исходника, нельзя делать программу зависимой от настроек компилятора.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 11.01.2009 1:32) *

Ну, например,
поменяй на
  n := trunc(sqrt(memavail div sizeof(ttype)));
m := ((memavail div n) div sizeof(ttype)) - 1;
, тогда будет выделена матрица максимально возможного размера...

Добавлено через 1 мин.
Плохо брал... Добавляй {$R-} в начале исходника, нельзя делать программу зависимой от настроек компилятора.

Спасибо Вам огромное!
По поводу {$R-} тоже спасибо.
Всего Вам доброго!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 3.12.2020 11:05
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name