Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2011, 17:03   #1
Karina89
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 67
Печаль ошибка в поразрядной сортировке

Здравствуйте))
имеется код программы на поразрядную сортировку (целые числа).
Выглядит так:

Код:
const D=3;   {  максимальное количество цифp в числе }
      P=10;   { основание системы счисления }

 Function Digit(v, n : integer) : integer;
 { возвpащает значение n-ой цифpы в числе v }
 begin
   for n:=n downto 2 do v:=v div P;
   Digit:=v mod P;
 end;

 Procedure SortPor(var a : mytp);
   Var c : array[0..P-2] of integer; { индекс элемента,
                          следyющего за последним в i-ой гpyппе  }
       i, j, k, m, x : integer;
   begin
     for m:=1 to D do begin   { пеpебоp цифp, начиная с младшей }
     for i:=0 to P-2 do c[i]:=1; { нач. значения индексов }
     for i:=1 to l do begin   { пеpебоp массива }
       k:=Digit(a[i],m);      { опpеделение m-ой цифpы }
       x:=a[i];
       { сдвиг - освобождение места в конце k-ой гpyппы }
       for j:=i downto c[k]+1 do a[j]:=a[j-1];
       { запись в конец k-ой гpyппы }
       a[c[k]]:=x;
       {модификация k-го индекса и всех больших }
       for j:=k to P-2 do c[j]:=c[j]+1;
       end;
 end;
 end;

//считывание из файла в мемо и в массив b
procedure TForm1.rb4Click(Sender: TObject);
begin
btn1.Visible:=false;
if dlgOpen1.Execute then
 fname:=dlgOpen1.FileName;
 if Length(fname)=0 then
 begin
 ShowMessage('Ничего не выбрано');
 rb4.Checked:=False;
 Exit;
 end;
 mmo1.Lines.LoadFromFile(fname);
 mmo1.Lines.SaveToFile(temp);
  AssignFile(f,fname);
  Reset(f);
  l:=1;
while not(Eof(f)) do    
begin
read(f,b[l]);            
inc(l);
end;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
 for i:=1 to l do begin
     sortpor(b); end;
end;
Программа запускается, но останавливается в месте:

Код:
...
 { запись в конец k-ой гpyппы }
       a[c[k]]:=x;
       {модификация k-го индекса и всех больших }
...
и выскакивает окошко с сообщением:


Цитата:
Project Project1.exe raised exception class EAccessViolation with message 'Access at address 045CA66 in module 'Project1.exe'. write of address 029E84D0. Process stopped. Use Step or Run to continue
Подскажите, пожалуйста, в чем ошибка
Karina89 вне форума Ответить с цитированием
Старый 23.12.2011, 18:33   #2
Karina89
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 67
По умолчанию

подскажите, пожалуйста, кто-нибудь =(
Karina89 вне форума Ответить с цитированием
Старый 23.12.2011, 19:13   #3
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Цитата:
Сообщение от Karina89 Посмотреть сообщение
подскажите, пожалуйста, кто-нибудь =(
Скинь весь проект!
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в сортировке массива gylayko Помощь студентам 0 15.11.2011 20:56
Ошибка при сортировке Chikanog Microsoft Office Access 2 05.01.2011 13:08
Ошибка в сортировке слиянием voice8787 Общие вопросы C/C++ 0 05.12.2010 20:56
Где ошибка в сортировке? vaan.sk Общие вопросы C/C++ 1 16.03.2010 23:33
Ошибка в сортировке Veiron Общие вопросы Delphi 14 21.01.2008 21:35