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

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

begin

  Form_Close.Show;

  CanClose:=false;

  Form1.Enabled:=false;

end;

 

end.

unit Unit2;

 

interface

 

uses

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

  Dialogs, StdCtrls, ExtCtrls, jpeg, ComCtrls, Math;

 

type

  TForm2 = class(TForm)

    Label1: TLabel;

    Label2: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Label8: TLabel;

    Pysk: TButton;

    c: TEdit;

    st: TEdit;

    fin: TEdit;

    Image1: TImage;

    GroupBox1: TGroupBox;

    Button1: TButton;

    procedure PyskClick(Sender: TObject);

    procedure Button1Click(Sender: TObject);

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

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

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

    procedure Show_GraphClick(Sender: TObject);

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

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form2: TForm2;

  flag:boolean;

implementation

 

uses Unit1, Unit8, DateUtils;

 

{$R *.dfm}

 

procedure TForm2.PyskClick(Sender: TObject);

var

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

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

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

function enter_data():boolean;

label m1;

var

   i, index:integer;

   flag:boolean;

   s:string;

begin

     ms[1]:=c.Text; ms[2]:=st.Text; ms[3]:=fin.Text;

     for i:=1 to 3 do

        if ms[i]='' then begin

            enter_data:=false;

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

            Goto m1;

        end;

     flag:=true;

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

     //проверить чтобы подкоренное выражение было > 0

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

         enter_data:=false;

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

         goto m1;

     end;

     enter_data:=true;

m1:end;

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

begin

     if (enter_data=true) then begin

       Label6.Caption := ms[1];

       Form_rez.Label6.Caption:= ms[1];

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

       Form_rez.eps.Caption:='0';

       Form_rez.Left.Caption := FloattoStr((mr[3] - mr[2])*mr[1]);

       Form_rez.Right.Caption := FloattoStr((mr[3] - mr[2])*mr[1]);

       Form_rez.Central.Caption := FloattoStr((mr[3] - mr[2])*mr[1]);

       Form_rez.Visible:=true;

       Form2.Visible:=false;

     end;

end;

 

procedure TForm2.Button1Click(Sender: TObject);

begin

     Form1.Visible := true;

     Form2.Visible := false;

end;

 

procedure TForm2.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 TForm2.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 TForm2.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 TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

     Form1.Visible := true;

     Form2.Visible := false;

end;

 

end.


unit Unit1;

 

interface

 

uses

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

  Dialogs, StdCtrls, ExtCtrls, xpman, jpeg, Menus;

 

type

  TForm1 = class(TForm)

    RadioButton1: TRadioButton;

    RadioButton2: TRadioButton;

    RadioButton3: TRadioButton;

    RadioButton4: TRadioButton;

    RadioButton5: TRadioButton;

    RadioButton7: TRadioButton;

    RadioButton8: TRadioButton;

    Button1: TButton;

    GroupBox1: TGroupBox;

    Image1: TImage;

    Label2: TLabel;

    MainMenu1: TMainMenu;

    N1: TMenuItem;

    N2: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    Label1: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure N3Click(Sender: TObject);

    procedure N2Click(Sender: TObject);

    procedure N4Click(Sender: TObject);

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

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

uses Unit2, Unit3, Unit4, Unit5, Unit6, Unit7, Unit9, Unit10, Unit11,

  Unit12;

 

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

begin

     Form1.Visible := False;

     if RadioButton1.Checked = true then Form2.Visible := True

     else begin

       if RadioButton2.Checked = true then Form3.Visible := True

       else begin

         if RadioButton3.Checked = true then Form4.Visible := True

         else begin

           if RadioButton4.Checked = true then Form5.Visible := True

           else begin

           if RadioButton5.Checked = true then Form9.Visible := True

             else begin

               if RadioButton7.Checked = true then Form10.Visible := True

               else begin

                 if RadioButton8.Checked = true then Form12.Visible := True

                 else begin

                   Beep;

                   Form1.Visible := True;

                   MessageDlg('Выберите вариант функции !!',mtError,[mbOK],0);

                 end;

               end;

             end;

           end;

         end;

       end;

     end;

     RadioButton1.Checked:=false;

     RadioButton2.Checked:=false;

     RadioButton3.Checked:=false;

     RadioButton4.Checked:=false;

     RadioButton5.Checked:=false;

     RadioButton7.Checked:=false;

     RadioButton8.Checked:=false;

end;

procedure TForm1.N3Click(Sender: TObject);

begin

  Form1.Enabled:=false;

  Form_Close.Visible:=true;

end;

 

procedure TForm1.N2Click(Sender: TObject);

begin

  Form_Task.Caption:=' Задача ';

  Form_Task.Memo1.Clear;

  Form_Task.Memo1.Lines.Add('   Выполнила студентка факультета прикладной математики НТУУ КПИ Щербаченко Лариса');

  Form_Task.Memo1.Lines.Add('   Задача :');

  Form_Task.Memo1.Lines.Add('Вычисление определённых интегралов по формуле прямоугольников.');

  Form_Task.Visible:=true;

  Form1.Enabled:=false;

