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

Автор работы: Пользователь скрыл имя, 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 Мб (Скачать файл)

               goto m1;

          end;

          q:=q+0.5;

     end;

     if (mr[4] < mr[3]) then begin

         enter_data:=false;

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

         goto m1;

     end;

     if(mr[2]*mr[4]>1000000)then begin

            enter_data:=false;

            ShowMessage(' Введены слишком большие  данные. ');

            goto m1;

     end;

     enter_data:=true;

m1:end;

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

function F(x : real):real;

begin

     F := StrtoFloat(a.Text)*ln(StrtoFloat(b.Text)*x);

end;

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

Procedure T;

begin

     h := 0.01;

     n := Trunc((mr[4]-mr[3])/h);

end;

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

procedure print_function();

begin

     if(mr[1]=0)then Form_rez.Label6.Caption := '0'

     else begin

         if(mr[1]=1)and(mr[2]=1)then Form_rez.Label6.Caption:='ln(x)'

         else begin

             if(mr[1]=1)then Form_rez.Label6.Caption:='ln('+ms[2]+'*x)'

             else begin

                 if(mr[2]=1)then Form_rez.Label6.Caption := ms[1]+'*ln(x)'

                 else Form_rez.Label6.Caption := ms[1]+'*ln('+ms[2]+'*x)';

             end;

         end;

     end;

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

end;

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

begin

     if (enter_data=true) then begin

       print_function;

       T;

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

       for i:= 1 to n do begin

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

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

          I_central:= I_central+F(mr[3]+(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((2*I_central-I_right-I_left), -5)));

       Form_rez.Visible:=true;

       Form3.Visible:=false;

     end;

end;

 

procedure TForm3.Button3Click(Sender: TObject);

begin

     Form1.Visible := true;

     Form3.Visible := false;

end;

 

procedure TForm3.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 TForm3.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 TForm3.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 TForm3.finKeyPress(Sender: TObject; var Key: Char);

begin

    with Sender as TEdit do begin

       case Key of

           '0': ;

           '1'..'9': ;

           ',': ;

            #8: ;

            '-': ;

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

       end;

    end;

end;

 

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

begin

  Form3.Visible:=false;

  Form1.Visible:=true;

end;

 

end.


 

unit Unit4;

 

interface

 

uses

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

  Dialogs, StdCtrls, jpeg, ExtCtrls, Math;

 

type

  TForm4 = class(TForm)

    Label1: TLabel;

    Label2: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Label8: TLabel;

    Label9: TLabel;

    a: TEdit;

    Pysk: TButton;

    st: TEdit;

    fin: TEdit;

    Button1: TButton;

    b: TEdit;

    Image1: TImage;

    GroupBox1: TGroupBox;

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

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

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

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

    procedure PyskClick(Sender: TObject);

    procedure Button1Click(Sender: TObject);

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

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form4: TForm4;

 

implementation

 

uses Unit1, Unit8;

 

{$R *.dfm}

 

procedure TForm4.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 TForm4.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': ;

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

            #8: ;

            '-': ;

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

       end;

    end;

end;

 

procedure TForm4.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 TForm4.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;

 

procedure TForm4.PyskClick(Sender: TObject);

var

   h, feps : real;

   I_left, I_right, I_central : real;

   i, n : longint;

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

   mr:array[1..4] 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]:=st.Text; ms[4]:=fin.Text;

     for i:=1 to 4 do

        if ms[i]='' then begin

            enter_data:=false;

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

            Goto m1;

        end;

     flag:=true;

     for i:=1 to 4 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 4 do begin

            if(i<>2) then mr[i]:=RoundTo(StrToFloat(ms[i]), -3)

            else mr[i]:=Trunc(StrToFloat(ms[i]));

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

        end;

     Except

        enter_data:=false;

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

        flag:=false;

     end;

     if(flag=false)then goto m1;

     if (mr[4] < mr[3]) then begin

         enter_data:=false;

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

         goto m1;

     end;

     if (mr[2] < 0) then begin

         enter_data:=false;

         ShowMessage(' b должно быть больше 0 ! ');

         goto m1;

     end;

     if(mr[2]>5)then begin

         enter_data:=false;

         ShowMessage(' b должно быть менше 6 ! ');

         goto m1;

     end;

     if(mr[1]>10000)or(mr[4]>10000)or(mr[1]<-10000)or(mr[4]<-10000)then begin

            enter_data:=false;

            ShowMessage(' Данные не принадлежат  отрезку [-10000, 10000].');

            goto m1;

     end;

     for i:=1 to 2 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;

    for i := 1 to k do

       p := p*x;

    Step := p;

