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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм, не работает!!! 
V
    Опции темы
nnln
Дата 5.6.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Почему не работает этот алгоритм сортировки? у меня задан динамический массив mas длинной N определяемой пользователем; setlength(a,n)

Код

type mas = array of integer;


Код

procedure BubbleSort(var a: mas);
var
  i, j, tmp,n: integer;
begin
for i:=min to max do
  for j:=min to max-i do
  if A[j]>A[j+1] then
   begin  {Обмен элементов}
    tmp:=A[j];
    A[j]:=A[j+1];
    A[j+1]:=tmp;
   end;
end;


Какой алгоритм не возьму у меня вылетает сразу же ошибка, что то с памятью. 
PM MAIL   Вверх
Snowy
Дата 5.6.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Ну во-первых, чему равны min и max?
Во вторых 
Код

for i:=min to max-1 do    
  for j:=min+1 to max do
  if A[i]>A[j] then
   begin  {Обмен элементов}    
    tmp:=A[i];
    A[i]:=A[j];    
    A[j]:=tmp;
   end;
  
PM MAIL   Вверх
nnln
Дата 5.6.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



min - это первый эелемент то есть 0, а max - n-1 

Код

procedure Bubble(var M : mas );
var
  i, j, tmp, n: integer;
begin
for i:=0 to n-1 do
  for j:=1 to n do
  if M[i]>M[j] then
   begin  {Îáìåí ýëåìåíòîâ}
    tmp:=M[i];
    M[i]:=M[j];
    M[j]:=tmp;
   end;
end;


Сделал так токо всеравно ошибка
  if M[i]>M[j] then - вот эта строчка синяя
 
PM MAIL   Вверх
comtat
Дата 5.6.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Смотри 
Цитата

for i:=min to max do    
  for j:=min to max-i do


если Min=0 то второй цикл идет от j=0 до max-0 

а внутри у тебя 
Цитата

    tmp:=A[j];    
    A[j]:=A[j+1];  // вот здесь и вылетает    
    A[j+1]:=tmp;


т.е. поставь max-i-1

 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
Snowy
Дата 5.6.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Код

for i:=0 to n-2 do    
  for j:=1 to n-1 do
 
PM MAIL   Вверх
nnln
Дата 5.6.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Цитата

т.е. поставь max-i-1


Получилось smile

Цитата

for i:=0 to n-2 do    
  for j:=1 to n-1 do

А так всеравно не работает



Еще вопросик: что это может значить: Project Kyrsovaya.exe raised exception class EInvalidPointer with message 
'Invalid pointer operation'.
 
PM MAIL   Вверх
TheCetus
Дата 5.6.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

for i:=0 to n-2 do
  for j := i to n-1 do

имхо

Добавлено @ 14:31 
указатель не инициализирован, а ты с ним работаешь 
PM MAIL   Вверх
comtat
Дата 5.6.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Будь внимательнее при работе с 
динамически выделяемой памятью

А да четь не забыл в конце память  почисть

Код

mas:=[B]nil[/B];
 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
nnln
Дата 5.6.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

for i:=0 to n-2 do
  for j := i to n-1 do

Так все работает без ошибки


Цитата

т.е. поставь max-i-1

так тоже работает только после выхода из программы вылезает как раз та ошибка с поинтером
 
PM MAIL   Вверх
comtat
Дата 5.6.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ну это 
посмотри сам 

Код
for i:=min to max do    
  for j:=min to max-i do


при i=max 
получится что для второго цикла 

j=min до max-max-1 т.е.
 от 0 до -1 вот тебе и еррор 
поставь для 
Код
for i:=min to max-1


и все будет в норме 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
nnln
Дата 5.6.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо всем за помощь smile 
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

1. Публиковать ссылки на вскрытые компоненты

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

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




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


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

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