IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> сортировка матрицы и вывод строк, помогите найти ошибку,пожалуйста.
сообщение
Сообщение #1


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


знаю,что много раз здесь уже такое решалось.Но я не могу найти ошибку у себя....
Помогите,пожалуйста,если можете.
Задание:
переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конец столбца.Распечатать часть полученной матрицы,состоящую из 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

Сообщение отредактировано: Ellsa -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конец столбца
и отсортировать столбцы по убыванию - это разные вещи...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


но если отсортировать столбцы по убыванию,то все отрицательные элементы окажутся внизу.Разве нет?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Да, но порядок НЕотрицательных может измениться... Если тебе это безразлично, тогда можно сортировать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


да,мне безразлично.


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

Сообщение отредактировано: Ellsa -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Вот это:

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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


но ведь к даже нигде больше не используется в программе кроме как
for k:=1 to n do
или его задать надо?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Кроме всего прочего - при поиске 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 здесь совершенно лишние...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


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




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

Сообщение отредактировано: Ellsa -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






я просто сразу убрал repeat/until, поэтому и шел снизу вверх, твой вариант тоже работает... smile.gif

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

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


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +



volvo


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

когда мы его прибавляем в цикл,это дает пробег цикла n раз....это я поняла из слов Malice...но я не понимаю,почему он пробегает по всей матрице из-за k,раз он к ней получается и не привязан никак...ну вот появилось k...а что такое k в принципе?
i-номер строки.
j-номер столбца...
а k? unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






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

K можно, наверное, назвать счетчиком проходов по столбцу...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


volvo
Malice



СПАСИБО ВАМ БОЛЬШОЕ! give_rose.gif
ОЧЕНЬ ПОМОГЛИ!!!Теперь я понимаю пузырек... blush.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Ellsa
Осталось только послать ПМ модераторам форума сообщение, дабы они вышеуказанным товарищам повысили рейтинг. cool.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.11.2020 9:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name