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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2013, 12:32   #1
Ant_M
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 22
По умолчанию сотрировка stringgrid

имеется код сортировки методом пузырька,дело в том что последнюю строку он не сортирует даже если у нее самое большое число,в чем ошибка?

Код:
procedure TForm4.Button3Click(Sender: TObject);
var
  i, j, z: integer;
  s: string;
const
  sorted = 6;
begin
try
  with StringGrid1 do
    for i := 1 to RowCount - 2 do
      for j := i + 1 to RowCount - 1 do
        if strtoint(Cells[sorted, i]) < strtoint(Cells[sorted, j]) then
          for z := 1 to colcount - 1 do
          begin
            s := Cells[z, i];
            Cells[z, i] := Cells[z, j];
            Cells[z, j] := s;
          end;
except
begin
ShowMessage('Сортировка завершена!');
end;
end;
end;
Ant_M вне форума Ответить с цитированием
Старый 13.05.2013, 10:37   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в принципе код нормальный...

только два вопроса.
1-й. Зачем сообщение о том, что сортировка завершена в событии на ошибку (except) ?!
2-й. Вы сообщение "'Сортировка завершена!" видите? Если да - то однозначно, у Вас возникае exception (исключение), скорее всего при попытке преобразовать строку в число, где строка числом не является! (и, скорее всего, это значение именно в последней строке и находится!)

hint. Используйте или StrToIntDef() или TryStrToInt()

Последний раз редактировалось Serge_Bliznykov; 13.05.2013 в 10:42.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2013, 12:32   #3
Ant_M
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 22
По умолчанию

как только вставляешь StrToIntDef или TryStrToInt начинает ругаться
Ant_M вне форума Ответить с цитированием
Старый 13.05.2013, 12:50   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Ant_M Посмотреть сообщение
как только вставляешь StrToIntDef или TryStrToInt начинает ругаться
Плохо. А как вставляете?! Как ругается?!

кроме того, Вы полностью проигнорировали мои вопросы в пост #2
Вы думаете, решение вашей проблемы больше меня интересует, чем Вас?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2013, 13:19   #5
Ant_M
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 22
По умолчанию

Вставила потому что выскакивает "is not valid integer value" думаю скорее всего из за того что ниже строки пустые.
вставила StrToIntDef красным подчеркивает и все ошибку нигде не пишет
Ant_M вне форума Ответить с цитированием
Старый 13.05.2013, 13:39   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вставили так?!
Код:
       if StrToIntDef(Cells[sorted, i], 0) < StrToIntDef(Cells[sorted, j], 0) then
          for z := 1 to colcount - 1 do
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2013, 13:46   #7
Ant_M
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 22
По умолчанию

Блин нет без 0,они для чего можете объяснить?
Ant_M вне форума Ответить с цитированием
Старый 13.05.2013, 14:23   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

могу.

Цитата:
StrToIntDef function

Converts a string that represents an integer (decimal or hex notation) to a number.

Unit

Sysutils

Category

type conversion routines

function StrToIntDef(const S: string; Default: Integer): Integer;

Description

StrToIntDef converts the string S, which represents an integer-type number in either decimal or hexadecimal notation, into a number. If S does not represent a valid number, StrToIntDef returns the number passed in Default.
перевод от гугл-транслейт
Цитата:
Преобразует строку, представляющую целое число (десятичное или шестнадцатеричном виде) в число.

модуль Sysutils

категория
процедуры преобразования типов

Функция StrToIntDef ( S: String; Default : Integer): Integer;

описание
StrToIntDef преобразует строку S, который представляет собой целое число типа в десятичном или шестнадцатеричном формате, в число. Если S не является действительным числом, StrToIntDef возвращает число, заданное по умолчанию (параметр Default)
0 вернёт функция, если у Вас в ячейке пустая строка или какой-то мусор, которые не может быть распознан, как целое число.

А на будущее рекомендую смотреть встроенный хелп в Delphi (я процитировал именно его) или гуглить по названию функции в интернете. Поверьте, это проще, чем спрашивать на форуме...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.05.2013, 16:33   #9
Ant_M
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 22
По умолчанию

спасибо огромное!
Ant_M вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сотрировка"двоичного включения" lialia Паскаль, Turbo Pascal, PascalABC.NET 1 26.03.2013 07:55
StringGrid Dimati87 Общие вопросы Delphi 13 25.04.2012 15:30
C++ StringGrid Ganez Помощь студентам 1 21.02.2011 18:44
stringgrid+колесо мыши=>stringgrid.onclick aalleexxaa Общие вопросы Delphi 5 16.02.2011 16:58