Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка матрицы по целой части элементов строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
liash-7
Необходимо отсортировать матрицу(пузырьком) по целой часть элеметов K-й строки(строку K задаём)
К примеру, есть матрица:

(1,5) (7,4) (8,1)

(5,1) (8,3) (3,3)

(9,1) (1,1) (0,5)

(4,3) (5,4) (5,2)

Пусть мы задаём K=3
Выписываем целую часть элементов 3-й строки:[9,1,0].После сортировки[0,1,9].Тогда столбцы,должны поменяться аналогично.Столбец,содержащий 0,5 идёт первым,1 идёт вторым,9 идёт третьим!

Помогите пожалуйста! smile.gif
Адель
т.е. упорядочить марицу таким образом, что были упорядочны элементы определенной строки??
ps попробую хоть что нибудь сам сделать ..
liash-7
Цитата(Адель @ 16.04.2007 22:24) *

т.е. упорядочить марицу таким образом, что были упорядочны элементы определенной строки??
ps попробую хоть что нибудь сам сделать ..


Да!И чтобы столбцы содержащие эти элементы были раположены согласно им.
То есть должны получить матрицу:
(8,1) (7,4) (1,5)

(3,3) (8,3) (5,1)

(0,5) (1,1) (9,1)

(5,2) (5,4) (4,3)

Как бы "тащим" столбцы согласно элементам строкиsmile.gif
volvo
Основной цикл программы:
  for i := 1 to n_cols do
for j := n_cols downto i + 1 do
if trunc(arr[k, j - 1]) > trunc(arr[k, j]) then
for ii := 1 to n_rows do begin
T := arr[ii, j - 1]; arr[ii, j - 1] := arr[ii, j]; arr[ii, j] := T
end;
(n_cols - число столбцов матрицы, n_rows - число строк)
liash-7
Цитата(volvo @ 17.04.2007 1:41) *

Основной цикл программы:
  for i := 1 to n_cols do
for j := n_cols downto i + 1 do
if trunc(arr[k, j - 1]) > trunc(arr[k, j]) then
for ii := 1 to n_rows do begin
T := arr[ii, j - 1]; arr[ii, j - 1] := arr[ii, j]; arr[ii, j] := T
end;
(n_cols - число столбцов матрицы, n_rows - число строк)

Не могли бы Вы рассказать подробнее,как в общем выглядит полная структура программы?
volvo
Вот так для твоего примера:
const
n_rows = 4;
n_cols = 3;

arr: array[1 .. n_rows, 1 .. n_cols] of real = (
(1.5, 7.4, 8.1),
(5.1, 8.3, 3.3),
(9.1, 1.1, 0.5),
(4.3, 5.4, 5.2)
);

var
i, j, k, ii: integer;
T: real;

begin
write('k = '); readln(k);

{ Здесь печатаем матрицу ДО сортировки }

{ Сортируем }
for i := 1 to n_cols do
for j := n_cols downto i + 1 do
if trunc(arr[k, j - 1]) > trunc(arr[k, j]) then
for ii := 1 to n_rows do begin
T := arr[ii, j - 1]; arr[ii, j - 1] := arr[ii, j]; arr[ii, j] := T
end;

{ И печатаем ПОСЛЕ сортировки }
end.
liash-7
Огромное спасибо good.gif
liash-7
Что-то не так у меня распечатывается:Сначала выводится матрица 3х4 а потом 4х3!В чём проблема?Вот текст программы:

const
n_rows = 4;
n_cols = 3;

var
arr: array[1 .. n_rows, 1 .. n_cols] of real;
i, j, k, ii: integer;
T: real;

begin
write('k = '); readln(k);

{ Matrix do sortirovki }
writeln('Ishodnaya matrix:');
Randomize;
for i:=1 to n_cols do
for j:=1 to n_rows do
arr[i,j]:=Random(50);

for i:=1 to n_cols do
begin
for j:=1 to n_rows do
write(arr[i,j]:4);
writeln;
end;

{ Sortirovka }
for i := 1 to n_cols do
for j := n_cols downto i + 1 do
if trunc(arr[k, j - 1]) > trunc(arr[k, j]) then
for ii := 1 to n_rows do begin
T := arr[ii, j - 1]; arr[ii, j - 1] := arr[ii, j]; arr[ii, j] := T
end;

{ Matrix posle sortirovki }
writeln;
writeln('Otsortirovannaya matrix:');
begin

for ii:=1 to n_rows do
begin
for j:=1 to n_cols do
write(arr[ii,j]:4);
writeln;
end;
end;
end.
Lapp
М
liash-7,
1. Используй теги (отредактируй в предыдущем посте!)
2. Исправь название темы - в нем ошибка
Lapp

liash-7
ВСЁ!Разобрался!Всем спасибо! smile.gif

Изменить первое сообщение=>название темы не могу unsure.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.