на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Программа вычисления значения и вывода графика определенного интеграла
p align="left">end;

end;

function Integral2Function(x: real; var y: real):boolean;

begin

Result:=true;

try

y:=sin(2*x)/sqr(x)

except

result:=false;

end;

end;

2.4 Реализация функции разбора произвольно заданных математических функций

В программе реализована возможность расчета интегралов и построения графиков не только для функций, заданных в процессе разработки программы, но и для математических функций задаваемых пользователем в процессе работы с программой. Данная функция реализована в модуле evalcomp.pas. Так как разработка данной возможности не была предусмотрена в задании к курсовому проекту, то реализации данного модуля не будет подробно рассматриваться в записке. Рассмотрим лишь правила использования функции.

Для использования данной возможности в главном модуле создается объект типа evalvec. Объект необходимо инициализировать строкой содержащей математическую функцию.

Пример:

new(calc, init('x'));

где calc - переменная типа evalvec.

Для вычисления значения заданной функции необходимо вызывать метод eval1d:

function eval1d(x:real):real;

В качестве параметра для данной функции необходимо задавать значение переменной х, на выходе получаем значение функции в точке x.

2.5 Реализация численных методов вычисления интегралов

Теоретические выкладки для вычисления интегралов численными методами были приведены выше в п.1.1.1 и п.1.1.2 данной записки. Программно данные методы реализованы в динамической бибилотеке integrals.dll. Листинги процедур для вычисления интегралов методами трапеций и Симпсона представлены на рисунках 4 и 5.

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;

2.5 Реализация функций построения и сохранения графиков

2.5.1 Основная концепция

В программе функции построения графика выделены в отдельный модуль chart.pas. Для реализации функций построения графика использованы принципы объектно-ориентированного программирования. Этот подход позволяет размещать на форме несколько областей для отображения графиков. Кроме того, на каждой области могут отображаться не один, а сразу несколько графиков различных функций. Для каждой области построения графиков необходимо создавать объекты класса TChart. При создании объекта в конструктор Create передается указатель на Canvas области построения графиков (в нашем случае в программе передается указатель на Canvas компонента TImage).

Для каждого графика, который необходимо отображать необходимо создавать объект класса TChartFunction. В качестве параметра в конструктор Create передается указатель на функцию, график которой необходимо отображать. После создания объекта класса TChartFunction необходимо вызывать метод TChart.AddFunction, который добавляет график текущей функции в список графиков объекта TChart.

2.5.2 Функция отрисовки графика

Метод DrawFuncitons класса TChart перебирает по очередности все графики из списка графиков и по очередности отрисовывает каждый из них используя для этого вызов процедуры TChart.DrawFunction. Листинг данной процедуры представлен на рис. 6.

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;

В данной процедуре используя вызов функции MainFunction объекта класса TChartFunction определяются абсолютные координаты каждой точки графика в диапазоне значений, отображаемых на области отрисовки графика. Используя предварительно заданные масштаб и абсолютные координаты начала координат графика просчитываются координаты каждой точки графика.

2.5.3 Описание методики сохранения графика в графический файл

Для сохранения созданного графика в графический файл используется метод SaveToFile класса TChart. В качестве параметра в данный метод передается имя файла в который необходимо сохранять изображение.

Данная процедура создает временный объект класса TPicture, копирует канвас графика в канвас вновь созданного объекта и после этого, используя метод TPicture.SaveToFile сохраняет изображение в файл. Полный листинг данного метода представлен на рисунке 7.

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;

2.6 Описание модулей и форм

MainForm (MainUnit.pas) - главная форма программы на которой отображаются вычисления интегралов, а также происходит построение графиков функций

AboutForm (Abut.unit) - форма содержащая сведения о разработчике программы

EvalForm (EvalFormUnit.pas) - форма для ввода произвольных математических функций

SystemInfoForm (SysInfo.pas) - форма отображающая результат выполнения API-функции GetSystemInfo

Рисунок 8 - Схема взаимодействия форм приложения

2.7 Вызовы API-функций

В качестве задания к курсовому проекту необходимо описать и использовать в программе две API-функции: ClipCursor и GetSystemInfo.

