Написать код по блок-схеме - VB (171847)
Формулировка задачи:
дана блок схема. не могу переделать на язык программирования. помогите, плиз!!!Метод Симпсона.docx вот здесь
Решение задачи: «Написать код по блок-схеме»
textual
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ExtCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Edit1: TEdit;
Label1: TLabel;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
StringGrid1: TStringGrid;
Image1: TImage;
GroupBox7: TGroupBox;
Edit7: TEdit;
Edit8: TEdit;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:=' Квадратурная формула';
StringGrid1.Cells[1,0]:=' Решение';
StringGrid1.Cells[2,0]:=' Погрешность';
StringGrid1.Cells[0,1]:='Прямоугольников';
StringGrid1.Cells[0,2]:='Трапеций';
StringGrid1.Cells[0,3]:='Симпсона';
StringGrid1.Cells[0,4]:='Чебышева';
StringGrid1.Cells[0,5]:='Гаусса';
Edit1.Text:='4000';
Edit3.Text:='0,0001';
Edit4.Text:='0,0001';
Edit5.Text:='7';
Edit6.Text:='8';
Edit7.Text:='1';
Edit8.Text:='0,6';
end;
Procedure TForm1.Button1Click(Sender: TObject);
const
c=8;
var
n,n1,n2,n3,i:integer;
h,h0,h1,h2,xi,xj,a,b,sum:real;
ti,Ai:array [1..c,1..c]of real;
summ,R:array [1..6]of real;
Procedure Uslovie;
begin
a:=StrToFloat(Edit8.Text);
b:=StrToFloat(Edit7.Text);
n1:=StrToInt(Edit1.Text);
n2:=StrToInt(Edit5.Text);
n3:=StrToInt(Edit6.Text);
h1:=StrToFloat(Edit3.Text);
h2:=StrToFloat(Edit4.Text);
end;
Function f(x:real):real;
begin
f:=(3*x+2)/(2*x-1);
end;
Procedure Dubl;
var
i:integer;
s,v:real;
begin
sum:=0;
h1:=2*h1;
i:=1;
s:=f(a)/2;
v:=f(b)/2;
xi:=a+h1;
repeat
sum:=sum+f(xi);
xi:=xi+h1;
i:=i+1;
until xi>=b;
sum:=h1*(sum+s+v);
end;
Procedure Rectangular;
var
i:integer;
begin
i:=1;
xi:=a;
h0:=(b-a)/n1;
repeat
summ[1]:=summ[1]+h0*f(xi);
xi:=xi+h0;
i:=i+1;
until i=(n1-1);
i:=0;
xi:=a+h0;
repeat
summ[2]:=summ[2]+h0*f(xi);
xi:=xi+h0;
i:=i+1;
until i=n1;
StringGrid1.Cells[1,1]:=FloatToStr((summ[1]+summ[2])/2);
end;
Procedure Trapeze;
var
i:integer;
s,v:real;
begin
i:=1;
n:=Round((b-a)/h1);
s:=f(a)/2;
v:=f(b)/2;
xi:=a+h1;
repeat
summ[3]:=summ[3]+f(xi);
xi:=xi+h1;
i:=i+1;
until i=n;
summ[3]:=h1*(summ[3]+s+v);
Dubl;
R[3]:=(summ[3]-sum)/3;
StringGrid1.Cells[1,2]:=FloatToStr(summ[3]);
StringGrid1.Cells[2,2]:=FloatToStr(R[3]);
end;
Procedure Simpson;
var
i:integer;
s,p,v:real;
begin
s:=0;
v:=0;
p:=0;
i:=0;
s:=f(a)+f(b);
xi:=a+h2;
repeat
p:=p+f(xi);
xi:=xi+2*h2;
i:=i+1;
until xi>=b-h2;
i:=0;
xi:=a+2*h2;
repeat
v:=v+f(xi);
xi:=xi+2*h2;
i:=i+1;
until xi>=b-2*h2;
summ[4]:=(h2/3)*(s+4*p+2*v);
StringGrid1.Cells[1,3]:=FloatToStr(summ[4]);
end;
Procedure Pogreshnost;
var
i:integer;
s,p,v:real;
begin
i:=0;
s:=0;
v:=0;
p:=0;
sum:=0;
h2:=2*h2;
n:=Round((b-a)/h2);
s:=f(a)+f(b);
xi:=a+h2;
repeat
p:=p+f(xi);
xi:=xi+2*h2;
i:=i+1;
until xi>=b-h2;
i:=0;
xi:=a+2*h2;
repeat
v:=v+f(xi);
xi:=xi+2*h2;
i:=i+1;
until xi>=b-2*h2;
sum:=(h2/3)*(s+4*p+2*v);
R[4]:=(summ[4]-sum)/15;
StringGrid1.Cells[2,3]:=FloatToStr(R[4]);
end;
Procedure Uzli;
begin
ti[2,1]:=-0.577350;
ti[2,2]:=0.577350;
ti[3,1]:=-0.707107;
ti[3,2]:=0;
ti[3,3]:=0.707107;
ti[4,1]:=-0.794654;
ti[4,2]:=-0.187592;
ti[4,3]:=0.187592;
ti[4,4]:=0.794654;
ti[5,1]:=-0.832498;
ti[5,2]:=-0.374541;
ti[5,3]:=0;
ti[5,4]:=0.374541;
ti[5,5]:=0.832498;
ti[6,1]:=-0.866247;
ti[6,2]:=-0.422519;
ti[6,3]:=-0.266635;
ti[6,4]:=0.266635;
ti[6,5]:=0.422519;
ti[6,6]:=0.866247;
ti[7,1]:=-0.883862;
ti[7,2]:=-0.529657;
ti[7,3]:=-0.323912;
ti[7,4]:=0;
ti[7,5]:=0.323912;
ti[7,6]:=0.529657;
ti[7,7]:=0.883862;
end;
Procedure Chebishev;
var
i:integer;
summa:real;
begin
summa:=0;
Uzli;
for i:=1 to n2 do
begin
xi:=(a+b)/2+((b-a)/2)*ti[n2,i];
summa:=summa+f(xi);
xi:=0;
end;
summ[5]:=((b-a)/n2)*summa;
StringGrid1.Cells[1,4]:=FloatToStr(summ[5]);
end;
Procedure Uzli2;
begin
ti[1,1]:=0; Ai[1,1]:=2;
ti[2,1]:=-0.57735027; Ai[2,1]:=1;
ti[2,2]:=0.7735027; Ai[2,2]:=1;
ti[3,1]:=-0.77459667; Ai[3,1]:=0.55555556;
ti[3,2]:=0; Ai[3,2]:=0.88888889;
ti[3,3]:=0.77459667; Ai[3,3]:=0.55555556;
ti[4,1]:=-0.86113631; Ai[4,1]:=0.34785484;
ti[4,2]:=-0.33998104; Ai[4,2]:=0.65214516;
ti[4,3]:=0.33998104; Ai[4,3]:=0.65214516;
ti[4,4]:=0.86113631; Ai[4,4]:=0.34785484;
ti[5,1]:=-0.90617985; Ai[5,1]:=0.23692688;
ti[5,2]:=-0.53846931; Ai[5,2]:=0.47862868;
ti[5,3]:=0; Ai[5,3]:=0.56888889;
ti[5,4]:=0.53846931; Ai[5,4]:=0.47862868;
ti[5,5]:=0.90617985; Ai[5,5]:=0.23692688;
ti[6,1]:=-0.93246951; Ai[6,1]:=0.17132450;
ti[6,2]:=-0.66120939; Ai[6,2]:=0.36076158;
ti[6,3]:=-0.23861919; Ai[6,3]:=0.46791394;
ti[6,4]:=0.23861919; Ai[6,4]:=0.46791394;
ti[6,5]:=0.66120939; Ai[6,5]:=0.36076158;
ti[6,6]:=0.93246951; Ai[6,6]:=0.17132450;
ti[7,1]:=-0.94910791; Ai[7,1]:=0.12948496;
ti[7,2]:=-0.74153119; Ai[7,2]:=0.27970540;
ti[7,3]:=-0.40584515; Ai[7,3]:=0.38183006;
ti[7,4]:=0; Ai[7,4]:=0.41795918;
ti[7,5]:=0.40584515; Ai[7,5]:=0.38183006;
ti[7,6]:=0.74153119; Ai[7,6]:=0.27970540;
ti[7,7]:=0.94910791; Ai[7,7]:=0.12948496;
ti[8,1]:=-0.96028986; Ai[8,1]:=0.10122854;
ti[8,2]:=-0.79666648; Ai[8,2]:=0.22238104;
ti[8,3]:=-0.52553242; Ai[8,3]:=0.31370664;
ti[8,4]:=-0.18343464; Ai[8,4]:=0.36268378;
ti[8,5]:=0.18343464; Ai[8,5]:=0.36268378;
ti[8,6]:=0.52553242; Ai[8,6]:=0.31370664;
ti[8,7]:=0.79666648; Ai[8,7]:=0.22238104;
ti[8,8]:=0.96028986; Ai[8,8]:=0.10122854;
end;
Procedure Gauss;
var
i:integer;
summa:real;
begin
summa:=0;
Uzli2;
for i:=1 to n3 do
begin
xi:=(a+b)/2+((b-a)/2)*ti[n3,i];
summa:=summa+Ai[n3,i]*f(xi);
xi:=0;
end;
summ[6]:=((b-a)/2)*summa;
StringGrid1.Cells[1,5]:=FloatToStr(summ[6]);
end;
begin
for i:=1 to 6 do summ[i]:=0;
Uslovie;
Rectangular;
Trapeze;
Simpson;
Pogreshnost;
if (n2>7)or(n2<2) then begin
ShowMessage('Количество узлов должно быть не больше 7 и не меньше 2');
exit;
end;
Chebishev;
if n3>8 then begin
ShowMessage('Количество узлов должно быть не больше 8');
exit;
end;
Gauss;
end;
end.