![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
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 - |
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 - |
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
|
Гость ![]() |
Ну, как у тебя было написано, так я и переделал... Надо по убыванию - поменяй знак с "меньше" на "больше", и все...
|
![]() ![]() |
![]() |
Текстовая версия | 14.05.2024 18:09 |