как можно перекинуть, например все отрицательные элементы, каждой строки квадратной матрицы в начало строк?
мне кажется, оттталкивать нужно от этого
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] то есть хранить номер ячейки, в которую собираешься записывать.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.