Програма обчислення визначених інтегралів по квадратурним формулам

Автор работы: Пользователь скрыл имя, 09 Января 2013 в 13:31, курсовая работа

Описание работы

В данной расчетно-графической работе осуществляется разработка учебной программы по вычислению определённых интегралов(по формулам прямоугольников) с помощью программы Delphi7. Эта программа помогает вычислять некоторые определённые интегралы. В использовании не требует особого обучения . Это приложение популярно среди людей нуждающихся в точном подсчёте интегралов . Подсчёт интегралов не занимает много времени, что так же повышает ее популярность.

Содержание работы

ВСТУПЛЕНИЕ……………………………………………..………………………..3
1. ПОСТАНОВКА ЗАДАЧИ…………………………………………….….……...4
2. ПРОЕКТИРОВАНИЕ ПРОГРАММНЫХ СРЕДСТВ………………….……5
2.1. Математические методы решения задачи………………………….…….......6
2.2. Проектирование алгоритмов ………………………………………………..10
2.2.1. Структура программного обеспечения …………………………….....11
2.2.2. Описание разработанных алгоритмов ………………………….…....12
2.2.3. Средства управления программами ……………………………........13
2.3. Информационное обеспечение…...………………………………………....14
2.3.1. Описание входных данных ……………………………….……..…...15
2.3.2. Описание результатов …………………………………….…………...16
3. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ……………………………………………..17
3.1. Описание разработанных программ……….….………………………...18
3.2 Требования к аппаратным и программным средствам…………………..19
3.3. Руководство пользователя ………………………………………………..20
4. ИСПЫТАНИЕ РАЗРАБОТАННЫХ ПРОГРАММ ……………………….....25
4.1 Описание контрольных примеров. Результаты тестирования на ЭВМ...25
ЗАКЛЮЧЕНИЕ…………………………………………………………………….30
ЛИТЕРАТУРА………………………………………………………………..…….31
ПРИЛОЖЕНИЯ ..………………………………………………

Файлы: 1 файл

Пояснювальна записка.docx

— 2.50 Мб (Скачать файл)

            ShowMessage('Введены неправильные данные !');

            goto m1;

         end;

         s:=ms[i];

         index:=pos('-',s);   //минус

         if(index<>0)and(index<>1)then begin

            enter_data:=false;

            ShowMessage('Введены неправильные данные !');

            goto m1;

         end;

     end;

     Try

        for i:=1 to 6 do begin

            mr[i]:=RoundTo(StrToFloat(ms[i]), -3);

            ms[i]:=FloatToStr(mr[i]);

        end;

     Except

        enter_data:=false;

        ShowMessage('Вы ввели неправильные(не числовые) данные ');

        flag:=false;

     end;

     if(flag=false)then goto m1;

     if (mr[6] < mr[5]) then begin

         enter_data:=false;

         ShowMessage('Конец отрезка должен быть больше, чем начало !');

         goto m1;

     end;

     for i:=1 to 4 do

        if(mr[i]<0)then ms[i]:='('+ms[i]+')';

     enter_data:=true;

m1:end;

//----------------вычисляем значение ф-ии  в точке------------------------------

function F(x : real):real;

begin

     F :=  mr[1]*sin(mr[2]*x*3.14/180)+mr[3]*cos(mr[4]*x*3.14/180);

end;

//----------------вычисляем шаг и количество  разбиений отрезка-----------------

Procedure T;

begin

     h := 0.01;

     n := Trunc((mr[6]-mr[5])/h);

end;

//----------------Вывод в форму результатов------------------------------------

procedure print_function();

var

   s:string;

