Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Незаконченная сортировка, ошибка в алгоритме или что-то другое? 
V
    Опции темы
Kanes
  Дата 4.12.2006, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



Здравствуйте, у меня возникает проблема при сортировке двумерного массива (матрицы).
Сортирую строки по такому принципу: для каждой строки есть свой характеристика - сумма четных положительных элементов, вот и надо мне отсортировать строки по возрастанию этой характеристки, но сортировка происходит не до конца (PS компилятор никакой ошибки не выдает)
Вот кусок кода с сортировкой:
Код

for i:= 0 to n-1 do
   for j :=0 to (n-1)-i do
      if GetDescription(j) > GetDescription(j+1) then
        for k:= 0 to m do
           begin
              temp:= matrix[j+1, k];
              matrix[j+1, k]:= matrix[j, k];
              matrix[j, k]:= temp;
           end;

GetDescription - ф-ция получения хар-ки строки, ее код:
Код

function GetDescription (index: integer): integer;
var
   a: integer;
   Result: integer;
begin
   a:= 0;
   Result:= 0;
   for a := 0 to m do
     if a mod 2 = 0 then
       if matrix[index, a] > 0 then
        Result:= Result + matrix[index, a];
GetDescription:= Result;
end;

Уважаемые форумчане плиз помогите smile 

Это сообщение отредактировал(а) Kanes - 4.12.2006, 22:19
--------------------
Big gun - big future  
PM MAIL   Вверх
volvo877
Дата 4.12.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Это у тебя, надо понимать, "пузырек"?

Что-то не то в нем... Вот так не лучше сделать?
Код
for i:= 0 to n-1 do
   for j := n-1 downto i + 1 do
      if GetDescription(j) > GetDescription(j+1) then
        for k:= 0 to m do
           begin
              temp:= matrix[j+1, k];
              matrix[j+1, k]:= matrix[j, k];
              matrix[j, k]:= temp;
           end;

PM MAIL   Вверх
Kanes
Дата 4.12.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



volvo877, проблема остается, я пробовал разные исполнения "пузырька", дело мне кажется в этой строке:
Код

if GetDescription(j) > GetDescription(j+1) then

Я для проверки вместо этой строки, как условие пробовал сортировать, например, относительно первого элемента строки, и все работает нормально smile 
--------------------
Big gun - big future  
PM MAIL   Вверх
Kanes
Дата 5.12.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



Народ, может быть у кого-нить есть другие идеи как решить эту задачу?
--------------------
Big gun - big future  
PM MAIL   Вверх
Zero
Дата 5.12.2006, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Kanes @  5.12.2006,  00:37 Найти цитируемый пост)
дело мне кажется в этой строке

Дело, то может и в этой строке, т.к. судя повсему, в ней нету учёта, конца, т.е. учёта того когда в конце j+1 элемент будет браться из не существующего элемента матрицы.
Но тебе не легче было бы дать полный код программы как ты решал, чтобы нам не набирать и не выдумывать, то как он у тебя находиться. И более чётко написать само задание.
PM MAIL ICQ   Вверх
Kanes
Дата 5.12.2006, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 11.3.2005

Репутация: нет
Всего: нет



 Задание было дано именно так, а полная программа от приведенного кода отличается только наличием вывода матрицы, и еще заполнения массива случайным образом.
 Проблема решена, спасибо всем, кто пытался помочь.
 Собственно 2 ошибки:
1) Используя код volvo877, обнаружил ошибку
Код

for i:= 0 to n-1 do
   for j := n-1 downto i + 1 do // имхо нужно писать i, а не (i+1), иначе индекс j+1 при макс i вылезет за границы массива
      if GetDescription(j) > GetDescription(j+1) then
        for k:= 0 to m do
           begin
              temp:= matrix[j+1, k];
              matrix[j+1, k]:= matrix[j, k];
              matrix[j, k]:= temp;
           end;

2) А самая главная ошибка в функции GetDescription(), в задании ф-ция ищет сумму четных положительных элементов, а на практике получается нечетных, все из-за того, что индекс массива у меня начинается с нуля, следовательно, надо в ф-ции считать сумму нечетных элементов, т.е.
Код

function GetDescription (index: integer): integer;
var
   a: integer;
   Result: integer;
begin
   a:= 0;
   Result:= 0;
   for a := 0 to m do
     if a mod 2 <> 0 then // вместо a mod 2 = 0
       if matrix[index, a] > 0 then
        Result:= Result + matrix[index, a];
GetDescription:= Result;
end;



Это сообщение отредактировал(а) Kanes - 5.12.2006, 21:40
--------------------
Big gun - big future  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.