Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика АиУ.doc
Скачиваний:
20
Добавлен:
09.11.2018
Размер:
1.56 Mб
Скачать

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

Рис.8.1. Блок схема алгоритма приближенного вычисления экспоненты

Примеры программ, реализующих алгоритм рис.8.1 на языке Паскаль и С, приведены в приложении 7 и 8.

4. Реализация алгоритма в среде Delphi

После запуска Delphi и открытия окна формы (модуль Form1) разместим в нем следующие объекты:

  • поля редактирования Edit1 – Edit3 – для ввода исходных данных: значения аргумента x функции, значения точности ε и значение максимального количества итераций соответственно;

  • метки Label1 – Label13 – для вывода заголовков, пояснений и результатов;

  • кнопки Button1 – Button3 – для управления работой программы.

С помощью инспектора объектов (object inspector) определяются заголовки для объектов Form1, Label1 – Label13 путем ввода соответствующего текста в поле caption вкладки properties. Например, для окна Form1 в поле caption вводится текст «Приближенное вычисление функции exp(x)»; для метки Label2 – текст «Исходные данные», для метки Label6 – текст «Результаты счета» для меток Label7,8,10,11,13 поле caption остается свободным, для кнопки Button1 – текст «Ввод исходных данных» и т.д.

Общий вид окна формы с выбранными компонентами представлен на рис.8.2.

Рис.8.2. Окно формы (модуль Form1) программы в Delphi для вычисления приближенного значения функции ex

После размещения объектов в окне формы в окне кода будет представлен следующий текст программы:

unit unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Menus, Grids, ExtCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

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;

Button1: TButton;

Button2: TButton;

Button3: TButton;

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

end.

Проект под именем iterfun cохраним в отдельной папке. Для управления работой программы с каждой кнопкой связывается событие «щелкнуть» (Click) и задается, что при щелчке на кнопке 1 (объект Button1) программа должна ввести исходные данные: значения коэффициентов a,b,c исходного уравнения из полей редактирования (объекты Edit1Edit3) и присвоить их переменным x, eps, kmax соответственно. Для этого после двойного щелчка кнопки Button1 и попадания в окно кода вводятся три оператора присваивания:

x:=StrToFloat(Edit1.text);

eps:=StrToFloat(Edit2.text);

kmax:=StrToInt(edit3.text);

Здесь стандартные функции StrToFloat и StrToInt преобразуют символьное представления значения поля text объекта edit в вещественное и целое значение соответственно.

Далее после двойного щелчка кнопки Button2 и попадания снова в окно кода вводятся операторы, реализующие алгоритм вычисления приближенного значения функции и их вывод в поле caption меток Label7, 8, 10, 13. Для проверки результата предусматривается вычисление и вывод значения функции с использованием стандартной функции exp(x). Аналогично после двойного щелчка кнопки Button3 и попадания в окно кода вводится оператор вызова процедуры Close для завершения работы программы. Для хранения данных определяются переменные x,a0,a1,s,eps k,kmax в операторе var (добавляется строка x,a0,a1,s,eps: Real; k,kmax:integer; после строки var Form1: TForm1;). В текст программы добавляются комментарии. С помощью команды Save As меню File созданный модуль с кодом программы сохраняется в файле iterfun.pas. В результате исходный код программы (модуль iterfun) будет иметь следующий вид

unit iterfun;

{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}

{ Вычисление функции exp(x) по ее разложению в ряд }

{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Menus, Grids, ExtCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

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;

Button1: TButton;

Button2: TButton;

Button3: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var Form1: TForm1;

x,a0,a1,s,eps: Real; k,kmax:integer;

implementation

{$R *.DFM}

procedure TForm1.Button2Click(Sender: TObject);

{ввод исходных данных }

begin

x:=StrToFloat(Edit1.text);

eps:=StrToFloat(Edit2.text);

kmax:=StrToInt(edit3.text);

end;

procedure TForm1.Button1Click(Sender: TObject);

{Завершение работы программы}

begin close end;

procedure TForm1.Button3Click(Sender: TObject);

{вычисление экспоненты суммированием членов ряда}

{exp= 1+x/1!+x^2/2!+…}

begin

k:= 1; a0:= 1; s:= a0;

label11.Caption:='за ';

label10.Caption:='';

label13.Caption:='';

a1:= a0*x/k;

while (abs(a1)>eps) and (k<kmax) do

begin

s:= s+a1;

a0:= a1;

k:= k+1;

a1:= a0*x/k;

end;

if (k=kmax) then begin

label10.Caption:=InttoStr(k);

label13.Caption:=' итераций точность не достигнута';

end else begin

label10.Caption:=InttoStr(k);

label13.Caption:=' итераций точность достигнута';

end;

label7.Caption:=FloatToStr(s);

label8.Caption:= FloatToStr(exp(x));

end; end.