begin

    s:='';

    if((mr[1]=0)or(mr[2]=0))and(mr[3]=0)then s:='0'

    else begin

        if(mr[1]=1)and(mr[2]=1)then s:=s+'sin(x)'

        else begin

            if((mr[1]<>0)and(mr[2]<>0))then begin

                if(mr[1]=1)then s:=s+'sin('+ms[2]+'*x)'

                else begin

                    if(mr[2]=1)then s:=s+ms[1]+'*sin(x)'

                    else s:=s+ms[1]+'*sin('+ms[2]+'*x)';

                end;

            end;

        end;

        if(mr[3]=1)and(mr[4]=1)then s:=s+'+cos(x)'

        else begin

            if(mr[3]<>0)then begin

                if(mr[4]=0)then s:=s+ms[3]

                else begin

                    if(mr[3]=1)then s:=s+'+cos('+ms[4]+'*x)'

                    else begin

                        if(mr[4]=1)then s:=s+'+'+ms[3]+'*cos(x)'

                        else s:=s+'+'+ms[3]+'*cos('+ms[4]+'*x)';

                    end;

                end;

            end;

        end;

    end;

    if (s[1]='+')then delete(s, 1, 1);

    Form_rez.Label6.Caption:=s;

    Form_rez.Label6.Caption:=Form_rez.Label6.Caption+', на отрезке : ['+ms[5]+', '+ms[6]+']';

end;

//---------------тело программы------------------------------------------------

begin

     if (enter_data=true) then begin

            print_function;

            h := 0.1;

            T;

            I_left:= 0; I_right:= 0; I_central:= 0;

            for i:= 1 to n do begin

                I_left:= I_left+F(mr[5]+(i-1)*h)*h;

                I_right:= I_right+F(mr[5]+i*h)*h;

                I_central:= I_central+F(mr[5]+(i-0.5)*h)*h;

            end;

            Form_rez.left.Caption := FloattoStr(RoundTo(I_left, -3));

            Form_rez.right.Caption := FloattoStr(RoundTo(I_right, -3));

            Form_rez.Central.Caption := FloattoStr(RoundTo(I_central, -3));

            Form_rez.eps.Caption := FloattoStr(abs(RoundTo((I_central-I_right), 3)));

            Form5.Visible:=false;

            Form_rez.Visible:=true;

     end;

end;

 

procedure TForm5.Button1Click(Sender: TObject);

begin

     Form1.Visible := true;

     Form5.Visible := false;

end;

 

procedure TForm5.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

     Form1.Visible := true;

     Form5.Visible := false;

end;

 

end.


 

unit Unit6;

 

interface

 

uses

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

  Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls;

 

type

  TForm_Close = class(TForm)

    Image1: TImage;

    Label1: TLabel;

    BitBtn1: TBitBtn;

    BitBtn2: TBitBtn;

    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    procedure BitBtn1Click(Sender: TObject);

    procedure BitBtn2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form_Close: TForm_Close;

 

implementation

 

uses Unit1;

 

{$R *.dfm}

 

procedure TForm_Close.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

  Form_Close.Visible:=false;

  Form1.Enabled:=true;

end;

 

procedure TForm_Close.BitBtn1Click(Sender: TObject);

begin

  halt;

end;

 

procedure TForm_Close.BitBtn2Click(Sender: TObject);

begin

  Form_Close.Visible:=false;

  Form1.Enabled:=true;

end;

 

end.


 

unit Unit7;

 

interface

 

uses

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

  Dialogs, StdCtrls, jpeg, ExtCtrls, Buttons;

 

type

  TForm_Task = class(TForm)

    Image1: TImage;

    Memo1: TMemo;

    BitBtn1: TBitBtn;

    procedure BitBtn1Click(Sender: TObject);

    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form_Task: TForm_Task;

 

implementation

 

uses Unit1;

 

{$R *.dfm}

 

procedure TForm_Task.BitBtn1Click(Sender: TObject);

begin

  Form_Task.Visible:=false;

  Form1.Enabled:=true;

end;

 

procedure TForm_Task.FormCloseQuery(Sender: TObject;

  var CanClose: Boolean);

begin

  Form_Task.Visible:=false;

  Form1.Enabled:=true;

end;

 

