Private
{ Private declarations } Public { Public declarations } end; Var Form1: TForm1; Implementation {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); Begin sd.Cells[0, 0]: ='Кол-во членов ряда'; sd.Cells[1, 0]: ='n-й член'; sd.Cells[2, 0]: ='Значение sin(x)'; end;
procedure TForm1.btn1Click(Sender: TObject); Var n, t: integer; eps, x, y, an: real; Begin try //Защищенный блок x: =StrToFloat(edt1.Text); Except //Обработка ошибки конвертирования On Econverterror do Begin showmessage('Ошибка'); edt1.Text: =''; end; end; eps: =StrToFloat(edt2.Text); t: =Trunc(-ln(eps)/ln(10))+1; //кол-во знаков после запятой lbl4.Caption: ='sin('+floattostrf(x, ffFixed, (t+2), t)+')= '+ floattostrf(Sin(x), ffFixed, t+2, t); y: =x; an: =x; n: =0; sd.RowCount: =2; sd.Height: =2*sd.DefaultRowHeight+10; sd.Cells[0, 1]: =inttostr(n); sd.Cells[1, 1]: =floattostrf(an, ffFixed, t+2, t); sd.Cells[2, 1]: =floattostrf(y, ffFixed, t+2, t); while abs(an) > =eps do Begin inc(n); an: =-an*sqr(x)/(2*n*(2*n+1)); y: =y+an; sd.Cells[0, n+1]: =inttostr(n); sd.Cells[1, n+1]: =floattostrf(an, ffFixed, t+2, t); sd.Cells[2, n+1]: =floattostrf(y, ffFixed, t+2, t); sd.RowCount: =sd.RowCount+1; //увеличивается кол-во строк //и увеличивается высота таблицы sd.Height: =sd.Height+sd.DefaultRowHeight+2; end; end;
procedure TForm1.edt2KeyPress(Sender: TObject; var Key: Char); //Обработка нажатие клавиш при вводе epsilon Begin Case key of '0'..'9', #8:; ', ', '.': begin key: =decimalseparator; If pos(decimalseparator, edt2.Text)< > 0 then key: =#0 end; 'E', 'e': begin key: ='E'; if ((pos('E', edt2.Text)< > 0) or (pos('E', edt2.Text)< > 0)) or ((length(edt2.Text)=1) and ((copy(edt2.Text, 1, 1)='-') or (copy(edt2.Text, 1, 1)='+'))) or ((length(edt2.Text)=0) And ((pos('E', edt2.Text)=0) or (pos('e', edt2.Text)=0))) then key: =#0; end; '-': if Pos('E', edt2.Text)< > Length(edt2.Text) then key: =#0; #13: btn1.SetFocus; //обработка нажатия клавиши Enter Else key: =#0; end;
end; procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char); //Обработка нажатие клавиш при вводе x Begin Case Key of '0'..'9', ', ', '-', '+', 'e', 'E', #8:; #13: edt2.SetFocus Else key: =#0; end; end; end.
Обратите внимание на количество знаков после запятой при выводе промежуточных и окончательных результатов.
Пример 3. Вычислите значение функции с точностью e с помощью итерационной формулы Ньютона: y0=x; yi=0, 5(yi + x/yi), i=1, 2…
Вычисления продолжать, пока |y2 – x| > ε. Подсчитайте количество итераций.
Рис.3.3. Схема алгоритма программы
|