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

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

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

> задача на матрицу, упорядочить элементы, поменять местами строки
drug
сообщение 5.12.2007 12:19
Сообщение #1


Новичок
*

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

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


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

посмотрите пожалста код, что не так?
почему то не меняет местами строки
и еще что такое по невозрастанию?
я сделал по убыванию, или это не так?

program z3_4;
const
size_row=5; {chislo strok}
size_col=5; {chislo stolbtsov}
type
tvector=array[1 .. size_col] of real;
tmatrix=array[1 .. size_row] of tvector;
procedure swap_rows(var mx: tmatrix; const i, j: integer);
var T:tvector;
begin
T:=mx[i];
mx[i]:=mx[j];
mx[j]:= T
end;
procedure print(var mx:tmatrix);
var i,j:integer;
begin
for i:=1 to size_row do
begin
for j:=1 to size_col do
write(' ',mx[i][j]);
writeln;
end;
end;
var
mx:tmatrix;
i,j,k:integer;
swap:real;
begin
randomize;
for i:=1 to size_row do
for j:=1 to size_col do
mx[i][j]:= random(100)-50;
writeln('before:');
print(mx);
for i:=1 to size_row do
for j:=1 to size_col-1 do
for k:=1 to size_col-j do
if mx[i][k]<mx[i][k+1] then
begin
swap:=mx[i][k];
mx[i][k]:=mx[i][k+1];
mx[i][k+1]:=swap;
end;
for i:=1 to size_col do
for j:=1 to size_col-i do
if mx[size_row][j]>mx[size_row][j+1] then
swap_rows(mx,j+1,j);
writeln('after:');
print(mx);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
volvo
сообщение 5.12.2007 12:26
Сообщение #2


Гость






Цитата
я сделал по убыванию, или это не так?
По убыванию - значит, что каждый следующий элемент - строго меньше предыдущего. А по невозрастанию - каждый следующий НЕ больше предыдущего, при этом он может быть меньше или равен ему.

То есть, массив <7, 6, 5, 4, 4, 3, 2> отсортирован по невозрастанию, поскольку наличие двух четверок подряд мешает назвать это "по убыванию".
 К началу страницы 
+ Ответить 
drug
сообщение 5.12.2007 12:28
Сообщение #3


Новичок
*

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

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


ясна т.е в алгоритме мне < заменить на <= ?
дык а почему строки метсами не меняются? 0))

Сообщение отредактировано: drug - 5.12.2007 12:30
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.12.2007 12:30
Сообщение #4


Гость






Цитата
почему то не меняет местами строки
Чего это "не меняет"? Все меняет... Вот так у меня показывает (я правда немного подправил процедуру вывода матрицы):
Цитата
before:
-31.00 48.00 32.00 -47.00 -8.00
-37.00 6.00 2.00 -46.00 34.00
37.00 41.00 -50.00 3.00 -26.00
14.00 -33.00 2.00 -20.00 -35.00
22.00 42.00 -5.00 -3.00 13.00
after:
42.00 22.00 13.00 -3.00 -5.00
14.00 2.00 -20.00 -33.00 -35.00
41.00 37.00 3.00 -26.00 -50.00
34.00 6.00 2.00 -37.00 -46.00
48.00 32.00 -8.00 -31.00 -47.00
Только у тебя выводит по НЕвозрастанию элементов последнего столбца, а надо бы наоборот... Знак поменяй...
 К началу страницы 
+ Ответить 
drug
сообщение 5.12.2007 12:55
Сообщение #5


Новичок
*

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

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


хмм...
вот поменял стало так:

for i:=1 to size_col do
for j:=1 to size_col-i do
if mx[size_row][j]<mx[size_row][j+1] then
swap_rows(mx,j+1,j);


Цитата

before:
30 -47 48 -2 20
-14 36 6 -15 13
48 13 -46 -41 -7
44 -46 -14 -6 34
-47 35 -17 -15 23
after:
48 30 20 -2 -47
36 13 6 -14 -15
48 13 -7 -41 -46
44 34 -6 -14 -46
35 23 -15 -17 -47

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.12.2007 13:08
Сообщение #6


Гость






Ты с индексами запутался, кстати:

  for i:=1 to size_row do { <--- Проходишь по всем строкам - вот и иди до числа строк }
for j:=size_row downto i+1 do
if mx[j - 1][size_col]>mx[j][size_col] then { Первый индекс - номер строки }
swap_rows(mx,j-1,j);
writeln('after:');
print(mx);
 К началу страницы 
+ Ответить 
drug
сообщение 5.12.2007 13:13
Сообщение #7


Новичок
*

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

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


oO
спасибо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
КириллV
сообщение 5.12.2007 23:12
Сообщение #8


Новичок
*

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

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


Здраствуйте, у меня такая задача: Упорядочить по убыванию элементы тех строк матрицы, в которых все элементы отрицательные.

Ввод и вывод я написал, но неполучается написать подпрограмму или функцию которая бы находила строки которые содержат только отрицательные элементы, и еще нужна подпрограмма сортировки... помогите пожалуйста...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.12.2007 23:18
Сообщение #9


Гость






Во-первых, почему в чужой теме? Ясно же сказано:
Цитата(Правила раздела)
6. Одна тема - один вопрос (задача)


А во-вторых - в поиске, если посмотреть, будет несколько сот решений подобных задач. Попробуй найти наиболее тебе подходящую, разобраться, и начать делать свое задание самостоятельно, что не получится - приходи и показывай...
 К началу страницы 
+ Ответить 

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

 



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