|
Вопрос # 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."
Помогите пожалуйста.
Вот код...
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, Grids;
-
- type
- TForm1 = class(TForm)
- Label1: TLabel;
- Button1: TButton;
- Edit1: TEdit;
- stringgrid1: TStringGrid;
- Button2: TButton;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
-
- private
- { Private declarations }
- public
- { Public declarations }
-
-
- end;
-
- var
- Form1: TForm1;
- n:integer;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.Button1Click(Sender: TObject);
-
- begin
- n:=StrToInt(Edit1.Text);
- stringgrid1.rowcount:=n;
- stringgrid1.ColCount:=n+1;
- stringgrid1.DefaultColWidth:=40;
-
-
- end;
-
- procedure TForm1.Button2Click(Sender: TObject);
-
- var i,j:integer;
- a: array of array of Extended;
- begin
- setlength(a,n,n+1);
- for i:=0 to n do begin
- for j:=0 to n+1 do begin
- a[i,j]:=StrToFloat(StringGrid1.Cells[i,j]);
- end;
- end;
-
-
-
- end;
-
- end.
-
 |
Вопрос задал: Клименко Олег (статус: Посетитель)
Вопрос отправлен: 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 (статус: Студент), 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 (статус: Студент), 20 ноября 2012, 11:17 [#3]:
В таких случаях ставите точку останова на
a[i,j]:=StrToFloat(StringGrid1.Cells[i,j]);
и в отладчике смотрите при каких значениях i,j происходит ошибка
(или просто трассируете).
|
|
Толяныч (статус: 4-ый класс), 20 ноября 2012, 12:23 [#4]:
Можно попробовать вместо '.' ставить во вводимом числе ',' - может быть, этот разделитель используется по умолчанию. Если так, то оператор DecimalSeparator := '.' ; устранит неоднозначность и приведет к привычному для забугорных стран изображению действительных чисел.
|
|
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: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|