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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2011, 17:00   #1
TotKtoNado
юзер
Форумчанин
 
Аватар для TotKtoNado
 
Регистрация: 22.12.2010
Сообщений: 245
По умолчанию сортировка массива

Код:
var
  a: array of integer;
  k: integer; // текущий элемент массива
  i: integer; // индекс для ввода и вывода массива
  changed: boolean; // TRUE, если в текущем цикле были обмены
  buf: integer; // буфер для обмена элементами массива
  b:integer;
begin
  while StringGrid1.Col<>StringGrid1.ColCount-1 do
  Begin
    SetLength(a,i+1);
    StringGrid1.Col:=StringGrid1.Col+1;
    i:=i+1;
    a[i] := StrToInt(StringGrid1.Cells[StringGrid1.Col, 0]);
    label1.caption := '';
  End;
  // ввод массива
  b:=i;
  //определение границ массива
  i:=0;
  //индекс перемещаеться в начало
  while i<b do
  begin
    I:=i+1;
    if a[i] > a[i + 1] then
      begin // обменяем k-й и k+1-й элементы
        buf := a[i];
        a[i] := a[i + 1];
        a[i + 1] := buf;
      end;
  end;
почему она ругаеться?
---------------------------
Project1
---------------------------
Access violation at address 004C03AA in module 'Project1.exe'. Read of address 00000008.
---------------------------
ОК
---------------------------

Последний раз редактировалось Stilet; 21.08.2011 в 18:12.
TotKtoNado вне форума Ответить с цитированием
Старый 21.08.2011, 18:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

1 - Моим советам ты не доверился? Здря.
2 - ну и на какой строке ругань?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2011, 18:17   #3
TotKtoNado
юзер
Форумчанин
 
Аватар для TotKtoNado
 
Регистрация: 22.12.2010
Сообщений: 245
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
1 - Моим советам ты не доверился? Здря.
2 - ну и на какой строке ругань?
ну он ругаеться при проверке программы где то
Код:
      begin // обменяем k-й и k+1-й элементы
        buf := a[i];
        a[i] := a[i + 1];
        a[i + 1] := buf;
      end;
TotKtoNado вне форума Ответить с цитированием
Старый 21.08.2011, 18:26   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

на редкость ужасный код...
Кошмар!

p.s. 100% "ругается" из за обращения к элементу массива a[i+1], которого НЕ СУЩЕСТВУЕТ (т.е. выход за пределы массива)!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.08.2011, 18:29   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
b:=i;
//определение границ массива
i:=0;
//индекс перемещаеться в начало
while i<b do
Замени на
Код:
 for i:=Low(a) to High(a)-1 do
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2011, 19:15   #6
TotKtoNado
юзер
Форумчанин
 
Аватар для TotKtoNado
 
Регистрация: 22.12.2010
Сообщений: 245
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Замени на
Код:
 for i:=Low(a) to High(a)-1 do
а в теле что указывать?
TotKtoNado вне форума Ответить с цитированием
Старый 21.08.2011, 19:32   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Свой код перестановки )
Ты же его в while запхнув
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2011, 19:36   #8
TotKtoNado
юзер
Форумчанин
 
Аватар для TotKtoNado
 
Регистрация: 22.12.2010
Сообщений: 245
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Свой код перестановки )
Ты же его в while запхнув
кажеться что то я не допонимаю
ругаеться [DCC Error] Unit2.pas(53): E2081 Assignment to FOR-Loop variable 'i'
Код:
  for i:=Low(a) to High(a)-1 do

  begin
    I:=i+1;
    if a[i] > a[i + 1] then
      begin // обменяем k-й и k+1-й элементы
        buf := a[i];
        a[i] := a[i + 1];
        a[i + 1] := buf;
      end;
  end;
TotKtoNado вне форума Ответить с цитированием
Старый 21.08.2011, 20:55   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
I:=i+1;
А вот это вот убери фтопку. Цикл сам инкремент сделает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.08.2011, 10:20   #10
TotKtoNado
юзер
Форумчанин
 
Аватар для TotKtoNado
 
Регистрация: 22.12.2010
Сообщений: 245
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А вот это вот убери фтопку. Цикл сам инкремент сделает.
что за инкремент? и у меня тут много i:=i+1
TotKtoNado вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка массива feras Общие вопросы Delphi 6 23.05.2011 09:56
сортировка массива feras Помощь студентам 5 23.05.2011 09:44
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
Сортировка массива Weyner Помощь студентам 2 23.10.2010 08:32
Сортировка массива vitalik007 Общие вопросы Delphi 2 22.09.2007 20:04