Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабораторная работа / лабораторные работы по LAZARUS / Программирование циклических алгоритмов №3 вар10

.doc
Скачиваний:
56
Добавлен:
11.02.2014
Размер:
35.84 Кб
Скачать

МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РФ

САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

БАЛАКОВСКИЙ ИНСТИТУТ ТЕХНИКИ, ТЕХНОЛОГИИ И УПРАВЛЕНИЯ

факультет: иженерно-строительный

кафедра: управление и информатика в технических системах

Лабораторная работа №3

по дисциплине: системное программное обеспечение

ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ

Выполнил ст. гр. УИТ-32

Принял:

2005 г.

Цель лабораторной работы: освоить простейшие средства отладки модулей проекта, графических компонентов, и создать приложение, которое использует циклический алгоритм.

Задание: создать Windows-приложение, которое выводит таблицу значений функции ее разложения в ряд в виде суммы для значений x от xn до xk c шагом h=(xk - xn)/ 15.

В панели интерфейса предусмотреть возможность управления выводом исходных данных и погрешности вычислений.

Программа:

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, Spin, Buttons;

type

TForm1 = class(TForm)

GroupBox1: TGroupBox;

Label1: TLabel;

SpinEdit1: TSpinEdit;

Label2: TLabel;

Edit1: TEdit;

Label3: TLabel;

Edit2: TEdit;

GroupBox2: TGroupBox;

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

Memo1: TMemo;

BitBtn1: TBitBtn;

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);

var xn,xk,x,h,c,s,y,al,del:extended;

n,k:integer;

begin

n:=StrToInt(SpinEdit1.Text);

xn:=StrToFloat(Edit1.Text);

xk:=StrToFloat(Edit2.Text);

if CheckBox1.Checked then

Memo1.Lines.Add('Исходные данные: n='+IntToStr(n)+

' Xn='+FloatToStrF(xn,ffFixed,6,1)+

' Xk='+FloatToStrF(xk,ffFixed,6,1));

h:=(xk-xn)/n; // шаг h

x:=xn;

repeat // цикл по x

c:=-x*x*x/3;

S:=x;

for k:=1 to n do

begin

s:=s+c;

c:=-c*x*x*(2*k+1)/(2*k+3);

end;

y:=ArcTan(x);

if CheckBox2.Checked then

if CheckBox3.Checked then

begin

al:=s-y; // абсолютная погрешность

del:=abs((s-y)/y)*100; // относительная погрешность

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

' S='+ FloatToStrF(s,ffFixed,6,3)+

' Y='+ FloatToStrF(y,ffFixed,6,3)+

' A='+ FloatToStrF(al,ffFixed,6,3)+

' D='+ FloatToStrF(del,ffFixed,6,0)+'%');

end

else

begin

al:=s-y;

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

' S='+ FloatToStrF(s,ffFixed,6,3)+

' Y='+ FloatToStrF(y,ffFixed,6,3)+

' A='+ FloatToStrF(al,ffFixed,6,3));

end

else

if CheckBox3.Checked then

begin

del:=abs((s-y)/y)*100;

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

' S='+ FloatToStrF(s,ffFixed,6,3)+

' Y='+ FloatToStrF(y,ffFixed,6,3)+

' D='+ FloatToStrF(del,ffFixed,6,0)+'%');

end

else

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

' S='+ FloatToStrF(s,ffFixed,6,3)+

' Y='+ FloatToStrF(y,ffFixed,6,3));

x:=x+h;

until x>xk;

end;

end.

Полученный результат:

Исходные данные: n=15 Xn=0,1 Xk=0,5

x=0,10 S=0,100 Y=0,100 A=0,000 D=0%

x=0,13 S=0,126 Y=0,126 A=0,000 D=0%

x=0,15 S=0,152 Y=0,152 A=0,000 D=0%

x=0,18 S=0,178 Y=0,178 A=0,000 D=0%

x=0,21 S=0,204 Y=0,204 A=0,000 D=0%

x=0,23 S=0,229 Y=0,229 A=0,000 D=0%

x=0,26 S=0,254 Y=0,254 A=0,000 D=0%

x=0,29 S=0,279 Y=0,279 A=0,000 D=0%

x=0,31 S=0,304 Y=0,304 A=0,000 D=0%

x=0,34 S=0,328 Y=0,328 A=0,000 D=0%

x=0,37 S=0,351 Y=0,351 A=0,000 D=0%

x=0,39 S=0,375 Y=0,375 A=0,000 D=0%

x=0,42 S=0,398 Y=0,398 A=0,000 D=0%

x=0,45 S=0,420 Y=0,420 A=0,000 D=0%

x=0,47 S=0,442 Y=0,442 A=0,000 D=0%