end.


 

unit Unit8;

 

interface

 

uses

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

  Dialogs, StdCtrls, jpeg, ExtCtrls;

 

type

  TForm_rez = class(TForm)

    Image1: TImage;

    GroupBox2: TGroupBox;

    Label3: TLabel;

    Right: TLabel;

    Left: TLabel;

    Label5: TLabel;

    Central: TLabel;

    Label4: TLabel;

    Button1: TButton;

    Label1: TLabel;

    Label6: TLabel;

    Label10: TLabel;

    eps: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form_rez: TForm_rez;

 

implementation

 

uses Unit1, Unit2;

 

{$R *.dfm}

 

procedure TForm_rez.Button1Click(Sender: TObject);

begin

  Form_rez.Visible:=false;

  Form1.Visible:=true;

end;

 

procedure TForm_rez.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

  Form_rez.Visible:=false;

  Form1.Visible:=true;

end;

 

end.


 

unit Unit9;

 

interface

 

uses

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

  Dialogs, StdCtrls, jpeg, ExtCtrls, Math;

 

type

  TForm9 = class(TForm)

    Image1: TImage;

    Button1: TButton;

    Pysk: TButton;

    GroupBox1: TGroupBox;

    Label11: TLabel;

    Label9: TLabel;

    Label8: TLabel;

    Label7: TLabel;

    Label6: TLabel;

    Label2: TLabel;

    Label12: TLabel;

    Label1: TLabel;

    st: TEdit;

    fin: TEdit;

    d: TEdit;

    c: TEdit;

    b: TEdit;

    a: TEdit;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    e: TEdit;

    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    procedure Button1Click(Sender: TObject);

    procedure PyskClick(Sender: TObject);

    procedure aKeyPress(Sender: TObject; var Key: Char);

    procedure bKeyPress(Sender: TObject; var Key: Char);

    procedure cKeyPress(Sender: TObject; var Key: Char);

    procedure dKeyPress(Sender: TObject; var Key: Char);

    procedure eKeyPress(Sender: TObject; var Key: Char);

    procedure stKeyPress(Sender: TObject; var Key: Char);

    procedure finKeyPress(Sender: TObject; var Key: Char);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form9: TForm9;

 

implementation

 

uses Unit1, Unit8, Unit4;

 

{$R *.dfm}

 

procedure TForm9.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

  Form9.Visible:=false;

  Form1.Visible:=true;

end;

 

procedure TForm9.Button1Click(Sender: TObject);

begin

  Form9.Visible:=false;

  Form1.Visible:=true;

end;

 

procedure TForm9.PyskClick(Sender: TObject);

var

   h: real;

   I_left, I_right, I_central : real;

   i, n : longint;

   ms:array[1..7] of string;

   mr:array[1..7] of real;

//----------------ввод данных---------------------------------------------------

function enter_data():boolean;

label m1;

var

   i, index:integer;

   flag:boolean;

   s:string;

begin

     ms[1]:=a.Text;ms[2]:=b.Text;ms[3]:=c.Text; ms[4]:=d.Text; ms[5]:=e.Text; ms[6]:=st.Text; ms[7]:=fin.Text;

     for i:=1 to 7 do

        if ms[i]='' then begin

            enter_data:=false;

            ShowMessage('Одно или несколько полей  незаполнено .');

            Goto m1;

        end;

     flag:=true;

     for i:=1 to 7 do begin

         s:=ms[i];

         index:=pos(',', s);

         delete(s, Pos(',', s), 1);

         if(index<>0)and(Pos(',', s)<>0)then begin

            enter_data:=false;

            ShowMessage('Введены неправильные данные !');

            goto m1;

         end;

         s:=ms[i];

         index:=pos('-',s);   //минус

         if(index<>0)and(index<>1)then begin

            enter_data:=false;

            ShowMessage('Введены неправильные данные !');

            goto m1;

         end;

     end;

     Try

        for i:=1 to 7 do begin

            mr[i]:=RoundTo(StrToFloat(ms[i]), -3);

            ms[i]:=FloatToStr(mr[i]);

        end;

     Except

        enter_data:=false;

        ShowMessage('Вы ввели неправильные(не числовые) данные ');

        flag:=false;

     end;

     if(flag=false)then goto m1;

     if (mr[7] < mr[6]) then begin

         enter_data:=false;

         ShowMessage('Конец отрезка должен быть больше, чем начало !');

         goto m1;

     end;

     if (mr[7] > 1000) then begin

         enter_data:=false;

         ShowMessage('Конец  отрезка должен быть меньше 1000 !');

         goto m1;

     end;

     for i:=1 to 5 do

        if(mr[i]<0)then ms[i]:='('+ms[i]+')';              

     enter_data:=true;

