|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
For loop control variable must be simple local variable
Создал программу разложения функции в ряд Фурье. Выдает ошибку:
For loop control variable must be simple local variable Таких 7 штук на каждый коэффициент собственно, хотя в каждой процедуре задается отдельно эта самая локальная переменная для расчета массивов. Код программы: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ComCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart, XPMan; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Button2: TButton; Chart1: TChart; Series1: TLineSeries; Series2: TLineSeries; Series3: TLineSeries; Series4: TLineSeries; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; //l: real; //i: integer; y0,y1,y2,y3,x,a1,a2,a3,b1,b2,b3,a0: real; l: integer; d: real; h1: array[0..100] of real; //a1 h2: array[0..100] of real; //a2 h3: array[0..100] of real; //a3 h4: array[0..100] of real; //a0 k1: array[0..100] of real; //b1 k2: array[0..100] of real; //b2 k3: array[0..100] of real; //b3 implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin // Вычисление коэффициента а1 l:=StrToInt(Edit1.Text); d:=(2*3.14)/l; // Длина отрезка //a1 //h1[0]:=0; a1:=0; for i=0 to l do begin h1[i]:=(3.14-i*0.314)*d*cos(3.14-i*0.314); a1:=a1+h1[i]; end; Label9.caption:=FloatToStr(a1); end; procedure TForm1.Button2Click(Sender: TObject); begin // ГРАФИКИ x:=-4; while x<4 do begin y1:=0.5*a0+a1*cos(x)+b1*sin(x); y0:=x; y2:=y1+a2*cos(2*x)+b2*sin(2*x); y3:=y2+a3*cos(3*x)+b3*sin(3*x); series1.AddXY(x,y1); series2.AddXY(x,y0); series3.AddXY(x,y2); series4.AddXY(x,y3); x:=x+0.1; end; end; procedure TForm1.Button3Click(Sender: TObject); var i: integer; begin // Вычисление коэффициента а0 l:=StrToInt(Edit1.Text); d:=(2*3.14)/l; // Длина отрезка //a0 //h1[0]:=0; a0:=0; for i=0 to l do begin h4[i]:=(3.14-i*0.314)*d; a0:=a0+h4[i]; end; Label8.caption:=FloatToStr(a0); end; procedure TForm1.Button4Click(Sender: TObject); var i: integer; begin // Вычисление коэффициента а2 l:=StrToInt(Edit1.Text); d:=(2*3.14)/l; // Длина отрезка //a2 //h1[0]:=0; a2:=0; for i=0 to l do begin h2[i]:=(3.14-i*0.314)*cos((3.14-i*0.314)*2)*d; a2:=a2+h2[i]; end; Label10.caption:=FloatToStr(a2); end; procedure TForm1.Button5Click(Sender: TObject); var i: integer; begin // Вычисление коэффициента а3 l:=StrToInt(Edit1.Text); d:=(2*3.14)/l; // Длина отрезка //a3 //h1[0]:=0; a3:=0; for i=0 to l do begin h3[i]:=(3.14-i*0.314)*cos((3.14-i*0.314)*3)*d; a3:=a3+h3[i]; end; Label11.caption:=FloatToStr(a3); end; procedure TForm1.Button6Click(Sender: TObject); var i: integer; begin // Вычисление коэффициента b1 l:=StrToInt(Edit1.Text); d:=(2*3.14)/l; // Длина отрезка //b1 //k1[0]:=0; b1:=0; for i=0 to l do begin k1[i]:=(3.14-i*0.314)*sin(3.14-i*0.314)*d; b1:=b1+k1[i]; end; Label12.caption:=FloatToStr(b1); end; procedure TForm1.Button7Click(Sender: TObject); var i: integer; begin // Вычисление коэффициента b2 l:=StrToInt(Edit1.Text); d:=(2*3.14)/l; // Длина отрезка //b2 //k2[0]:=0; b2:=0; for i=0 to l do begin k2[i]:=(3.14-i*0.314)*sin((3.14-i*0.314)*2)*d; b2:=b2+k2[i]; end; Label13.caption:=FloatToStr(b2); end; procedure TForm1.Button8Click(Sender: TObject); var i: integer; begin // Вычисление коэффициента b3 l:=StrToInt(Edit1.Text); d:=(2*3.14)/l; // Длина отрезка //b3 //k3[0]:=0; b3:=0; for i=0 to l do begin k3[i]:=(3.14-i*0.314)*sin((3.14-i*0.314)*3)*d; b3:=b3+k3[i]; end; Label14.caption:=FloatToStr(b3); end; end. Последний раз редактировалось ugicedeath, 22.02.2013 в 17:34. |
#2
|
||||
|
||||
Наверное выдаёт ошибку в это месте?
Код:
... for i= 0 to l do begin ... З.Ы. Пропустил случайно: должно быть так: For i : = Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 22.02.2013 в 17:42. Причина: Исправление |
#3
|
|||
|
|||
Я так и делаю Я ее в каждой процедуре отдельно выделяю. Я еще пробовал для каждой процедуры совершенно новую создавать переменную, не помогает. Вроде ошибка не должна стопить программу, но все равно она стопится, таких ошибок просто 7 штук. А есть вариант как нибудь на сильно запустить программу?
|
#4
|
|||
|
|||
Дело не в l, дело в i. Я уже пробовал l задавать отдельно каждый раз.
|
#5
|
|||
|
|||
Неужели никто незнает? Ошибка же очень простая
|
#6
|
||||
|
||||
Выложи проект целиком.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#7
|
||||
|
||||
В присвоении параметра цикла пропущено двоеточие, должно быть так: i:=
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#8
|
|||
|
|||
Точно ведь всего лишь двоеточие, вот я дурак. Всем спс! Пойду дальше пробовать, там еще ошибки есть, буду исправлять, если все получится отпишу.
|
#9
|
|||
|
|||
Все сделал, всем спс кто помог! Написал прогу, можно менять даже точность измерений!
|