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

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

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

 
 Ответить  Открыть новую тему 
> Сортировка строк матрицы
сообщение
Сообщение #1


Гость






Есть задача: вводим матрицу 4 на 4 с клавиатуры, а прога должна отсортировать ВСЕ СТРОКИ матрицы по убыванию методом подсчета.
Нем огу реализовать эту процедуру сортировки, ПОМОГИТЕ, ПЛИЗ!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Читайте здесь (описан сам принцип сортировки матриц): Сортировка строк матрицы. Достаточно заменить метод сортировки на любой необходимый ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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


Новичок
*

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

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


Вот исходник, помогите, пожалуйста, а то не работает :molitva:


Прикрепленные файлы
Прикрепленный файл  LAB2.rar ( 2.09 килобайт ) Кол-во скачиваний: 314
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Ну, вот так она компилируется... правильность работы не проверял...


Прикрепленные файлы
Прикрепленный файл  lab2.rar ( 1.04 килобайт ) Кол-во скачиваний: 186
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Не могу все с этой сортировкой разобраться.....тупой какой-то метод, а в универе требуют именно им... Вот таким мотодом сортирую я:
Код
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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;

Одно "но" - эта процедура работает, но будет сортировать по возрастанию... Попробуйте переделать ее так, чтобы она сортировала по убыванию...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


Вот что получается, вернее не получается совсем.... Сделал как в примере, а матрица все равно не сортируется, как ввел, такую и обратно получаю unsure.gif


Прикрепленные файлы
Прикрепленный файл  Lab2.rar ( 2.54 килобайт ) Кол-во скачиваний: 177
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Georgich, ну будьте же внимательнее!!! Я же дал готовую процедуру, неужели же надо ОБЯЗАТЕЛЬНО ее изменить, а потом сказать, что она не работает?

Я про внешний цикл:
Цитата
for j := 1 to n do

По-Вашему я что, программы просто так сюда кидаю?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


2 volvo
есть некоторые вопросы:
Код
const
maxSize = 1000; { Это при желании можно уменьшить }
type
arrType = array[1 .. maxSize] Of Integer;

Это надо писать в модуль Types или оставить в модуле SortLines?
Почему вдруг стало var ma:matrix вместо var a:matrix? Надо тогда все заменять на это ma?

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


Гость






Вот рабочая версия:


Прикрепленные файлы
Прикрепленный файл  lab2.rar ( 1.13 килобайт ) Кол-во скачиваний: 220
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


2 volvo
БОЛЬШУЩИЕ ТЕБЕ СПАСИБО!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

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

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


Появилась проблема снова с матрицей! Надо отсортировать столбцы матрица по убыванию методом максимума. Я делал вот так:
Код
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.

Но это сортировка строк....Помогите, пожалуйста, а то опять очень срочно надо.....Запутался я уже с этими циклами huh.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Может быть, вот так:
  for j := 1 to m do
   for i := 1 to n do
     for k := 1 to i do
       if a[i, j] < a[k, j] then begin
         t := a[i, j];
         a[i, j] := a[k, j];
         a[k, j] := t;
       end;

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


Новичок
*

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

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


2 volvo
Это, вроде по возрастанию столбцы сортирует!
begin
for i:=1 to n do
 for j:=1 to m do
   for k:=1 to j do
     begin
       max:=a[i,j];
       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;
end.

А как по убыванию-то???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






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

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

 





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