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

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

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

 
 Ответить  Открыть новую тему 
> Упорядочивание матрицы, метод сортировки: простой выбор
Crash_Devil
сообщение 12.12.2007 13:47
Сообщение #1





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

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


Задание: Дана матрица. Упорядочить элементы строк матрицы по неубыванию,
а сами строки по убыванию максимальных элементов строк.
Использовать сортировку простым выбором, реализовав метод в виде подпрограммы.
не пашет рандом(выдает нули), и сортировка...
Вот исходник:
Program z3;
const
n=4;{strok}
m=5{stolbcov};
type
tvector=array[1..m] of real;
tmatrix=array[1..n] of tvector;

procedure smena_strok(var matrica:tmatrix; const i,j:integer);
var T:tvector;
begin
T:=matrica[i];
matrica[i]:=matrica[j];
matrica[j]:=T;
end;
procedure vvod(matrica:tmatrix);
var i,j:integer;
begin
randomize;
for i:=1 to n do
for j:=1 to m do
matrica[i][j]:=random(100)-50;
end;

procedure vivod(matrica:tmatrix);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to m do
write(' ',matrica[i][j]);
writeln;
end;
end;
procedure sort1(matrica:tmatrix);
var k,i,j,maxE:integer;
max:real;
begin
for i:=1 to n do begin
for j:=m downto 2 do
begin
max:=matrica[1][n];maxE:=1;
for k:=1 to j do
if matrica[k][n]<=max then begin max:=matrica[k][n]; maxE:=k;end;
matrica[maxE][n]:=matrica[j][n];matrica[j][n]:=max;
end;
end;

end;

var
matrica:tmatrix;
i,j:integer;
begin
vvod(matrica);
writeln('Ishodnaya');
vivod(matrica);
sort1(matrica);
writeln('Poluchennaya');
vivod(matrica);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2007 13:49
Сообщение #2


Гость






Цитата
не пашет рандом(выдает нули)
Еще бы... Передай матрицу как Var-параметр - заработает...
 К началу страницы 
+ Ответить 
Crash_Devil
сообщение 12.12.2007 13:59
Сообщение #3





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

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


Цитата(volvo @ 12.12.2007 12:49) *

Еще бы... Передай матрицу как Var-параметр - заработает...

У меня ступор...
Где это?
Что туда надо поставить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2007 14:05
Сообщение #4


Гость






procedure vvod(VAR matrica:tmatrix);
 К началу страницы 
+ Ответить 
Crash_Devil
сообщение 12.12.2007 14:12
Сообщение #5





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

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


А на счет сортировки, Пишет "выход за границы диапазона изменения индекса 1..4"
Помогите пожалуйсто!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2007 14:39
Сообщение #6


Гость






procedure sort1(var matrica:tmatrix);
var
k,i,j: integer;
T: real;
begin
for i:=1 to n do begin

for j := 1 to m do
for k := m downto j + 1 do
if matrica[i][k - 1] > matrica[i][k] then begin
T := matrica[i][k - 1];
matrica[i][k - 1] := matrica[i][k];
matrica[i][k] := T;
end
end;
end;

Хинт: сортировка простым выбором - это не метод последовательного поиска минимумов...
 К началу страницы 
+ Ответить 
Crash_Devil
сообщение 12.12.2007 17:03
Сообщение #7





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

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


Вот процедура перестановки строк местами к условию
"... а сами строки по убыванию максимальных элементов строк":
procedure sort2(var matrica:tmatrix);
var
k,i,j: integer;
T: real;
begin
for i:=1 to n do
for j:=1 to m do
if matrica[i][1]<matrica[i+1][1]then smena_strok(matrica,1,i+1);
end;
Опять пишет "выход за границы диапазона изменения индекса"!
Что не так?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2007 17:09
Сообщение #8


Гость






Потому что у тебя опять не метод "пузырька"... Почитай уже наконец, как он правильно реализуется:
Методы сортировок

Вот так sort2 работает:
procedure sort2(var matrica:tmatrix);
var
i,j: integer;
begin
for i:=1 to n do
for j:=n downto i+1 do
if matrica[j][1]<matrica[j-1][1]
then smena_strok(matrica,j,j-1);
end;

 К началу страницы 
+ Ответить 
Crash_Devil
сообщение 12.12.2007 17:13
Сообщение #9





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

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


ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ И ТЕРПЕНИЕ!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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