Помощь - Поиск - Пользователи - Календарь
Полная версия: сортировка матрицы и вывод строк
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Ellsa
знаю,что много раз здесь уже такое решалось.Но я не могу найти ошибку у себя....
Помогите,пожалуйста,если можете.
Задание:
переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конец столбца.Распечатать часть полученной матрицы,состоящую из n первых строк,не имеющих отрицательных элементов.


 program z9;
const n=5;m=4;
type matr=array [1..n,1..m] of real;
var a:matr;b:real;
i,j,k,l1:integer;
begin
for i:=1 to n do
for j:=1 to m do
readln(a[i,j]);
for j:=1 to n do
begin
for i:=2 to n do


if a[i-1,j]<a[i,j] then
begin
b:=a[i-1,j];a[i-1,j]:=a[i,j];
a[i,j]:=b;
end; end;
repeat
for i:=1 to n do
for j:=1 to m do
if a[i,j]<0 then l1:=i
until l1<>0;
for i:=1 to l1-1 do
for j:=1 to m do
writeln(a[i,j]);

end.



я ввожу матрицу:
1 2 3 4
7 8 -2 9
-10 3 -2 4
1 0 -1 2
0 1 0 1


мне выдает:

7 8 3 9
1 3 -2 4
1 2 -1 4
0 1 0 2



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


и строки по сути он не те выводит....я думала задать просто l1 номер строки с первым отрицательным элементом...но.... unsure.gif
volvo
Цитата
переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конец столбца
и отсортировать столбцы по убыванию - это разные вещи...
Ellsa
но если отсортировать столбцы по убыванию,то все отрицательные элементы окажутся внизу.Разве нет?
volvo
Да, но порядок НЕотрицательных может измениться... Если тебе это безразлично, тогда можно сортировать...
Ellsa
да,мне безразлично.


а...хотя наверно нет...мне же надо будет столбцы вывести...но я тогда просто создам вторую матрицу....отсортированную....можно так?
Malice
Вот это:

for j:=1 to n do
begin
for i:=2 to n do
if a[i-1,j]<a[i,j] then
begin
b:=a[i-1,j];a[i-1,j]:=a[i,j];
a[i,j]:=b;
end; end;

меняем на:

for j:=1 to m do
for k:=1 to n do
for i:=2 to n do
if a[i-1,j]<a[i,j] then
begin
b:=a[i-1,j];a[i-1,j]:=a[i,j];
a[i,j]:=b;
end;


У тебя сдвиг элементов проводился 1 раз в каждом столбе, а вдруг еще надо ?
По этому добавим цикл по к. Плюс цикл по j надо до m.
Ellsa
но ведь к даже нигде больше не используется в программе кроме как
for k:=1 to n do
или его задать надо?
volvo
Кроме всего прочего - при поиске L1 идем снизу вверх, а не сверху вниз...
  for i:=n downto 1 do
for j:=1 to m do
if a[i,j]<0 then L1:=i;



P.S. Кстати, repeat/until здесь совершенно лишние...
Ellsa
почему?Мы ведь должны найти строки,которые не содержат отрицательных элементов и идем пока не встретим отрицательный элемент....а на полследней строке он сразу же нам встретится....




а цикл этот я вставила чтоб остановится когда будет самое первое отрицательное число...я просто не знаю как еще мне остановится.
volvo
я просто сразу убрал repeat/until, поэтому и шел снизу вверх, твой вариант тоже работает... smile.gif

Цитата
я просто не знаю как еще мне остановится.

Вот тебе и преимущество прохода СНИЗУ - не надо останавливаться, идем по всей матрице... Последняя строка, где был отрицательный элемент будет запомнена...
Ellsa

volvo


а как работает k не можешь мне,балде,объяснить немного.... blush.gif

когда мы его прибавляем в цикл,это дает пробег цикла n раз....это я поняла из слов Malice...но я не понимаю,почему он пробегает по всей матрице из-за k,раз он к ней получается и не привязан никак...ну вот появилось k...а что такое k в принципе?
i-номер строки.
j-номер столбца...
а k? unsure.gif
volvo
Заходим сюда: Методы сортировок
и смотрим, как делается пузырьковая сортировка одномерного массива - два вложенных цикла... Чтобы сравнить "все элементы со всеми" тебе недостаточно пройти одним циклом по массиву один раз, надо проходить несколько раз... Для этого и добавляется еще один цикл...

K можно, наверное, назвать счетчиком проходов по столбцу...
Ellsa
volvo
Malice



СПАСИБО ВАМ БОЛЬШОЕ! give_rose.gif
ОЧЕНЬ ПОМОГЛИ!!!Теперь я понимаю пузырек... blush.gif
Ozzя
Ellsa
Осталось только послать ПМ модераторам форума сообщение, дабы они вышеуказанным товарищам повысили рейтинг. cool.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.