
Программирование и основы алгоритмизации - Лабораторные работы (КИ МГОУ) / Отчёты / Лабораторная работа №2
.docxФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ
Коломенский институт (филиал)
Государственного образовательного учреждения
Высшего профессионального образования
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ОТКРЫТЫЙ УНИВЕРСИТЕТ»
____________________________________________________
Кафедра автоматики и электроники в машиностроении
Отчёт
по лабораторной работе №2
на тему: «Программирование алгоритмов решения дискретных моделей
на примерах задач численного интегрирования»
по дисциплине:
«Программирование и основы алгоритмизации»
Выполнил: студент группы УТС-11
Осипов А. А. (№11147)
Аудитория №210, ПК №10
25.04.12г.
Принял: преподаватель
Филоненко Ирина Николаевна
г. Коломна, 2012г.
Задание.
Вычислить определённый интеграл методом Симпсона.
Вариант |
Кол-во интервалов разбиения |
Точность |
3 |
Автоматический выбор шага |
10-3 |
Блок-схема:
Код программы:
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TTask3 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Image1: TImage;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Image2: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Task3: TTask3;
implementation
{$R *.dfm}
procedure TTask3.Button3Click(Sender: TObject);
begin
close;
end;
procedure TTask3.Button1Click(Sender: TObject);
var
a,b,h,x,e,s1,s2,I1,I2:real;
n:integer;
function F(c:real):real;
begin
F:=2*c; //c*c*c*(sqr(cos(c)));
end;
function I(a1,b1,n1:real):real;
begin
h:=(b1-a1)/n1;
x:=a1+h;
s1:=0;
s2:=0;
while x<b1-h do
begin
s1:=s1+F(x);
x:=x+h;
s2:=s2+F(x);
x:=x+h;
end;
s1:=s1+F(x);
I:=(F(a1)+F(b1)+4*s1+2*s2)*h/3;
end;
begin
Label1.Visible:=true;
try
a:=StrToFloat(Edit3.Text);
b:=StrToFloat(Edit4.Text);
//n:=StrToInt(Edit5.Text);
e:=StrToFloat(Edit6.Text);
except on EConvertError do ShowMessage('Ошибка ввода данных');
end;
I2:=0;
repeat I1:=I2; I2:=I(a,b,n); n:=n*2; until abs(I1-I2)<=e;
Label2.Caption:=FloatToStr(I2);
Edit5.Text:=IntToStr(n);
end;
procedure TTask3.Button2Click(Sender: TObject);
begin
Edit3.Clear;
Edit4.Clear;
Edit5.Clear;
Edit6.Clear;
Label1.Visible:=False;
Label2.Caption:='';
end;
end.