0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 5
1

Is not a floating point value

23.03.2014, 22:38. Показов 1248. Ответов 9
Метки нет (Все метки)

Всем привет, прошу помощь в следующем коде в делфи, у меня уже крыша едет видает ошибку is not a floating point value, я пробовал менять но у меня не получилось Заранее благодарен.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ComCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Edit2: TEdit;
    Label2: TLabel;
    Panel1: TPanel;
    Button3: TButton;
    Label3: TLabel;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  H, K: real;
  a, j, i, n: integer;
  Y, X: array [1..50] of real;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormActivate(Sender: TObject);
begin
  Edit1.SetFocus;
  StringGrid1.Cells[0,0]:='X';
  StringGrid1.Cells[0,1]:='Y';
  Edit1.Text:='2';
  Label3.Caption:='';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  n:=StrToInt(Edit1.Text);
  StringGrid1.ColCount:=n;
  if n<=1 then ShowMessage('Кількість точок має бути додатнім числом більшим за 1');
  if n>1 then ShowMessage ('Тепер заповніть таблицю значень Х та У');
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var j,i:integer;
begin
  H:=0;
    for i:=1 to n do
    begin
      K:=1;
      for j:=1 to n do
        begin
          if j<>k then
            K:=K*((a-x[j])/(x[i]-x[j]));
        end;
      H:=H+Y[i]*K;
      Label3.Caption:=FloatToStr(H);
    end;
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 
  ShowMessage('Введіть початок інтервалу (а)');
  for i:=1 to n do
    begin
      if StringGrid1.Cells[i,0] <>'' then
      if StringGrid1.Cells[i,0] <>'' then
      X[i]:=StrToFloat(StringGrid1.Cells[i+1,0]);
      Y[i]:=StrToFloat(StringGrid1.Cells[i+1,1]);
      end;
  a:=StrToInt(Edit2.Text);
  Edit2.Text:=('');
 
end;
 
end.
Добавлено через 3 минуты
Ах да, ошибка здесь:
Delphi
1
2
   X[i]:=StrToFloat(StringGrid1.Cells[i+1,0]);
   Y[i]:=StrToFloat(StringGrid1.Cells[i+1,1]);
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2014, 22:38
Ответы с готовыми решениями:

Floating point overflow
unit Unit111; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Ошибка is not a valid floating point value
Добрый день, Выдает ошибку &quot;Ошибка is not a valid floating point value&quot; в процедуре &quot;procedure...

Ошибка is not a valid floating point value
Добрый день. Добрый день. Цель: Заполнить таблицу(form4.StringGrid1) за счет расчетов других...

Ошибка floating point invalid operation
Разбираю код симплекс-метода. Программа не находит минимум функции. Все остальное работает...

9
2478 / 1854 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
23.03.2014, 22:44 2
Возможные варианты:
1. Строка содержит "," вместо "." или наоборот.
2. Строка содержит дополнительные пробелы.
3. Что-то ещё.
1
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 5
23.03.2014, 23:14  [ТС] 3
Скорее всего третий вариант, первый и второй отпадают.

Добавлено через 4 минуты
Ранее мне выдавало ошибку:"is not a valid integer value" и предупреждение, что в цикле переменная должна быть локальной, может я что-то про?рал Хм
0
Модератор
3484 / 2607 / 741
Регистрация: 19.09.2012
Сообщений: 7,969
23.03.2014, 23:23 4
82, 83 - проверяешь одну и ту же ячейку, а переводишь две другие.
1
2478 / 1854 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
23.03.2014, 23:28 5
Лучший ответ Сообщение было отмечено korchi как решение

Решение

Цитата Сообщение от korchi Посмотреть сообщение
переменная должна быть локальной
И сейчас должно быть такое же предупреждение. Также обрати внимание на функции StrToFloatDef, TryStrToFloat.
1
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 5
24.03.2014, 00:22  [ТС] 6
Протестировал с помощью StrToFloatDef, там все нормально, если пройтись одкладчиком, то ошибку видает здесь
Delphi
1
Y[i]:=StrToFloat(StringGrid1.Cells[i+1,1);
0
2478 / 1854 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
24.03.2014, 00:43 7
StrToFloatDef при невозможности конвертировать, подставляет значение по-умолчанию.
1
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 5
24.03.2014, 00:55  [ТС] 8
Я попробовал забрать те 2 строчки кода в следствии чего видало ошибку: "is not a valid integer value"
0
пофигист широкого профиля
4544 / 3017 / 845
Регистрация: 15.07.2013
Сообщений: 17,424
24.03.2014, 02:55 9
Лучший ответ Сообщение было отмечено korchi как решение

Решение

Цитата Сообщение от korchi Посмотреть сообщение
Я попробовал забрать те 2 строчки кода в следствии чего видало ошибку: "is not a valid integer value"
Ну пустые у тебя строки (ячейки) в момент вызова функций преобразования StrToInt/StrToFloat. Вот и всё.
1
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 5
24.03.2014, 14:21  [ТС] 10
Дело в том, что эту программу я реализовал на Паскале, там все работало, а как на Делфи преобразовать, то фиг...

Добавлено через 2 часа 42 минуты
Всем спасибо, разобрался. Вот кому интересно:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
program Project1;
 
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.res}
 
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Добавлено через 59 секунд
Сори - не то, вот:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ComCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Edit2: TEdit;
    Label2: TLabel;
    Panel1: TPanel;
    Button3: TButton;
    Label3: TLabel;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  H : real;
  a, j, i, n: integer;
  Y, X: array [1..50] of real;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormActivate(Sender: TObject);
begin
  Edit1.SetFocus;
  StringGrid1.Cells[0,0]:='X';
  StringGrid1.Cells[0,1]:='Y';
  Edit1.Text:='';
  Label3.Caption:='';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  n:=StrToInt(Edit1.Text);
  StringGrid1.ColCount:=n+1;
  if n<=1 then ShowMessage('Кількість точок має бути додатнім числом більшим за 1');
  if n>1 then ShowMessage ('Тепер заповніть таблицю значень Х та У');
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var
  k,i:integer;
  j1:real;
begin
  a:=StrToInt(Edit2.Text);
  H:=0;
  for k:=1 to n do
    begin
      j1:=1;
      for i:=1 to n do
        begin
          if i<>k then
            j1:=j1*((a-x[i])/(x[k]-x[i]));
        end;
      H:=H+Y[k]*j1;
    end;
 
  Label3.Caption:=FloatToStrF(H, ffFixed, 5, 3);
 
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 
  ShowMessage('Введіть початок інтервалу (а)');
  for i:=1 to n do
    begin
      if StringGrid1.Cells[i,0] <>'' then
      if StringGrid1.Cells[i,1] <>'' then
      begin
        X[i]:=StrToFloat(StringGrid1.Cells[i,0]);
        Y[i]:=StrToFloat(StringGrid1.Cells[i,1]);
      end;
    end;
end;
 
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2014, 14:21
Помогаю со студенческими работами здесь

Ошибка с StrToFloat: '402.101' is not valid floating point value.
Всем привет. У меня такая проблема: Стоит Delphi6 на win2000 server, написал прогу, в которой...

Исключение класса EConvertError с сообщением что is not valid floating point value
const G1=100; type GG=array of extended; var n:integer; Form1: TForm1; ...

Ошибка программы: "Invalid floating point operation"
не знаю что такое, подскажите. Project raised exception Class EInvalidOp with message &quot; Invalid...

Ошибка " is not a valid floating point value "
помогите пожалуйста! задача такая: заданы массивы x,y,z. Для каждого массива, через подпрограмму...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru