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

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

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

 
 Ответить  Открыть новую тему 
> Упорядочивание матрицы, метод сортировки: простой выбор
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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





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

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


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

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

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


Гость






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





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

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


А на счет сортировки, Пишет "выход за границы диапазона изменения индекса 1..4"
Помогите пожалуйсто!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;

Хинт: сортировка простым выбором - это не метод последовательного поиска минимумов...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;

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





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

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


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

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

 





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