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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2013, 05:18   #1
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию Помогите найти ошибку - StrToFloat выдаёт ошибку EConvertError для ячеек StringGrid (Delphi)

Доброго времени суток.
Объясните, почему ругается на "Проект Project1.exe возникло исключение класса EConvertError с сообщением " " не является допустимым с плавающей запятой"
Код:
StringGrid2.ColCount := StrToInt(Edit1.Text);

 for j := 0 to StringGrid1.RowCount do //строки
 begin
  min := StrToFloat(StringGrid1.Cells[0, j]);

  for I := 1 to StringGrid1.ColCount do //столбцы
   if StrToFloat(StringGrid1.Cells[i, j]) < min then
    min := StrToFloat(StringGrid1.Cells[i, j]);

   StringGrid2.Cells[j, 0] := FloatToStr(min);
   StringGrid2.Cells[j, 1] := IntToStr(j);
 end;
Artsiom вне форума Ответить с цитированием
Старый 17.12.2013, 08:43   #2
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Все ячейки заполнены цифрами. Типа как в SQL, null ни где не присутствует.
Artsiom вне форума Ответить с цитированием
Старый 17.12.2013, 09:04   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Все ячейки заполнены цифрами. Типа как в SQL, null ни где не присутствует.
во-первых, при чём здесь null ?!
ваш код натыкается на ПУСТУЮ ячейку (т.е. ячейку, в которой находится ПУСТАЯ строка)

во-вторых,
Цитата:
Все ячейки заполнены цифрами.
- не верю! (с) Станиславский! (для примера, 50-я ячейка в 100-м столбце точно содержит число?!

для начала циклы крутите правильно:
Код:
 for j := 0 to StringGrid1.RowCount-1 do //строки
 begin
  min := StrToFloat(StringGrid1.Cells[0, j]);

  for I := 1 to StringGrid1.ColCount-1 do //столбцы
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.12.2013, 02:39   #4
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-вторых, - не верю! (с) Станиславский! (для примера, 50-я ячейка в 100-м столбце точно содержит число?!
[/CODE]
Эм, я не задавал массива больше чем 4х4. От куда там может взяться 100 столбец?
Artsiom вне форума Ответить с цитированием
Старый 18.12.2013, 08:40   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Artsiom Посмотреть сообщение
Эм, я не задавал массива больше чем 4х4. От куда там может взяться 100 столбец?
Вам хочется это обсудить этот вопрос?

ОК.
Это ответ на ваше замечание:
Цитата:
Все ячейки заполнены цифрами.
я и пытаюсь донести до Вас, что у Вас НЕ ВСЕ ячейки заполнены цифрами (точнее числами).

Для понимания сего факта напишите у себя примерно такой код:
Код:
var s : string;
begin
  s := StringGrid1.Cells[99, 49];
А теперь вопрос Вам - что сделает данный код и чему будет равная строковая переменная s после выполнения данного кода?!

p.s. это всё лирика! Вы видели, где Вы ошибку в коде допустили (я выделил исправления)? Всё работает?!

Последний раз редактировалось Serge_Bliznykov; 18.12.2013 в 08:44.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.12.2013, 10:42   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Вот как надо в таких спорных случаях:
Код:
 
var k:integer;
...
for j := 0 to StringGrid1.RowCount do //строки
 begin
  min := StrToFloat(StringGrid1.Cells[0, j]);

  for I := 1 to StringGrid1.ColCount do //столбцы
   if TryStrToFloat(StringGrid1.Cells[i, j],k)  then begin
    if k<min then min:=k;
  end else ShowMessage('В ячейке '+StringGrid1.Cells[i, j]+' не целое');

   StringGrid2.Cells[j, 0] := FloatToStr(min);
   StringGrid2.Cells[j, 1] := IntToStr(j);
 end;
Тогда будет ясно где ошибся.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.12.2013, 11:57   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Вот как надо в таких спорных случаях:
Код:
 
for j := 0 to StringGrid1.RowCount do //строки
....
  for I := 1 to StringGrid1.ColCount do //столбцы
....
   .... ShowMessage('В ячейке '+StringGrid1.Cells[i, j]+' не целое');
Тогда будет ясно где ошибся.
во-первых, почему "не целое" ? Не вещественное.

во-вторых, ничего не будет ясно.

Выдаст код "В ячейке не целое ", и что это даст?!
То, что там пустая строка, и к Ванге не ходи, я и так это скажу!

Но даже если добавить в это сообщение выдачу I и J это всё равно вряд ли сразу поможет TC.
Ибо нумерация строк/столбцов идёт от нуля.
Допустим, RowCount = 4 (четыре строки) выдаёт, что в ячейке
с номером столбца 1 и строкой 4 не число. И что? На самом деле, строки заполнены только нулевая, первая, вторая и третья. Но TC то считает, что у него с 1-й по 4-ю заполнены!!

p.s. я выше выложил исправленный код. Зачем проверять ЗАВЕДОМО ОШИБОЧНЫЙ код?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.12.2013, 12:15   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Выдаст код "В ячейке не целое ", и что это даст?!
Это даст возможность выяснить в какой ячейке нечисло.
Я проверяюсь именно так если проявляется необходимость.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.12.2013, 13:07   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это даст возможность выяснить в какой ячейке нечисло.
каким образом это даст выяснить в КАКОЙ ячейке не число ?!
Может быть, Вы это смотрите в отладчике.
Или в тексте сообщения выводите индексы ячейки.
Но в данном примере кода индексы у Вас не выводятся.
Кроме самого сообщения, никакой другой информации не будет отображено!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.12.2013, 13:31   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Но в данном примере кода индексы у Вас не выводятся.
Потому что это всего лишь подсказка )
Ничего не мешает там автору написать вывод координат. Мне просто было лень так расписывать. Основной намек - проверка на число путем попытки перевода и обработка ошибки перевода. А как автор этим распорядится не мое дело.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выдаёт ошибку: acos DOMAIN error,полсе нажатия окей,ещё одну ошибку pow OWERFLAW ERROR prikolist Общие вопросы C/C++ 4 10.04.2009 20:27
Помогите найти ошибку..в программе..учебник Delphi для начинающих LightofMagic Общие вопросы Delphi 6 26.02.2009 01:20
Помогите найти ошибку (Delphi) Армана Помощь студентам 7 23.11.2008 23:01
Помогите найти ошибку (Delphi) Rigard Помощь студентам 4 23.07.2008 03:06