m1:end;

//----------------x^k----------------------------------------------------------

function Step(x : real; k : integer):real;

var

   i : integer;

   p : real;

begin

    p := 1;

    if k<>0 then

       for i := 1 to k do

          p := p*x

    else p:=1;

    Step := p;

end;

//----------------вычисляем значение ф-ии  в точке------------------------------

function F(x : real):real;

var

   s:real;

   i:integer;

begin

     s:=0;

     for i:=1 to 5 do begin

         if(mr[i]<>0)then begin

             s:=s+mr[i]*Step(x, 5-i);

         end;

     end;

     F := s;

end;

//----------------вычисляем шаг и количество  разбиений отрезка-----------------

Procedure T;

begin

     h := 0.01;

     n := Trunc((mr[7]-mr[6])/h);

end;

//----------------Вывод в форму результатов------------------------------------

procedure print_function();

var

   s:string;

   i:integer;

begin

    s:='';

    for i:=1 to 5 do begin

       if(mr[i]<>0)then begin

           if(mr[i]=1)and(i<>4)and(i<>5)then s:=s+'x^'+IntToStr(5-i)+'+'

           else if(i<>4)and(i<>5)then s:=s+ms[i]+'*x^'+IntToStr(5-i)+'+';

           if(i=4)then s:=s+ms[i]+'x+';

           if(i=5)then s:=s+FloatToStr(mr[i]);

        end;

    end;

    if(Length(s)=0)then s:='0';

    if (s[1]='+')then delete(s, 1, 1);

    if (s[length(s)]='+')then delete(s, length(s), 1);

    Form_rez.Label6.Caption:=s;

    Form_rez.Label6.Caption:=Form_rez.Label6.Caption+', на отрезке : ['+ms[6]+', '+ms[7]+']';

end;

//---------------тело программы------------------------------------------------

begin

     if (enter_data=true) then begin

        print_function;

        h := 0.01;

        T;

        I_left:= 0; I_right:= 0; I_central:= 0;

        for i:= 1 to n do begin

            I_left:= I_left+F(mr[6]+(i-1)*h)*h;

            I_right:= I_right+F(mr[6]+i*h)*h;

            I_central:= I_central+F(mr[6]+(i-0.5)*h)*h;

        end;

        Form_rez.left.Caption := FloattoStr(RoundTo(I_left, -3));

        Form_rez.right.Caption := FloattoStr(RoundTo(I_right, -3));

        Form_rez.Central.Caption := FloattoStr(RoundTo(I_central, -3));

        Form_rez.eps.Caption := FloattoStr(abs(RoundTo(I_central-(I_right+I_left)/2, -5)));

        Form9.visible:=false;

        Form_rez.Visible:=true;

     end;

end;

 

 

procedure TForm9.aKeyPress(Sender: TObject; var Key: Char);

begin

    with Sender as TEdit do begin

       case Key of

           '0': if Text='0' then begin Key:=#0; beep; end;

           '1'..'9': ;

           ',': ;

            #8: ;

            '-': ;

            else begin Key:=#0; beep; end;

       end;

    end;

end;

 

