Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
met_2011.doc
Скачиваний:
95
Добавлен:
13.11.2019
Размер:
2.46 Mб
Скачать

3.4 Порядок выполнения задания

Написать и отладить программу, которая выводит таблицу значений функции и ее разложение в ряд для х, изменяющихся в интервале от xn до xk c шагом h. Функцию S(x) вычислять с точностью до 0,001. Вывести число итераций, необходимое для достижения заданной точности.

При составлении алгоритма удобно использовать рекуррентную последовательность (каждое новое слагаемое которой зависит от одного или нескольких предыдущих). Для получения расчетной формулы рассмотрим значение слагаемого при различных значениях k:

при

при

при

при и т.д.

Видно, что на каждом шаге слагаемое дополнительно умножается на . Исходя их этого, формула рекуррентной последовательности будет иметь вид:

Полученная формула позволяет избавиться от многократного вычисления факториала и возведения в степень. Если в выражении имеется нерекуррентая часть, то ее следует рассчитывать отдельно.

Панель диалога представлена на рисунке 3.5.

Рисунок 3.5 – Панель диалога

3.4.1 Блок-схема алгоритма

Рис.3.1

3.4.2 Код программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms, Dialogs, Buttons, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Edit3: TEdit;

Label5: TLabel;

Edit4: TEdit;

Label6: TLabel;

Memo1: TMemo;

Label7: TLabel;

Label8: TLabel;

Button1: TButton;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

procedure Edit4KeyPress(Sender: TObject; var Key: Char);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

Edit1.Text:='0';

Edit2.Text:='2';

Edit3.Text:='0.25';

Edit4.Text:='0,001';

Memo1.Clear;

Label6.Caption:='Результаты ст. гр. 012501 Иванова И.И.';

end;

procedure TForm1.Button1Click(Sender: TObject);

var

xn,xk,x,h,e,a,s,y :Extended;

n,k:Integer;

begin

Memo1.Lines.Add('Вычисление таблицы значений функции');

Memo1.Lines.Add('Исходные данные:');

xn:=StrToFloat(Edit1.Text);

Memo1.Lines.Add('xn='+FloatToStrF(xn,ffFixed,6,2));

xk:=StrToFloat(Edit2.Text);

Memo1.Lines.Add(‘xk='+FloatToStrF(xk,ffFixed,6,2));

h:=StrToFloat(Edit3.Text);

Memo1.Lines.Add('h='+FloatToStrF(h,ffFixed,8,3));

e:=StrToFloat(Edit4.Text);

Memo1.Lines.Add('eps='+FloatToStrF(e,ffFixed,8,5));

Memo1.Lines.Add('Таблица значений функции');

Memo1.Lines.Add(' x S(x) Y(x) n');

x:=xn;

Repeat

a:=1;

S:=1;

n:=0;

While Abs(a) > e Do

Begin

Inc(n) // n:=n+1;

a:=-a*x/n;

s:=s+a;

End;

y:=Exp(-x);

Memo1.Lines.Add(FloatToStrF(x,ffFixed,6,2)+' ‘+FloatToStrF(s,ffFixed,

8,4)+' ' + FloatToStrF(y,ffFixed,8,4)+ ' '+ IntToStr(n));

x:=x+h;

Until x>xk+h/2 //xk+h/2 применяется для исключения потери последнего x

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin // Очистка полей ввода и вывода результата для нового расчета

Edit1.text:=' ';

Edit2.text:=' ';

Edit3.text:=' ';

Edit4.text:=' ';

Memo1.Clear;

Label6.Caption:=' ';

end;

end.

После отладки программы составьте тест (n=2, xn=0, xk=1, h=3), установите курсор на оператор Inc(n); нажмите клавишу F4. После этого нажимая клавишу F7, выполните пошаговую программу и проследите, как меняются все переменные в процессе выполнения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]