Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 312

/ вопрос решён /

Здравствуйте, уважаемые эксперты!
У меня такой вопрос, могу ли я ввести в Поля StringGrid значения, котолрые потом присвою Матрице??? Так как я ввожу значения в StringGrid и при нажатие на кнопку, выдает ошибку
"project1.exe raised exception class EConvertError with message''' is not a valid floating point value'. Process topped .use step or run to continue."
Помогите пожалуйста.
Вот код...

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5.  
  6. uses
  7. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8. Dialogs, StdCtrls, Grids;
  9.  
  10. type
  11. TForm1 = class(TForm)
  12. Label1: TLabel;
  13. Button1: TButton;
  14. Edit1: TEdit;
  15. stringgrid1: TStringGrid;
  16. Button2: TButton;
  17. procedure Button1Click(Sender: TObject);
  18. procedure Button2Click(Sender: TObject);
  19.  
  20. private
  21. { Private declarations }
  22. public
  23. { Public declarations }
  24.  
  25.  
  26. end;
  27.  
  28. var
  29. Form1: TForm1;
  30. n:integer;
  31.  
  32. implementation
  33.  
  34. {$R *.dfm}
  35.  
  36. procedure TForm1.Button1Click(Sender: TObject);
  37.  
  38. begin
  39. n:=StrToInt(Edit1.Text);
  40. stringgrid1.rowcount:=n;
  41. stringgrid1.ColCount:=n+1;
  42. stringgrid1.DefaultColWidth:=40;
  43.  
  44.  
  45. end;
  46.  
  47. procedure TForm1.Button2Click(Sender: TObject);
  48.  
  49. var i,j:integer;
  50. a: array of array of Extended;
  51. begin
  52. setlength(a,n,n+1);
  53. for i:=0 to n do begin
  54. for j:=0 to n+1 do begin
  55. a[i,j]:=StrToFloat(StringGrid1.Cells[i,j]);
  56. end;
  57. end;
  58.  
  59.  
  60.  
  61. end;
  62.  
  63. end.
  64.  


Клименко Олег Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Клименко Олег (статус: Посетитель)
Вопрос отправлен: 20 ноября 2012, 00:33
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: ANBsoft

Здравствуйте, Клименко Олег!
Ошибку выдает функция StrToFloat, которая сообщает, что "" (тоесть пустое значение) не является корректным числом.
Ошибка, скорее всего, из-за непривычного обращения к ячейке StringGrid, где первым указывается столбец!!!, а второй строка,
(в отличии от, к примеру, Excel, где обращение идет Cells[Строка,Столбец]).
Второй нюанс в том, что при выходе за пределы допустимых значений ячеек StringGrid не выдает ошибку, а возвращает пустое значение.
Для исправления измените на:
a[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);

Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 20 ноября 2012, 01:03


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 24 ноября 2012, 00:42; участников в обсуждении: 3.
Клименко Олег

Клименко Олег (статус: Посетитель), 20 ноября 2012, 08:53 [#1]:

К сожалению не помогло, все та же ошибка (
Возможно так вообще не возможно сделать ?
ANBsoft

ANBsoft (статус: Студент), 20 ноября 2012, 11:15 [#2]:

Не обратил сразу внимание,
отсчет столбцов идет с 0, следовательно номер последнего N, а строки N-1 :
  for i:=0 to n-1 do begin
    for j:=0 to n do begin
      a[i,j]:=StrToFloat(StringGrid1.Cells[i,j]);
    end;
  end;
ANBsoft

ANBsoft (статус: Студент), 20 ноября 2012, 11:17 [#3]:

В таких случаях ставите точку останова на
a[i,j]:=StrToFloat(StringGrid1.Cells[i,j]);
и в отладчике смотрите при каких значениях i,j происходит ошибка
(или просто трассируете).
Толяныч

Толяныч (статус: 4-ый класс), 20 ноября 2012, 12:23 [#4]:

Можно попробовать вместо '.' ставить во вводимом числе ',' - может быть, этот разделитель используется по умолчанию. Если так, то оператор DecimalSeparator := '.' ; устранит неоднозначность и приведет к привычному для забугорных стран изображению действительных чисел.
ANBsoft

ANBsoft (статус: Студент), 20 ноября 2012, 12:46 [#5]:

EConvertError with message''' is not a valid floating point value - пытается обработать пустую строку.
Просто цикл выходит за пределы границ ячеек StringGrid и возвращается пустая строка.
Клименко Олег

Клименко Олег (статус: Посетитель), 24 ноября 2012, 00:42 [#6]:

Все, разобрался, спасибо за помощь

18 марта 2013, 21:22: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Алгоритмы, преобразования модератором Ерёмин А.А.

18 марта 2013, 21:22: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:41
Выполнено за 0.03 сек.