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

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

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

 
 Ответить  Открыть новую тему 
> сортировка матрицы и вывод строк, помогите найти ошибку,пожалуйста.
Ellsa
сообщение 12.01.2007 13:43
Сообщение #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 - 12.01.2007 13:44
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.01.2007 13:52
Сообщение #2


Гость






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


lehf
**

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

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


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


Гость






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


lehf
**

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

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


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


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

Сообщение отредактировано: Ellsa - 12.01.2007 13:57
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 12.01.2007 14:01
Сообщение #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 
 К началу страницы 
+ Ответить 
Ellsa
сообщение 12.01.2007 14:04
Сообщение #7


lehf
**

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

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


но ведь к даже нигде больше не используется в программе кроме как
for k:=1 to n do
или его задать надо?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.01.2007 14:05
Сообщение #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 - 12.01.2007 14:07
 К началу страницы 
+ Ответить 
Ellsa
сообщение 12.01.2007 14:07
Сообщение #9


lehf
**

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

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


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




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

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


Гость






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

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

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


lehf
**

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

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



volvo


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

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


Гость






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

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


lehf
**

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

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


volvo
Malice



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


Гуру
*****

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

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


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

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

 



- Текстовая версия 19.07.2025 19:14
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"