Консультация № 178484
19.05.2010, 03:31
0.00 руб.
0 4 1
Здравствуйте, уважаемые эксперты!
Помогите пожалуйста с задачей:
Дана матрица. Упорядочить ее строки по убыванию первых элементов строк, если это возможно. Составить программу для четырех случаев, матрицы следует разместить в "куче" при выполнении следующих условий:
а) число строк и число столбцов константы;
б) число строк константа, а число столбцов исходное данное;
c) число строк исходное данное, число столбцов константа;
д) число строк и число столбцов исходные данные.
Ввод, вывод и обработку матриц описать отдельными подпрограммами. Для случаев а) д), где возможно, использовать одни и те же подпрограммы.


Приложение:
Программу нужно написать для ТР7

Обсуждение

давно
Старший Модератор
31795
6196
19.05.2010, 15:18
общий
это ответ
Здравствуйте, Даниил Цветков.

Смотрите приложение.
Все подпрограммы работают с указателями и числовые значения им не нужны, за исключения п/программы создания списков.
Вопросы по программе задавайте в мини-форум.
Удачи!

Приложение:
uses crt;
const
m=5;
n=6;
type
{тип горизонтальной строки}
pOne=^tOne;
tOne=record
data:integer;
next:pOne;
end;
{тип ветикальной стрики}
pTwo=^tTwo;
tTwo=record
vline:pTwo;
hline:pOne;
end;
{функция создания одной горизонтальной строки}
function CreateLine(b:integer):pointer;
var
c,d:pOne;
begin
c:=nil;
while b>0 do
begin
new(d);
d^.data:=random(100);
d^.next:=c;
c:=d;
dec(b);
end;
CreateLine:=c;
end;
{процедера создания матрицы}
procedure CreateMatrix(var b:pTwo;x,y:integer);
var
c:pTwo;
begin
b:=nil;
while x>0 do
begin
{создаем элемент вертикальной строки и включаем его в список}
new(c);
c^.vline:=b;
c^.hline:=CreateLine(y);{создаем одну горизонтальную строку}
b:=c;
dec(x);
end;
end;
{процедура вывода матрицы}
procedure ShowMatrix(b:pTwo);
var
c:pOne;
begin
while b<>nil do
begin
c:=b^.hline;{берем указатель на одну горизонтальную строку и выводим её}
while c<> nil do
begin
write(c^.data:3);
c:=c^.next;
end;
writeln;
b:=b^.vline;{переходим к следующей горизонтальной строке}
end;
writeln;
end;
{процедура сортировки матрицы по первым элементам}
procedure SortMatrix(b:pTwo);
var
c:pTwo;
d:pOne;
begin
c:=b;
while c^.vline<>nil do
{проверка условия сортировки}
if c^.hline^.data>=c^.vline^.hline^.data
then c:=c^.vline
else
begin
{обмениваем указаттели на горизонтальные строки}
d:=c^.hline;
c^.hline:=c^.vline^.hline;
c^.vline^.hline:=d;
c:=b;
end;
end;
{процедура освобождения занимаемой памяти}
procedure KillMatrix(b:pTwo);
var
c:pOne;
d:pTwo;
begin
while b<>nil do
begin
repeat{освобождаем горизонтальную строку}
c:=b^.hline;
b^.hline:=b^.hline^.next;
dispose(c);
until b^.hline=nil;
d:=b;{освобождаем вертикальную строку}
b:=b^.vline;
dispose(d);
end;
end;
{функция ввода количества строк}
function ReadNum(b:char):integer;
var
c:integer;
begin
repeat
write('Enter ',b,'-line numbers:');
readln(c);
until c>0;
ReadNum:=c;
end;
var
a:pTwo;
z:char;
begin
{выбор нужного варианта работы}
repeat
write(#10,#13,'A-const:const'
,#10,#13,'B-const:data'
,#13,#10,'C-data:const'
,#10,#13,'D-data:data'
,#10,#13,'Select mode:');
z:=UpCase(ReadKey);
until (z in ['A'..'D']);
writeln;
{содздаем список в сооветсвии с нужным вариантом}
case z of
'A':CreateMatrix(a,n,m);
'B':CreateMatrix(a,n,ReadNum('H'));
'C':CreateMatrix(a,ReadNum('V'),m);
'D':CreateMatrix(a,ReadNum('V'),ReadNum('H'));
end;
ShowMatrix(a);{показываем созданую матрицу}
ReadKey;{смотрим на неё}
SortMatrix(a);{сортируем матрицу}
ShowMatrix(a);{показываем отсортированную матрицу}
KillMatrix(a);{освобождаем занимаемую память}
ReadKey;{выходим}
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
19.05.2010, 15:26
общий
Даниил Цветков:
Если нужно, что-то другое обращайтесь.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
27.05.2010, 04:57
общий
Зенченко Константин Николаевич:
Спасибо большое. А вы отвечаете на вопросы в рассылке по С?
Я там задавал подобный вопрос, но ответов, к сожалению, не поступило
Неизвестный
27.05.2010, 04:58
общий
Если не трудно конечно
Форма ответа