Консультация № 178381
14.05.2010, 18:01
0.00 руб.
0 16 1
Доброго времени суток, дорогие эксперты!

Требуется решить задачу на ТП7.

Даны две прямоугольные матрицы разных размеров.
Упорядочить строки каждой из них по убыванию первых элементов строк, если это возможно.

Тема данной задачи это:
"Создание гибких подпрограмм для обработки матриц произвольного порядка с фиксированным базовым типом"

Поэтому массивы должны быть открытыми или задача как то решалась через дерективу absolute(Желательно чтобы открытые массивы были).

Спасибо за внимание.

Обсуждение

давно
Профессор
401888
1232
15.05.2010, 07:40
общий
для обработки матриц произвольного порядка с фиксированным базовым типом"

Ну и при чем здесь открытые массивы? Во первых открытые массива в Паскале могут быть только линейными, а потом фиксированный базовый тип это вроде так
Код:
const nmax=25;
type matr=array[1..nmax,1..nmax];
Неизвестный
15.05.2010, 08:00
общий
Пупорев Юрий Борисович:
Привет. Скорее всего, имеется в виду такая конструкция (с Вашим определением):
Код:
procedure sort(var m);
var m: matr absolute a; ...

Напишите?
Неизвестный
15.05.2010, 10:07
общий
Данная работа расчитана для создания гибких программ для работы со структурами, которые тяжелы для обработки иначе. Лично наш преподаватель сам говорил, что гибкие массивы это 1 из способов создания такой гибкости
Неизвестный
15.05.2010, 14:13
общий
Гибкие? Мастер он придумывать свои термины... преподаватель Ваш личный Что имеется в виду, ПОЯСНИТЕ
Неизвестный
15.05.2010, 14:16
общий
гибких подпрограмм для обработки матриц произвольного порядка с фиксированным базовым типом

Здесь заключено противоречие!
Про гибкие программы уже и не говорю... В принципе, читал, что созданы гибкие элементы памяти на органических полупроводниках ...
Неизвестный
15.05.2010, 15:52
общий
"Гибкий" массив - это не общепринятый термин! (придумка Вашего умника). Мы тупые тут (по крайней мере - я): напишите, что имеется в виду, или пример покажите. Он-то Вам, скорее всего, показывал, а мы разберемся - не дураки! (тупые, но не дураки )
Неизвестный
16.05.2010, 14:25
общий
Чтобы больше споров как таковых не существовало прошу написать данную программу, используя открытые массивы или директиву абсолют..... наш преподаватель в отпуск смахал и ничего толком я ни от кого в университете не могу добиться... но она настолько сильно твердит что это гибкость что прошу уж постарайтесь

Преподаватель Доцент Кафедры "Програмно-вычислительная техника и автоматизированные системы" Ей видимо за её 60 лет виднее что для нее гибко.
Неизвестный
16.05.2010, 14:26
общий
Как только приедет я в этот форму выложу то что она мне расскажет про то что она тут считает за гибкость
Неизвестный
16.05.2010, 14:27
общий
Студенты изза её гибкости просто не знают как программы писать чтобы ей нравилось... говорит как бы загадкой
Неизвестный
16.05.2010, 19:03
общий
это ответ
Здравствуйте, Юдин Евгений Сергеевич.
Вот в приложении вариант с нетипизированными параметрами. Там обрабатываются две ПРЯМОУГОЛЬНЫЕ матрицы, с квадратными все просто - передавайте одинаковое число строк и столбцов (второй и третий параметры подпрограмм)
Если нужно через absolute, то пара строк изменится, но суть останется ("пара" от немецкого ein Paar = несколько)

Приложение:
const
sizeofInteger = sizeof(Integer);

procedure Sort(var m; const rows, cols: Integer);
var
k, n, p1, p2: Integer;
s, o: Word;
temp: Pointer; {Делаю через динамическую память - если не
так надо, напишите. Будет чуть дольше}
begin
s := Seg(m);
o := Ofs(m);
GetMem(temp, cols*sizeofInteger);
for k:=1 to rows-1 do
for n := k+1 to rows do
begin
p1 := memw[s:o+(k-1)*cols*sizeofInteger];
p2 := memw[s:o+(n-1)*cols*sizeofInteger];
if p2 > p1 then
begin
{Обмен строк местами}
move(ptr(s, o+(k-1)*cols*sizeofInteger)^, temp^,
cols*sizeofInteger);
move(ptr(s, o+(n-1)*cols*sizeofInteger)^,
ptr(s, o+(k-1)*cols*sizeofInteger)^,
cols*sizeofInteger);
move(temp^, ptr(s, o+(n-1)*cols*sizeofInteger)^,
cols*sizeofInteger);
end
end;
FreeMem(temp, cols*sizeofInteger);
end;

procedure Print(var m; rows, cols: Integer);
var k, n, p: Integer;
s, o: Word;
begin
s := Seg(m);
o := Ofs(m);
for k:=1 to rows do
begin
for n := 1 to cols do
begin
p := memw[s:o + ((k-1)*cols + (n-1))*sizeofInteger];
Write(p:5);
end;
WriteLn;
end;
end;

procedure FillMatrics(var m; const rows, cols: Integer);
var k,n, p: Integer;
s, o: Word;
begin
s := Seg(m);
o := Ofs(m);
{Через нетипированный параметр передается только адрес
переменной. Так что нужно вычислять положение
элементов по типу, номеру ряда и числу столбцов}
for k:=1 to rows do
for n := 1 to cols do begin
p := k*100 + n;
(* Вариант - случайными числами *)
{p := Random(1000);}
memw[s:o + ((k-1)*cols + (n-1))*sizeofInteger] := p
end;
end;


var
m1: array[1..3, 1..10] of Integer;
m2: Array[1..5, 1..3] of Integer;
BEGIN
FillMatrics(m1, 3, 10);
WriteLn('Исходная матрица m1 3х10');
Print(m1, 3, 10);
Sort(m1, 3, 10);
WriteLn('Отсортированная матрица m1');
Print(m1, 3, 10);
FillMatrics(m2, 5, 3);
WriteLn('Исходная матрица m2 5х3');
Print(m2, 5, 3);
Sort(m2, 5, 3);
WriteLn('Отсортированная матрица m2');
Print(m2, 5, 3);
END.
5
отлично продумано спасибо!
Неизвестный
17.05.2010, 11:07
общий
Ну что? Так пойдет?
Неизвестный
17.05.2010, 11:12
общий
щас проверяю
Неизвестный
17.05.2010, 11:21
общий
Спасибо работает! а вы работаете экспертом в с++? Не посмотрите задачи с свободными массивами строк?
Неизвестный
17.05.2010, 11:29
общий
Все собираюсь ... , там еще двое суток времени осталось. Ничего принципиально сложного, только написать без описок ...
Неизвестный
17.05.2010, 11:30
общий
№ 178398?
Неизвестный
18.05.2010, 13:36
общий
да да
он? займетесь? я если что перезадам вопросик на выходных!
Форма ответа