Помощь - Поиск - Пользователи - Календарь
Полная версия: преобразование строк квадратной матрицы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
18192123
как можно перекинуть, например все отрицательные элементы, каждой строки квадратной матрицы в начало строк?

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

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


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

или работай с одной матрицей. запомни в k границу отрицательных элементов, а потом меняй обнаруженный отрицательный с первым, находящимся за этой границей.
18192123
Цитата(мисс_граффити @ 26.11.2006 22:18) *



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

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

то есть изначально-то они не по порядку, а потом - по порядку.
18192123
Цитата(мисс_граффити @ 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;



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

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

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

СПАСИБО!
мисс_граффити
кстати, ты можешь начальное значение k сделать равным 1, а при обмене писать a[i,k] smile.gif то есть хранить номер ячейки, в которую собираешься записывать.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.