Как в Delphi исправить ошибку "for loop control variable must be simple local variable"?
Ошибка:
for loop control variable must be simple local variable delphi
Код:
var
y,a,x,xn: real;
i:byte;
begin
a:=strtofloat(edit1.Text);
x:=strtofloat(edit2.Text);
x:=xn+x;
memo1.lines.add('x y');
for x := 0.8 to 2 do;
begin
if x<1.3 then
y:=pi*sqr(x)-7/sqr(x)
else if x=1.3 then
y:=a*power(x,3)+7*sqrt(x)
else if x>1.3 then
y:=ln(x+7*sqrt(x));
memo1.lines.add(floattostrf(x,fffixed,8,3)+''+floattostrf(y,fffixed,8,3)+'');
Ответы (3 шт):
Сравнение не должно быть с переменной x, а с параметром цикла i, то есть вместо "if x = 1.3" нужно написать "if i = 13". Переменную цикла i следует объявить как integer (знаковой). Желательно избавиться от переменной real и использовать float или double вместо нее.
var
a, x, xn, y: Single;
i: Integer;
begin
a := StrToFloat(Edit1.Text);
xn := StrToFloat(Edit2.Text);
xn := xn + x;
Memo1.Lines.Add('x y');
for i := 8 to 20 do
begin
x := i / 10.0;
if i = 13 then
y := a * Power(x, 3) + 7 * Sqrt(x)
else if x < 1.3 then
y := Pi * Sqr(x) - 7 / Sqr(x)
else
y := Ln(x + 7 * Sqrt(x));
Memo1.Lines.Add(FloatToStrF(x, fffixed, 8, 3) + ' ' + FloatToStrF(y, fffixed, 8, 3));
end;
end;
Здесь переменная цикла i объявлена как integer, переменная real заменена на float, а сравнение производится с параметром цикла i.
for x := 0.8 to 2 do;
К сожалению, текст ошибки не совсем полезен. На самом деле приведенный код с циклом for ошибочен по 2 моментам:
1 - не нужно ставить ; после do.
2 - итератор (x) должен быть счётным (ordinal), т.е. целочисленным (Integer и ему подобные типы), перечислимым (enumerated), символьным (Char и подобные) или Boolean
Предполагаю что надо сделать примерно так:
x := 0.8;
while x < 2 do
begin
x := x + 0.1; //это поместить в конец цикла
if x<1.3 then
y:=pi*sqr(x)-7/sqr(x)
else if x=1.3 then
y:=a*power(x,3)+7*sqrt(x)
else if x>1.3 then
y:=ln(x+7*sqrt(x));
memo1.lines.add(floattostrf(x,fffixed,8,3)+''+floattostrf(y,fffixed,8,3)+'');