end;

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

function F(x : real):real;

begin

     F := mr[1]*Step(x,StrToInt(ms[1]));

end;

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

Procedure T;

var

   i:integer;

   I1, I2 : real;

begin

     h := 0.01; I1:=0;I2:=0;

     n := Trunc((mr[4]-mr[3])/h);

     for i:= 1 to n do begin

        I1:= I1+F(mr[3]+(i-0.5)*h)*h;

     end;

     h := h/2;

     n := Trunc((mr[4]-mr[3])/h);

     for i:= 1 to n do begin

        I2:= I2+F(mr[3]+(i-0.5)*h)*h;

     end;

     feps := abs(I2-I1);

     Form_rez.eps.Caption := FloattoStr(RoundTo(feps, -5));

end;

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

procedure print_function();

begin

    if(mr[1]=0)then Form_rez.Label6.Caption := '0'

    else begin

        if(mr[2]=0)then Form_rez.Label6.Caption := ms[1]

        else begin

            if(mr[1]=1)and(mr[2]=1)then Form_rez.Label6.Caption := 'x'

            else begin

                if(mr[1]=1)then Form_rez.Label6.Caption := 'x^'+ms[2]

                else begin

                    if(mr[2]=1)then Form_rez.Label6.Caption := ms[1]+'*x'

                    else Form_rez.Label6.Caption := ms[1]+'*x^'+ms[2];

                end;

            end;

        end;

    end;

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

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[3]+(i-1)*h)*h;

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

            I_central:= I_central+F(mr[3]+(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));

        Form4.visible:=false;

        Form_rez.Visible:=true;

     end;

end;

 

procedure TForm4.Button1Click(Sender: TObject);

begin

     Form1.Visible := true;

     Form4.Visible := false;

end;

 

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

begin

     Form1.Visible := true;

     Form4.Visible := false;

end;

 

end.


 

unit Unit5;

 

interface

 

uses

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

  Dialogs, StdCtrls, jpeg, ExtCtrls, Math;

 

type

  TForm5 = class(TForm)

    Label1: TLabel;

    Label2: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Label8: TLabel;

    Label9: TLabel;

    Label11: TLabel;

    Label12: TLabel;

    a: TEdit;

    st: TEdit;

    fin: TEdit;

    Button1: TButton;

    b: TEdit;

    c: TEdit;

    d: TEdit;

    Pysk: TButton;

    Image1: TImage;

    GroupBox1: TGroupBox;

    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 fKeyPress(Sender: TObject; var Key: Char);

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

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

    procedure PyskClick(Sender: TObject);

    procedure Button1Click(Sender: TObject);

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

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form5: TForm5;

 

implementation

 

uses Unit1, Unit8;

 

{$R *.dfm}

 

procedure TForm5.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 TForm5.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 TForm5.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 TForm5.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 TForm5.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 TForm5.fKeyPress(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 TForm5.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 TForm5.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;

 

procedure TForm5.PyskClick(Sender: TObject);

var

   h : real;

   I_left, I_right, I_central : real;

   i, n : longint;

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

   mr:array[1..6] 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]:=st.Text; ms[6]:=fin.Text;

     for i:=1 to 6 do

        if ms[i]='' then begin

            enter_data:=false;

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

            Goto m1;

        end;

     flag:=true;

     for i:=1 to 6 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;

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