Написать код по блок-схеме - 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5