Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ преобразование строк квадратной матрицы

Автор: 18192123 27.11.2006 1:20

как можно перекинуть, например все отрицательные элементы, каждой строки квадратной матрицы в начало строк?

мне кажется, оттталкивать нужно от этого


k:=0;
if a[i,j]<0 then
begin
k:=k+1;
b[i,k]:=a[i,j];
end;


а дальше у меня ничего не получается...
объясните пожалуйста!

Автор: мисс_граффити 27.11.2006 2:18

b-это новая матрица, что ли?
тогда тебе надо потом перекидывать в нее еще и оставшиеся положительные.

или работай с одной матрицей. запомни в k границу отрицательных элементов, а потом меняй обнаруженный отрицательный с первым, находящимся за этой границей.

Автор: 18192123 27.11.2006 2:28

Цитата(мисс_граффити @ 26.11.2006 22:18) *



или работай с одной матрицей. запомни в k границу отрицательных элементов, а потом меняй обнаруженный отрицательный с первым, находящимся за этой границей.

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

Автор: мисс_граффити 27.11.2006 2:33

ну смотри:
сначала ты предполагаешь, что у тебя в начало не "согнано" ни одного отрицательного элемента.
k=0, то есть предполагаем, что первый обнаруженный отрицательный будем менять с самым первым эл-том в строке. Поменяли.
Теперь первый эл-т заведомо отрицательный, менять с ним нет никакого смысла. Увеличиваем k на единицу - чтобы в следующий раз при необходимости менять уже со вторым.

то есть изначально-то они не по порядку, а потом - по порядку.

Автор: 18192123 27.11.2006 19:42

Цитата(мисс_граффити @ 26.11.2006 22:33) *

ну смотри:
сначала ты предполагаешь, что у тебя в начало не "согнано" ни одного отрицательного элемента.
k=0, то есть предполагаем, что первый обнаруженный отрицательный будем менять с самым первым эл-том в строке. Поменяли.
Теперь первый эл-т заведомо отрицательный, менять с ним нет никакого смысла. Увеличиваем k на единицу - чтобы в следующий раз при необходимости менять уже со вторым.

то есть изначально-то они не по порядку, а потом - по порядку.

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

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




Автор: мисс_граффити 27.11.2006 20:52

при обмене работаешь не с a[i,1], а с a[i,k+1]


Автор: 18192123 27.11.2006 23:53

Цитата(мисс_граффити @ 27.11.2006 16:52) *

при обмене работаешь не с a[i,1], а с a[i,k+1]

СПАСИБО!

Автор: мисс_граффити 28.11.2006 1:15

кстати, ты можешь начальное значение k сделать равным 1, а при обмене писать a[i,k] smile.gif то есть хранить номер ячейки, в которую собираешься записывать.