1. Функция ClipCursor содержится в стандартной библиотеке user32.dll

Описание функции:

function ClipCursor(Rect: TRect);

Эта функция заключает курсор в Rect. Если Rect имеет значение nil, то курсор является неограниченным.

Параметры:

Rect: ограничивающий TRect в координатах экрана.

Пример использования данной функции в программе приведен в листинге на рисунке 9.

procedure TMainForm.ClipCursor1Click(Sender: TObject);

var

R: TRect;

begin

ClipCursor1.Checked:=not ClipCursor1.Checked;

if ClipCursor1.Checked then

begin GetClipCursor(ClipRect);

Left:=MainForm.Left;

Right:=MainForm.Left+MainForm.Width;

Bottom:=MainForm.Top+MainForm.Height;

end;

ClipCursor(@R);

end else ClipCursor(@ClipRect);

end;

2. Функция GetSystemInfo

Описание функции:

procedure GetSystemInfo(lpSystemInfo: TSystemInfo);

Функция в качестве параметра получает указатель на структуру SystemInfo, которую она заполняет. Структуру SystemInfo содержит информацию о текущей системе.

dwOemId: DWord

Устаревший элемент, предназначенный для совместимости с предыдущими версиями Windows NT (3.5 и ранее). Начиная с Windows 3.51 приложения должны использовать переход wProcessorArchitecture объединения. Windows 95/98/Me: система всегда устанавливает этот элемент, чтобы обнулить значение, определенное для PROCESSOR_ARCHITECTURE_INTEL.

wProcessorArchitecture:Word

Определяет архитектуру процессора системы. Этим элементом может быть одно из следующих значений:

PROCESSOR_ARCHITECTURE_UNKNOWN

PROCESSOR_ARCHITECTURE_INTEL

PROCESSOR_ARCHITECTURE_MIPS - Windows NT 3.51

PROCESSOR_ARCHITECTURE_ALPHA - Windows NT 4.0 и ранее

PROCESSOR_ARCHITECTURE_PPC - Windows NT 4.0 и ранее

PROCESSOR_ARCHITECTURE_IA64 - 64-битная версия Windows

PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 - 64-битная версия

Windows PROCESSOR_ARCHITECTURE_AMD64 - 64-битная версия

Зарезервирован для будущего использования.

dwPageSize : DWord

Определяет размер страницы и степень детализации защиты страницы и блокирования. Это - размер страницы, используемый функцией VirtualAlloc.

lpMinimumApplicationAddress: Pointer

Указатель на самый низкий адрес памяти, доступный для приложений и библиотек динамической связи (DLLs).

lpMaximumApplicationAddress: Pointer

Указатель на самый высокий адрес памяти, доступный для приложений и DLLs.

dwActiveProcessorMask: DWord

Определяет маску, представляющую набор процессоров, конфигурированных в систему. Бит 0 - процессор 0; бит 31 - процессор 31.

dwNumberOfProcessors: DWord

Определяет количество процессоров в системе.

dwProcessorType: DWord

Устаревший элемент, предназначенный для совместимости с предыдущими версиями Windows NT (3.5 и ранее). Windows 95/98/Me: Определяет тип процессора в системе. Windows NT: Этот элемент больше не имеет значения, но сохранен для совместимости с Windows 95 и предыдущими версиями Windows NT. Необходимо использовать wProcessorArchitecture, wProcessorLevel, и wProcessorRevision элементы, чтобы определить тип процессора. Этим элементом может быть одно из следующих значений: PROCESSOR_INTEL_386 PROCESSOR_INTEL_486 PROCESSOR_INTEL_PENTIUM PROCESSOR_MIPS_R4000 - Windows NT PROCESSOR_ALPHA_21064 - Windows NT

dwAllocationGranularity: DWord

Определяет степень детализации распределения виртуальной памяти.

wProcessorLevel : Word

Windows 95 - этот элемент не поддерживается. Windows NT - определяет архитектурный уровень процессора.

2.8 Методика смешанного программирования

Страницы: 1, 2, 3, 4, 5, 6



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.