end;

 

procedure TForm1.N4Click(Sender: TObject);

begin

  Form_About_Program.Visible:=true;

  Form1.Enabled:=false;

end;

 

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

begin

  Form_Close.Show;

  CanClose:=false;

  Form1.Enabled:=false;

end;

 

end.


 

unit Unit2;

 

interface

 

uses

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

  Dialogs, StdCtrls, ExtCtrls, jpeg, ComCtrls, Math;

 

type

  TForm2 = class(TForm)

    Label1: TLabel;

    Label2: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Label8: TLabel;

    Pysk: TButton;

    c: TEdit;

    st: TEdit;

    fin: TEdit;

    Image1: TImage;

    GroupBox1: TGroupBox;

    Button1: TButton;

    procedure PyskClick(Sender: TObject);

    procedure Button1Click(Sender: TObject);

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

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

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

    procedure Show_GraphClick(Sender: TObject);

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

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form2: TForm2;

  flag:boolean;

implementation

 

uses Unit1, Unit8, DateUtils;

 

{$R *.dfm}

 

procedure TForm2.PyskClick(Sender: TObject);

var

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

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

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

function enter_data():boolean;

label m1;

var

   i, index:integer;

   flag:boolean;

   s:string;

begin

     ms[1]:=c.Text; ms[2]:=st.Text; ms[3]:=fin.Text;

     for i:=1 to 3 do

        if ms[i]='' then begin

            enter_data:=false;

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

            Goto m1;

        end;

     flag:=true;

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

     //проверить чтобы подкоренное выражение было > 0

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

         enter_data:=false;

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

         goto m1;

     end;

     enter_data:=true;

m1:end;

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

begin

     if (enter_data=true) then begin

       Label6.Caption := ms[1];

       Form_rez.Label6.Caption:= ms[1];

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

       Form_rez.eps.Caption:='0';

       Form_rez.Left.Caption := FloattoStr((mr[3] - mr[2])*mr[1]);

       Form_rez.Right.Caption := FloattoStr((mr[3] - mr[2])*mr[1]);

       Form_rez.Central.Caption := FloattoStr((mr[3] - mr[2])*mr[1]);

       Form_rez.Visible:=true;

       Form2.Visible:=false;

     end;

end;

 

procedure TForm2.Button1Click(Sender: TObject);

begin

     Form1.Visible := true;

     Form2.Visible := false;

end;

 

procedure TForm2.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 TForm2.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 TForm2.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 Unit3;

 

interface

 

uses

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

  Dialogs, StdCtrls, jpeg, ExtCtrls, Math;

 

type

  TForm3 = class(TForm)

    Label1: TLabel;

    Label2: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Label8: TLabel;

    Label9: TLabel;

    a: TEdit;

    b: TEdit;

    st: TEdit;

    fin: TEdit;

    Button2: TButton;

    Button3: TButton;

    Image1: TImage;

    GroupBox1: TGroupBox;

    procedure PyskClick(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    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 FormCloseQuery(Sender: TObject; var CanClose: Boolean);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form3: TForm3;

 

implementation

 

uses Unit1, Unit8;

 

{$R *.dfm}

 

procedure TForm3.PyskClick(Sender: TObject);

var

   fst, ffin, h, feps, m : real;

   I_left, I_right, I_central : real;

   i, n : longint;

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

function F(x : real):real;

begin

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

end;

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

Procedure T;

var

   p : real;

begin

     m := -10000; p := fst;

     While(p <= ffin) do begin

          if F(p) > m  then m := F(p);

          p := p + 0.01;

     end;

     if F(ffin) > m then m := F(ffin);

     feps := m*h*h*(ffin-fst)/24;

     Form_rez.eps.Caption := FloattoStr(feps);

     n := Trunc((ffin-fst)/h) + 1;

end;

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

begin

     Label6.Caption := a.Text+'*ln('+b.Text+'*x)';

     fst := StrtoFloat(st.Text); ffin := StrtoFloat(fin.Text);

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

        I_right:= I_right+F(fst+i*h)*h;

        I_central:= I_central+F(fst+(i-0.5)*h)*h;

     end;

     Form_rez.left.Caption := FloattoStr(I_left);

     Form_rez.right.Caption := FloattoStr(I_right);

     Form_rez.Central.Caption := FloattoStr(I_central);

end;

 

procedure TForm3.Button1Click(Sender: TObject);

begin

     Form1.Visible := true;

     Form3.Visible := false;

end;

 

procedure TForm3.Button2Click(Sender: TObject);

var

   h : 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;

   q:real;

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

            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;

     q:=mr[3];                              

     while(q<mr[4]) do begin

          if(mr[2]*q<=0)or(mr[3]=0)or (mr[2]=0)then begin

               enter_data:=false;

               ShowMessage('Подлогарифмическое выражение  должно быть больше нуля !');

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