![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
SunDevil |
![]()
Сообщение
#1
|
Гость ![]() |
Есть задача: вводим матрицу 4 на 4 с клавиатуры, а прога должна отсортировать ВСЕ СТРОКИ матрицы по убыванию методом подсчета.
Нем огу реализовать эту процедуру сортировки, ПОМОГИТЕ, ПЛИЗ! |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Читайте здесь (описан сам принцип сортировки матриц): Сортировка строк матрицы. Достаточно заменить метод сортировки на любой необходимый ...
|
SunDevil |
![]()
Сообщение
#3
|
Гость ![]() |
2volvo
Спасибо тебе, но проблема еще и в том, что я не понимаю этот метод подсчета. Совсем не знаю как им сортировать |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Сортировка подсчетом.
Этот метод подходит для сортировки целых чисел из не очень большого диапазона (сравнимого с размером массива). Идея вот в чем: для каждого элемента найти, сколько элементов, меньших определенного числа, и поместить это число на соответствующие место. Делается это так: за линейный проход по массиву мы для каждого из возможных значений подсчитываем, сколько элементов имеют такое значение. Потом добавляем к каждому из найденных чисел суму всех предыдущих. Получая, таким образом, сколько есть элементов, значения которых не больше данного значения. Далее, опять-таки за линейный проход, формируем из исходного массива новый отсортированный. При этом следим, чтобы два одинаковых элемента не были записаны в одно место. Если все равно непонятно, смотрите реализацию: Код Program CountingSort; Var A,B : array[1..1000] of byte; C : array[byte] of integer; N,i : integer; Begin {Определение размера массива A (N) и его заполнение} … {сортировка данных} for i:=0 to 255 do C[i]:=0; for i:=1 to N do C[A[i]]:=C[A[i]]+1; for i:=1 to 255 do C[i]:=C[i-1]+C[i]; for i:=N downto 1 do begin B[C[A[i]]]:=A[i]; C[A[i]]:=C[A[i]]-1; {здесь мы избегаем возможности записи двух одинаковых чисел в одну ячейку} end; {Вывод массива B} … End. |
Georgich |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот исходник, помогите, пожалуйста, а то не работает :molitva:
Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Ну, вот так она компилируется... правильность работы не проверял...
Прикрепленные файлы ![]() |
Georgich |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Не могу все с этой сортировкой разобраться.....тупой какой-то метод, а в универе требуют именно им... Вот таким мотодом сортирую я:
Код begin for i:=1 to n do for j:=1 to m do for k:=1 to j do if a[i,j]<a[i,k] then begin t:=a[i,j]; a[i,j]:=a[i,k]; a[i,k]:=t; end; end. А как все-таки сделать методом подсчета??? Сообщение отредактировано: Georgich - 20.03.2005 14:23 |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Вот так:
Код const maxSize = 1000; { Это при желании можно уменьшить } type arrType = array[1 .. maxSize] Of Integer; procedure sortlines(n,m:integer; var ma:matrix); var _a, _b: arrType; _c: array[byte] of integer; i,j: integer; begin for j := 1 to n do begin move(ma[j, 1], _a[1], m*sizeof(integer)); FillChar(_C[0], 256, 0); for i:=1 to N do inc(_C[_A[i]]); for i:=1 to 255 do _C[i]:=_C[i-1]+_C[i]; for i:=N downto 1 do begin _B[_C[_A[i]]]:=_A[i]; dec(_C[_A[i]]); end; move(_b[1], ma[j, 1], m*sizeof(integer)); end; end; Одно "но" - эта процедура работает, но будет сортировать по возрастанию... Попробуйте переделать ее так, чтобы она сортировала по убыванию... |
Georgich |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот что получается, вернее не получается совсем.... Сделал как в примере, а матрица все равно не сортируется, как ввел, такую и обратно получаю
![]() Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Georgich, ну будьте же внимательнее!!! Я же дал готовую процедуру, неужели же надо ОБЯЗАТЕЛЬНО ее изменить, а потом сказать, что она не работает?
Я про внешний цикл: Цитата for j := 1 to n do По-Вашему я что, программы просто так сюда кидаю? |
Georgich |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
2 volvo
есть некоторые вопросы: Код const maxSize = 1000; { Это при желании можно уменьшить } type arrType = array[1 .. maxSize] Of Integer; Это надо писать в модуль Types или оставить в модуле SortLines? Почему вдруг стало var ma:matrix вместо var a:matrix? Надо тогда все заменять на это ma? Сообщение отредактировано: Georgich - 20.03.2005 16:56 |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Вот рабочая версия:
Прикрепленные файлы ![]() |
Georgich |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
2 volvo
БОЛЬШУЩИЕ ТЕБЕ СПАСИБО! |
Georgich |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Появилась проблема снова с матрицей! Надо отсортировать столбцы матрица по убыванию методом максимума. Я делал вот так:
Код begin for i:=1 to n do for j:=1 to m do for k:=1 to j do if a[i,j]<a[i,k] then begin t:=a[i,j]; a[i,j]:=a[i,k]; a[i,k]:=t; end; end. Но это сортировка строк....Помогите, пожалуйста, а то опять очень срочно надо.....Запутался я уже с этими циклами ![]() |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Может быть, вот так:
for j := 1 to m do ![]() |
Georgich |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
2 volvo
Это, вроде по возрастанию столбцы сортирует! begin А как по убыванию-то??? |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Ну, как у тебя было написано, так я и переделал... Надо по убыванию - поменяй знак с "меньше" на "больше", и все...
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 7:38 |