procedure TForm9.bKeyPress(Sender: TObject; var Key: Char);

begin

    with Sender as TEdit do begin

       case Key of

           '0': if Text='0' then begin Key:=#0; beep; end;

           '1'..'9': ;

           ',': ;

            #8: ;

            '-': ;

            else begin Key:=#0; beep; end;

       end;

    end;

end;

 

procedure TForm9.cKeyPress(Sender: TObject; var Key: Char);

begin

    with Sender as TEdit do begin

       case Key of

           '0': if Text='0' then begin Key:=#0; beep; end;

           '1'..'9': ;

           ',': ;

            #8: ;

            '-': ;

            else begin Key:=#0; beep; end;

       end;

    end;

end;

 

procedure TForm9.dKeyPress(Sender: TObject; var Key: Char);

begin

    with Sender as TEdit do begin

       case Key of

           '0': if Text='0' then begin Key:=#0; beep; end;

           '1'..'9': ;

           ',': ;

            #8: ;

            '-': ;

            else begin Key:=#0; beep; end;

       end;

    end;

end;

 

procedure TForm9.eKeyPress(Sender: TObject; var Key: Char);

begin

    with Sender as TEdit do begin

       case Key of

           '0': if Text='0' then begin Key:=#0; beep; end;

           '1'..'9': ;

           ',': ;

            #8: ;

            '-': ;

            else begin Key:=#0; beep; end;

       end;

    end;

end;

 

procedure TForm9.stKeyPress(Sender: TObject; var Key: Char);

begin

    with Sender as TEdit do begin

       case Key of

           '0': if Text='0' then begin Key:=#0; beep; end;

           '1'..'9': ;

           ',': ;

            #8: ;

            '-': ;

            else begin Key:=#0; beep; end;

       end;

    end;

end;

 

procedure TForm9.finKeyPress(Sender: TObject; var Key: Char);

begin

    with Sender as TEdit do begin

       case Key of

           '0': if Text='0' then begin Key:=#0; beep; end;

           '1'..'9': ;

           ',': ;

            #8: ;

            '-': ;

            else begin Key:=#0; beep; end;

       end;

    end;

end;

 

end.


 

unit Unit10;

 

interface

 

uses

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

  Dialogs, StdCtrls, jpeg, ExtCtrls, Math;

 

type

  TForm10 = class(TForm)

    Image1: TImage;

    GroupBox1: TGroupBox;

    Label11: TLabel;

    Label9: TLabel;

    Label8: TLabel;

    Label7: TLabel;

    Label6: TLabel;

    Label2: TLabel;

    Label1: TLabel;

    st: TEdit;

    fin: TEdit;

    c: TEdit;

    b: TEdit;

    a: TEdit;

    Pysk: TButton;

    Button1: TButton;

    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    procedure Button1Click(Sender: TObject);

    procedure PyskClick(Sender: TObject);

    procedure aKeyPress(Sender: TObject; var Key: Char);

    procedure bKeyPress(Sender: TObject; var Key: Char);

    procedure cKeyPress(Sender: TObject; var Key: Char);

    procedure stKeyPress(Sender: TObject; var Key: Char);

    procedure finKeyPress(Sender: TObject; var Key: Char);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form10: TForm10;

 

implementation

 

uses Unit1, Unit8, Unit9;

 

{$R *.dfm}

 

procedure TForm10.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

  Form10.Visible:=false;

  Form1.Visible:=true;

end;

 

procedure TForm10.Button1Click(Sender: TObject);

begin

  Form10.Visible:=false;

  Form1.Visible:=true;

end;

 

procedure TForm10.PyskClick(Sender: TObject);

var

   h : real;

   I_left, I_right, I_central : real;

   i, n : longint;

   ms:array[1..5] of string;

   mr:array[1..5] of real;

//----------------x^k----------------------------------------------------------

Информация о работе Програма обчислення визначених інтегралів по квадратурним формулам