Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Help!


Страницы:   1 2

Tans ©   (2006-04-21 07:05:00) 

Уважаемые мастера! Помогите начинающему! При запуске этой процедуры выдается ошибка:'Invalid floating point operator' . Помогите, пжалста, исправить!
procedure TForm1.FormCreate(Sender: TObject);
begin
SXi:=0;
SYi:=0;
SXi_Yi:=0;
n:=10;
with StringGrid1 do
   begin
     Cells[0, 0] := '¹';
     Cells[1, 0] := 'x';
     Cells[2, 0] := 'y';
      Cells[3, 0] := 'F(x)';

     x:=a+x*h;
     y:=(x);
     a0:=(SXi_Yi- (SXi*SYi))/(SXi*(1-n));
     a1:=(SYi-a0*n)/ SXi;
     F := a0+a1*x;
     h:=0.1;

StringGrid1.Cells[1,i]:= FloatToStr(x);
StringGrid1.Cells[2,i]:= FloatToStr(y);
StringGrid1.Cells[3,i]:= FloatToStr(F);
SXi:=SXi+ StrToFloat(StringGrid1.Cells[1,i]);
SYi:=SYi+ StrToFloat(StringGrid1.Cells[2,i]);
SXi_Yi:= SXi_Yi+(x*y);
SXi_Yi1:=x*y;

   end;
end;


Галинка   (2006-04-22 00:15:00) [1]

А задание какое? x, y, h как-то определены? Иначе и должны быть нули.


Ega23   (2006-04-21 09:20:00) [2]

Блин, нельзя такие ветки с утра читать. Особенно быстро. Создаётся впечатление, что ты вообще из реальности выпадаешь...


Elen   (2006-04-21 09:12:00) [3]

Tans еше раз пересмотри свою задачу и свою программу. У тебя там X Y всегда 0. Удачи!


balepa   (2006-04-21 09:11:00) [4]

Потому что x = 0


Tans   (2006-04-21 09:09:00) [5]

Мне непонятно, почему получаются нули!


balepa   (2006-04-21 09:04:00) [6]


> Tans   (21.04.06 09:00) [15]


А как ты на матиматике такое решал или у вас ее нет?


Tans   (2006-04-21 09:00:00) [7]

А как тогда?


balepa   (2006-04-21 08:58:00) [8]


> Tans   (21.04.06 08:53) [13]


А чего ты ожидал с таким кодом ?
x:=x+x*h;
y:=(x);
a0:=(SXi_Yi- (SXi*SYi));
Z:=x*y;

X = 0
y=0
Sxi =0
Syi=0
Z = 0


Tans   (2006-04-21 08:53:00) [9]

А теперь нулями заполняет!


Elen   (2006-04-21 08:50:00) [10]

for i := 1 to StringGrid1.RowCount - 1 do Begin


Tans   (2006-04-21 08:45:00) [11]

Теперь не ругается, только SG не заполняет!


balepa   (2006-04-21 08:41:00) [12]

Tans сори не обращай внимание у меня глюки, и задавай вопросы в одной ветке а то я уже замучался туда сюда "прыгать"


Elen   (2006-04-21 08:39:00) [13]

У тебя там StringGrid1.Cells[1,i]='', а пусто в число не переводится
замени свой for на этот

for i := 1 to StringGrid1.RowCount - 1 do
if StringGrid1.Cells[1,i]<>'' then Z1:=StrToFloat(StringGrid1.Cells[1,i]);


Tans   (2006-04-21 08:36:00) [14]

а...которая строка? :)


balepa   (2006-04-21 08:35:00) [15]

Так и будет ругаться строку 'x' нельзя перевести в вещественное число


Tans   (2006-04-21 08:31:00) [16]

procedure TForm1.FormCreate(Sender: TObject);
begin
SXi:=0;
SYi:=0;
SXi_Yi:=0;
n:=10;
with StringGrid1 do
begin
     Cells[0, 0] := '¹';
     Cells[1, 0] := 'x';
     Cells[2, 0] := 'y';
     Cells[3, 0] := 'F(x)';
begin
for i := 1 to StringGrid1.RowCount - 1 do
Z1:=StrToFloat(StringGrid1.Cells[1,i]);
Z2:=StrToFloat(StringGrid1.Cells[2,i]);
Z:=Z1*Z2;
Cells[0, i] := IntToStr(i);

     x:=x+x*h;
     y:=(x);
    a0:=(SXi_Yi- (SXi*SYi));
   if SXi0 then  a0:=a0/(SXi*(1-n));
   a1:=(SYi-a0*n);
   if SXi0 then a1:=a1/ SXi;
     F := a0+a1*x;
     h:=0.1;
     Z:=x*y;
StringGrid1.Cells[1,i]:= FloatToStr(x);
StringGrid1.Cells[2,i]:= FloatToStr(y);
StringGrid1.Cells[3,i]:= FloatToStr(F);
SXi:=SXi+ StrToFloat(StringGrid1.Cells[1,i]);
SYi:=SYi+ StrToFloat(StringGrid1.Cells[2,i]);
SXi_Yi:= SXi_Yi+(Z1*Z2);
SXi_Yi1:=Z;

end;
end;
end;


Elen   (2006-04-21 08:29:00) [17]

У меня не ругается. А где ты ее прописал?


Tans   (2006-04-21 08:19:00) [18]

Теперь ругается на эту строчку: Z1:=StrToFloat(StringGrid1.Cells[1,i]);
пишет:"is not valid floating point value"


Elen   (2006-04-21 08:09:00) [19]

У тебя изначально Sxi равняется 0, а на ноль делить нельзя
замени   a0:=(SXi_Yi- (SXi*SYi))/(SXi*(1-n));
  a1:=(SYi-a0*n)/ SXi;

на
a0:=(SXi_Yi- (SXi*SYi));
  if sxi<>0 then  a0:=a0/(SXi*(1-n));
  a1:=(SYi-a0*n);
  if sxi<>0 then a1:=a1/ SXi;


НА будущее : Тестируй программу пошагово, расставь точки прерывания и проверяй значения переменных, наводя на них курсор мыши.


Tans   (2006-04-21 07:59:00) [20]

i: integer;
   x, y,a0,a1,F,SXi,SYi,SXi_Yi,n,Z,SXi_Yi1,Z1,Z2: Double;
   h,a:real;
Вот это они.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо