| 
| 
 | Вопрос # 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;beginsetlength(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: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |