Программа вычисления значения и вывода графика определенного интеграла
Вычисление определенных интегралов методом Симпсона. Функциональная схема программного комплекса. Реализация функции разбора произвольно заданных математических функций. Методика сохранения графика в графический файл. Интерфейс программного комплекса.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 15.06.2009 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
mmHelp
Пункт меню для вызова помощь
onClick
mmAbout
Пункт меню для вывода окна информации о разработчике
onClick
Вызов формы FormAbout с информацией о разработчике
Файл формы - evalForm.pas
Имя формы - EvalForm
Заголовок - Произвольная функция
Описание - форма предназначена для ввода произвольной пользовательской функции, отображении/скрытия ее графика.
В таблице 2 представлен перечень компонентов содержащихся на форме.
Таблица 2 - Описание формы ввода произвольной функции
Имя компонента в модуле |
Назначение компонента |
События компонента |
Назначение обработчиков событий |
Примечания |
|
edEval |
Поле для ввода произвольной функции |
- |
- |
- |
|
cbEval |
CheckBox для отображения/скрытия графика произвольной функции |
- |
- |
- |
|
btnOk |
Функция принятия изменений в произвольной функции |
onClick |
Выполняется проверка введенной функции, если функция соответствует правилам, то происходит изменение произвольной функции, иначе выводится сообщение |
ShowMessage('Ошибка в формуле'); |
Файл формы - SysInfo.pas
Имя формы - SystemInfoForm
Заголовок - Информация о системе
Описание - форма предназначена для вывода информации о текущей системе
Таблица 3 - Описание формы информации о системе
Имя компонента в модуле |
Назначение компонента |
События компонента |
Назначение обработчиков событий |
|
SystemInfoForm |
Форма для отображения информации о системе |
onCreate |
Вызывается функция GetSystemInfo и результат заносится в поля формы |
|
leProcessorType, leProcessorArchitecture, leProcessorLevel, leAllocationGranularity, lePageSize, leMinimumApplicationAddress, leMaximumApplicationAddress, leActicveProcessorMask, leNumberOfProcessor |
Компоненты для отображения информации о системе |
Файл формы - About.pas
Имя формы - AboutForm
Заголовок - О программе
Описание - форма предназначена для вывода информации о разработчике
Таблица 4 - Описание формы информации о разработчике
Имя компонента в модуле |
Назначение компонента |
События компонента |
Назначение обработчиков событий |
Примечания |
|
meAabout |
Поле для вывода информации о разработчике |
- |
- |
- |
|
btnOk |
Кнопка закрытия формы |
onClick |
Закрытие формы |
3.3 Описание компонентов: GroupBox, SavePictureDialog
1. Компонент TGroupBox
Модуль - StdCtrls
Описание:
TGroupBox используется для оформления внешнего вида приложения и для группировки установленных в форму компонентов по смыслу. Все компоненты в форме можно разделить по функциональным назначениям и разместить в таких компонентах. Удобен при назначении порядка перехода по компонентам с помощью кнопки Tab. Заголовок этого компонента изменяется свойством Caption.
Приведем иерархию классов для компонента TGroupBox
TObject -> TPersistent -> TComponent -> TWinControl -> TCustomControl -> TCustomGroupBox -> TGroupBox
Основные свойства, методы и события для этого компонента приведены в таблицах 5,6 и 7.
Таблица 5 - Основные свойства компонента ТGroupBox
Наименование |
Описание |
|
property Components[Index: Integer]: TComponent; |
Список всех компонентов, для которых данный компонент является владельцем. |
|
property Brush: TBrush; |
Определяет цвет и шаблон для отрисовки фона копмонента. |
|
property ClientOrigin: TPoint; |
Возвращает координаты экрана в пикселях левого верхненго угла клиентской области компонента. |
|
property TabOrder: TTabOrder; |
Отображает номер в последовательности при переходе по компонента с помощью |
|
property Controls[Index: Integer]: TControl; |
Список всех дочерних компонентов |
Таблица 6 - Основные методы компонента ТGroupBox
Наименование |
Описание |
|
procedure Broadcast(var Message); |
Посылает сообщение каждому из дочерних компонентов |
|
function CanFocus: Boolean; dynamic; |
Возвращает значение, может ли компонент принимать фокус. |
|
Procedure InsertControl(AControl: TControl); |
Добавляет компонент в список дочерних компонентов данного |
|
function FindChildControl(const ControlName: string): TControl; |
Возвращает указатель на дочерний компонент по его имени. |
|
procedure SetFocus; virtual; |
Устанавливает фокус на компонент |
Таблица 7 - Основные события компонента ТGroupBox
Наименование |
Описание |
|
property OnEnter: TNotifyEvent; |
Событие вызывается когда компонент получает фокус |
|
property OnExit: TNotifyEvent; |
Событие вызывается когда компонент теряет фокус |
|
property OnClick: TNotifyEvent; |
Событие вызывается когда происходит клик на компоненте |
|
property OnDblClick: TNotifyEvent; |
Событие вызывается при двойном нажатии левой кнопки мыши на компоненте |
|
property OnMouseDown: TMouseEvent; |
Событие вызывается когда происходит нажатие кнопки мыши при установленном на компоненте указателе мыши |
2. Компонент TSavePictureDialog
Модуль - ExtDlgs
Описание:
Компонент TSavePictureDialog отображает модальное диалоговое окно для выбора имени и сохранения графических файл. Этот компонент похож на компонент TSaveDialog, за исключением того, что он включает в себя квадратное окно предварительного просмотра. Если выбранная картинка может отображаться с использованием компонента TPicture, то она отображается в области предварительного просмотра; поддерживаемые типы файлов включают в себя точечные рисунки Windows (.BMP), иконки (.ICO), Windows метафайлы (.WMF), и расширенный метафайл Windows (.EMF). Если выбранный файл не может быть отображен, в области предварительного просмотра появляестя надпись “(None)”.
Иерархия компонента:
TObject -> TPersistent -> TComponent -> TCommonDialog -> TOpenDialog -> TOpenPictureDialog -> TSavePictureDialog
Пример использования данного компонента в программе приведен на рисунке 17.
procedure TMainForm.mmSaveClick(Sender: TObject);
begin
if SavePictureDialog.Execute then Charter.SaveToFile(SavePictureDialog.FileName);
end;
Основные свойства, методы и события для этого компонента приведены в таблицах 8,9 и 10.
Таблица 8 - Основные свойства компонента ТGroupBox
Наименование |
Описание |
|
property DefaultExt: String; |
Устанавливает расширение файлов используемое по умолчанию |
|
property FileName: TFileName; |
Определяет имя последнего выбранного файла |
|
property Filter: String; |
Определяет маску файлов доступную в текущем диалоге |
|
property Title: String; |
Определяет заголовок текущего диалога |
|
property InitialDir: String; |
Определяет текущую директорию при открытии диалога |
Таблица 9 - Основные методы компонента ТGroupBox
Наименование |
Описание |
|
function Execute: Boolean; override; |
Открывает диалоговое окно |
|
function GetStaticRect: TRect; virtual; |
Определяет координаты зарезервированной области диалогового окна |
Таблица 10 - Основные события компонента ТGroupBox
Наименование |
Описание |
|
property OnCanClose: TCloseQueryEvent; |
Происходит когда пользователь пытается закрыть диалоговое окно |
|
property OnFolderChange: TNotifyEvent; |
Происходит при смене директории |
|
property OnIncludeItem: TIncludeItemEvent; |
Происходит перед тем, как выбранный файл добавляется в список |
|
property OnTypeChange: TNotifyEvent; |
Происходит когда типы файлов, отображаемых в диалоговом окне изменяются |
4. ТЕСТОВЫЕ ВЫЗОВЫ ПРОГРАММЫ
Ниже приведены примеры тестовых вызовов программы: рисунок 18 - пример отображения графика первого интеграла с переменным верхним пределом, рисунок 19 - примеры расчета первого и второго интеграла с заданными параметрами точности вычислений. На рисунке 20 представлен пример исключительной ситуации, вызванной неверным задание границ интегрирования. На рисунке 21 - пример вызова API-функции GetSystemInfo, отображающей информацию о текущей системе.
Рисунок 18 - Построение графика интеграла
Рисунок 19 - Примеры расчета интегралов
Рисунок 20 - Тестовый вызов исключительной ситуации
Рисунок 21 - Тестовый вызов API-функции GetSystemInfo
Для проверки правильности выполненных расчетов интегралов, представленных на рисунке 19, и отображения графика первого интеграла с переменным верхним пределом приведем пример вычисления интеграла и расчета графика выполненных в программе Mathcad Professional 2000, представленном на рисунке 22.
Рисунок 22 - Решение задачи в Mathcad
Как видно из рисунка, значения интегралов рассчитанных в разрабатываемой программе и в программе Mathcad Professional 2000 практически сходятся, что говорит правильности решения поставленной задачи.
5. ОПИСАНИЕ РАЗРАБОТКИ СПРАВОЧНОЙ СИСТЕМЫ
Для создания справочной системы я использовал программу DotCHM. Эта программа на лету создает справочные системы нескольких стандартов: 16-разрядная справка, 32-разрядная справка, chm-справка и справка для Windows CE. В DotCHM можно создавать полностью рабочий справочный файл, с поиском, обзором и содержанием, за считанные минуты. Все, что требуется это набрать текст справки.
Создав новый проект справочной системы, создаю стандартное содержание. Затем создаю список разбиений справки на пункты, заполняю эти пункты, добавляю нужные изображения, ссылки и т.д. Связываю все разделы с содержанием и компилирую.
Рисунок 23 - Пример вызова справки
ЗАКЛЮЧЕНИЕ
Разработанная программа предоставляет возможности по вычислению интегралов с помощью численных методов с достаточно большой степенью точности, что подтверждается проведением аналогичных расчетов в профессиональной математической программе Mathcad Professional 2000. Кроме того, программа предоставляет возможность ввода произвольных функций, вычисления их интегралов и построения графиков функций. Данная программа может быть использована в учебных целях.
При разработке данной программы были приобретены навыки:
- разработки программ в среде программирования Delphi
- использования методики смешанного программирования
- использования динамической компоновки dll-библиотек
- программной реализации численных методов для вычисления определенных интегралов
- написания 16-ти разрядного Help-а под Windows
ПЕРЕЧЕНЬ ССЫЛОК
1. Турчак Л.И. Основы численных методов: Учеб. пособие. - М.: Наука, Гл. ред. физ. -мат. лит., 2002. - 320 с
2. Стив Т., Ксавье П. Delphi6 руководство разработчика.-М.: Вильямс, 2005г.- 1112с.
3. Дан Эпплман. Win32 API и Visual Basic для профессионалов.-М.: Питер, 2001г.- 1256с.
ПРИЛОЖЕНИЕ А
Листинг dll-библиотеки integrals.dll
library integrals;
uses
SysUtils,
Classes;
{$R *.res}
type
IntegralFunction= function (x: real; var y: real): boolean;
function Simpson(MainFunction: IntegralFunction;a,b:real;n: integer; var Res: real): boolean;
var
s, h, x,y: real;
i: integer;
begin
Result:=true;
try
s:=0;
h:=(b-a)/n;
for i:=0 to n do
begin
x:=a+h*i;
if (i=0) or (i=n) then if MainFunction(x,y) then s:=s+y else Result:=false else
if i mod 2 = 0 then if MainFunction(x,y) then s:=s+2*y else Result:=false else
if MainFunction(x,y) then s:=s+4*y else Result:=false;
end;
except
Simpson:=false;
end;
Res:=s*h/3;
end;
function CountTrap(MainFunction: IntegralFunction; a,b, eps: real; var Res: real): boolean;
function PTrap(MainFunction: IntegralFunction; a,b:real; DivNo: Integer; var Res: real): boolean;
var
x1, x2,y1,y2,y3,dx,sum: real;
i: integer;
begin
PTrap:=true;
try
sum:=0;
dx:=(b-a)/DivNo;
for i:=1 to DivNo-1 do
begin
x1:=a+dx*i;
if MainFunction(x1,y1) then sum:=sum+y1 else Raise EAbort.Create('');
end;
sum:=sum*2;
if MainFunction(a,y1) and MainFunction(b,y2) then
sum:=sum+y1+y2 else Raise EAbort.Create('');
Res:=sum*dx/2;
except
PTrap:=False;
end;
end;
{-----}
var
T: integer;
i1, i2: real;
begin
countTrap:=true;
try
if PTrap(MainFunction,a,b,2,i1) and PTrap(MainFunction,a,b,4,i2) then
begin
T:=4;
while abs(i1-i2)>eps do
begin
if PTrap(MainFunction,a,b,t,i1) and PTrap(MainFunction,a,b,t*2,i2) then t:=t*2
else EAbort.Create('');
T:=T*2;
end;
end else EAbort.Create('');
Res:=(i1+i2)/2;
except
CountTrap:=false;
end;
end;
exports Simpson index 1;
exports CountTrap index 2;
begin
end.
ПРИЛОЖЕНИЕ Б
Листинг dll-библиотеки functions.dll
library functions;
uses
SysUtils,
Classes;
{$R *.res}
function Integral1Function(x: real; var y: real):boolean;
begin
Result:=true;
try
y:=1/sqrt(2+0.5*x*x)
except
result:=false;
end;
end;
function Integral2Function(x: real; var y: real):boolean;
begin
Result:=true;
try
y:=sin(2*x)/sqr(x)
except
result:=false;
end;
exports Integral1Function;
exports Integral2Function;
begin
end.
ПРИЛОЖЕНИЕ В
Листинг модуля chart.pas
unit Chart;
interface
uses Graphics, SysUtils, Classes;
const
BorderTop=10;
BorderBottom=40;
BorderLeft=40;
BorderRight=10;
type
GraphFunction = function(x: real; var y: real): boolean;
TChartFunction = class
private
MainFunction: GraphFunction;
FColor: TColor;
FShow: boolean;
public
constructor Create(f: GraphFunction);
published
property Color: TColor read FColor write FColor;
property Show: boolean read FShow write FShow;
end;
TChart = class
private
functions: TStringList;
ChartBitmap: TBitmap;
MainCanvas: TCanvas;
bgBrush: TBrush;
gridPen: TPen;
AxisPen: TPen;
Width: integer;
Height: integer;
FScale: real;
FStep: real;
FShowGrid: boolean;
xx0, yy0: integer;
nsteps: integer;
x0, y0: integer;
procedure DrawGrid;
procedure DrawFunction(funct: TChartFunction);
procedure DrawFunctions;
procedure PutPixel(x,y: integer; Color: TColor);
procedure OutTextCenter(s: string; x, y: integer);
public
constructor Create(Canvas: TCanvas);
procedure AddFunction(f: TChartFunction; Ident: String);
function DelFunction(s: string): boolean;
procedure ReDraw;
procedure ShiftHor(value: integer);
procedure ShiftVer(value: integer);
procedure Rescale(xvalue, yvalue: integer; Maximize: boolean);
procedure GetXY(x,y: integer; var x1,y1: real);
procedure SaveToFile(filename: string);
published
property ShowGrid: boolean read FShowGrid write FShowGrid;
end;
implementation
{ TChart }
constructor TChart.Create(Canvas: TCanvas);
begin
functions:=TStringList.Create;
MainCanvas:=Canvas;
ChartBitmap:=TBitmap.Create;
bgBrush:=TBrush.Create;
bgBrush.Color:=clWhite;
gridPen:=TPen.Create;
gridPen.Style:=psDot;
AxisPen:=TPen.Create;
AxisPen.Width:=2;
AxisPen.Style:=psInsideFrame;
AxisPen.Color:=clRed;
Width:=MainCanvas.ClipRect.Right-MainCanvas.ClipRect.Left;
Height:=MainCanvas.ClipRect.Bottom-MainCanvas.ClipRect.Top;
ChartBitmap.Width:=Width;
ChartBitmap.Height:=Height;
FShowGrid:=true;
xx0:=40+trunc((width-50)/2);
yy0:=10+trunc((height-50)/2);
x0:=xx0;
y0:=yy0;
NSteps:=20;
FScale:=20;
FStep:=(width/fscale)/nsteps;
ReDraw;
end;
procedure TChart.DrawFunction(funct: TChartFunction);
var
x, y: real;
x1,y1,x2,y2: integer;
a,b: boolean;
f: GraphFunction;
begin
x:=-(x0/FScale);
a:=false;
f:=funct.MainFunction;
while (x0+x*FScale)<(Width-BorderRight) do
begin
if f(x,y) then
begin
x1:=round(x0+x*FScale);
y1:=round(y0-y*FScale);
if (x1>BorderLeft) and (x1<width-BorderRight) and (y1>BorderTop) and (y1<height-BorderBottom) then
begin
PutPixel(x1,y1, funct.Color);
end;
end;
x:=x+0.01;
end;
end;
procedure TChart.OutTextCenter(s: string; x, y: integer);
begin
x:=x-round(MainCanvas.TextWidth(s)/2);
y:=y-round(MainCanvas.TextHeight(s)/2);
MainCanvas.TextOut(x,y,s);
end;
procedure TChart.DrawGrid;
var
x, y: integer;
k: real;
s: string;
begin
With MainCanvas do begin
Brush.Assign(bgBrush);
FillRect(ClipRect);
begin
if FShowGrid then
Pen.Assign(GridPen) else Pen.Style:=psClear;;
x:=x0 mod trunc(FScale*FStep);
while x<(width-BorderRight) do
end;
procedure TChart.ReDraw;
begin
DrawGrid;
DrawFunctions;
end;
procedure TChart.ShiftHor(value: integer);
begin
x0:=x0+value;
ReDraw;
end;
procedure TChart.ShiftVer(value: integer);
begin
y0:=y0+value;
ReDraw;
end;
procedure TChart.AddFunction(f: TChartFunction; Ident: String);
begin
functions.AddObject(Ident,f);
ReDraw;
end;
procedure TChart.DrawFunctions;
var
i: integer;
begin
for i:=0 to functions.Count-1 do
if TChartFunction(functions.Objects[i]).Show then
DrawFunction(TChartFunction(functions.Objects[i]));
end;
begin
if x>BorderLeft then
begin
MoveTo(x,BorderTop); LineTo(x, Height-BorderBottom);
k:=(x-x0)/FScale;
s:= FloatToStrF(k,ffGeneral,4,2);
OutTextCenter(s, x, height-round(BorderBottom/2));
end;
x:=x+trunc(FStep*FScale);
end;
y:=y0 mod trunc(FScale*FStep);
while y<(height-BorderBottom) do
begin
if y>BorderTop then
begin
MoveTo(BorderLeft,y); LineTo(Width-BorderRight, y);
k:=(y0-y)/FScale;
s:= FloatToStrF(k,ffGeneral,4,2);
OutTextCenter(s,round(BorderLeft/2), y);
end;
y:=y+trunc(FStep*FScale);
end;
end;
// юЄЁшёютър ъююЁфшэрЄэvї юёхщ
Pen.Assign(AxisPen);
if (x0>BorderLeft) and (x0<(width-BorderRight)) then
begin
MoveTo(x0, BorderTop); lineto(x0, height-BorderBottom-1);
end;
if (y0>BorderTop) and (y0<(Height-BorderBottom)) then
begin
Moveto(BorderLeft,y0); lineTo(width-BorderRight-1, y0);
end;
Pen.Assign(gridPen);
Pen.Style:=psSolid;
Brush.Style:=bsClear;
Rectangle(40, 10, Width-10, height-40);
Brush.Style:=bsSolid;
end;
end;
procedure TChart.PutPixel(x, y: integer; Color: TColor);
var
i, j: integer;
begin
with MainCanvas do
for i:=x to x+1 do
for j:=y to y+1 do
MainCanvas.Pixels[i,j]:=Color;
function TChart.DelFunction(s: string): boolean;
label 1;
var
i: integer;
begin
result:=false;
for i:=0 to functions.Count-1 do
if functions.Strings[i]=s then
begin
result:=true;
functions.Delete(i);
goto 1;
end;
1:
end;
procedure TChart.Rescale(xvalue, yvalue: integer; Maximize: boolean);
var
mx, my: Real;
begin
if xvalue*yvalue<>0 then begin
mx:=(width-borderleft-borderright)/xvalue;
my:=(height-bordertop-borderbottom)/yvalue;
if Maximize then
if mx<my then FScale:=FScale*mx else FScale:=FScale*my
else
if mx<my then FScale:=FScale/mx else FScale:=FScale/my;
FStep:=(width/FScale)/NSteps;
ReDraw; end;
end;
procedure TChart.GetXY(x, y: integer; var x1, y1: real);
begin
x1:=(x-x0)/FScale;
y1:=(y0-y)/FScale;
end;
procedure TChart.SaveToFile(filename: string);
var
temporary: TPicture;
begin
temporary:=TPicture.Create;
temporary.Bitmap.Width:=width;
temporary.Bitmap.Height:=height;
Temporary.Bitmap.Canvas.CopyRect( Temporary.Bitmap.Canvas.ClipRect, MainCanvas, MainCanvas.ClipRect);
Temporary.SaveToFile(filename);
temporary.Destroy;
end;
{ TChartFunction }
constructor TChartFunction.Create(f: GraphFunction);
begin
MainFunction:=f;
Show:=true;end;end.
Подобные документы
Численные методы. Создание программного продукта, использование которого позволит одновременно исследовать два метода вычисления определенных интегралов: метод трапеций и метод Симпсона. Рассмотрен ход вычисления интеграла в виде кода программы.
курсовая работа [834,6 K], добавлен 14.04.2019Методы и алгоритмы вычисления определенных интегралов: метод трапеций и метод Симпсона (метод парабол). Оформление функции вычисления заданного определённого интеграла на Visual Basic 6.0. Программный код функции. Создание приложения для вычисления.
курсовая работа [483,6 K], добавлен 25.06.2014Формулирование и создание программы по вычислению определенного интеграла по формуле трапеций с тремя десятичными знаками и по формуле Симпсона. Выбор Delphi как программного средства разработки программы. Создание алгоритма и листинг программы.
курсовая работа [990,9 K], добавлен 15.06.2009Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.
курсовая работа [832,6 K], добавлен 24.07.2012Требования к аппаратным ресурсам персонального компьютера. Расчет цены и прибыли на программное средство. Процедура нахождения значения интеграла методом Симпсона, трапеции, прямоугольников. Формы для ввода и вывода данных с доступным интерфейсом.
дипломная работа [7,4 M], добавлен 11.06.2012Создание программного модуля для вычисления интеграла по формулам трапеции и Симпсона, определяя шаг интегрирования по оценке остаточного члена. Для разработки используется табличный процессор Excel и язык программирования Visual Basic for Application.
курсовая работа [159,7 K], добавлен 30.08.2010Разработка программного приложения для вычисления интегралов с помощью метода Симпсона. Составление функциональной и структурной схемы программного продукта, математической модели и тестовых примеров. Изучение предметной области, выбора среды реализации.
курсовая работа [359,3 K], добавлен 08.06.2011Решение трансцендентного уравнения методом Ньютона. Построение графика функции. Блок-схема алгоритма решения задачи и программа решения на языке Pascal. Вычисление значения интеграла методом трапеции, блок-схема алгоритма, погрешности вычисления.
задача [163,4 K], добавлен 16.12.2009Рассмотрение методов прямоугольников и трапеций как способов вычисления определенных интегралов. Характеристика графика зависимости погрешности от числа разбиений N. Создание приложения по вычислению интеграла с помощью методов приближенного вычисления.
курсовая работа [1,6 M], добавлен 20.06.2012Математическое описание, алгоритм и программа вычисления определенного интеграла методом трапеций. Расчет n-значений исследуемой функции и вывод их в виде таблицы. Технические и программные средства. Входные и выходные данные, функциональное назначение.
курсовая работа [21,0 K], добавлен 03.01.2010