
лабораторная работа / лабораторные работы по LAZARUS / Программирование циклических алгоритмов №3 вар10
.doc
МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РФ
САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
БАЛАКОВСКИЙ ИНСТИТУТ ТЕХНИКИ, ТЕХНОЛОГИИ И УПРАВЛЕНИЯ
факультет: иженерно-строительный
кафедра: управление и информатика в технических системах
Лабораторная работа №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%