Учебная работа. Курсовая работа: Программа вычисления значения определённого интеграла

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Курсовая работа: Программа вычисления значения определённого интеграла

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

КАФЕДРА

КОМПЬЮТЕРНЫХ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ



«Системное программирование»

2006

Инструкция

Курсовая работа по дисциплине «Системное программирование» на тему: «Программирование Windows – приложений» содержит ___ страничек машинописного (рукописного) текста, __ рисунков, __ таблиц, ___страниц приложения.

В программке рассмотрена программка вычисления значения определённого интеграла.


Вступление

Сначала я желал бы побеседовать о ОС, а конкретно о Windows 2000.

Windows 2000 – операционная система (ОС) компании Microsoft, основанная на технологии WindowsNT 5.0. NT либо NewTechnology была сотворена группой разрабов под управлением Дейва Катлера, ранее работавшего в DEC над проектом VMS. Дейв Катлер пришел в Microsoftв 1988 году специально для работы над проектом NT. NT, в отличии других ОС Microsoft.

Windows 2000 – вполне 32-разрядная ОС с приоритетной многозадачностью и усовершенствованной реализацией работы с памятью. В базе проекта W2kлежат те же принципы, которые когда-то обеспечили фуррор NT:

· Сопоставимость. Система имеет обычный интерфейс ОС семейства Windows, поддержку файловых систем NTFS5,NTFS4,FAT16,FAT32. Большая часть приложений написанных под MS-DOS, NT4, также некие программки под OS/2 запускаются и работают без заморочек. При проектировании NT учитывалась возможность работы системы в разных сетевых средах, потому в поставку входят средства для работы в UNIX- и NOVELL –сетях.

· Переносимость. Система работает на разных микропроцессорах семейства х86 производства INTEL и AMD. Реализация поддержки микропроцессоров остальных архитектур вероятна, но востребует неких усилий.

· Масштабируемость. В W2k реализована поддержка технологий SMP и COW. количество микропроцессоров при использовании SMP может достигать 32.

· Система сохранности вполне удовлетворяет спецификации С2 по терминологии АНБ США

· Распределенная обработка. W2k имеет интегрированные в систему сетевые способности, что обеспечивает возможность связи с разными типами компьютеров-хостов благодаря наличию различных транспортных протоколов и технологий «клиент-сервер».

· Надежность и отказоустойчивость. Архитектура OC защищает приложения от повреждения друг с другом и самой операционной системой. При всем этом употребляется отказоустойчивая структурированная обработка особенных ситуаций на всех строительных уровнях, которая включает восстанавливаемую файловую систему NTFS и обеспечивает защиту при помощи интегрированной системы сохранности и улучшенных способов управления памятью.

· локализация. Система предоставляет способности для работы в почти всех странах мира на государственных языках, что достигается применении эталона ISOUnicode.


1.ТЕОРИТИЧЕСКИЕ АСПЕКТЫ ПРОГРАММЫ

1.1 Короткие теоретические сведения

В задании нужно вычислить определенный интеграл 1) по формуле трапеций с 3-мя десятичными знаками и вычислить определенный интеграл 2) по формуле Симпсона при n=50.

Криволинейной трапецией именуют часть плоскости, ограниченную снизу Ох, а сверху дугой ab (некой линией, уравнением которой является y=f(x)), слева и справа прямыми x=a и x=b.

Пусть нам дана криволинейная трапеция. Требуется вычислить площадь криволинейной трапеции.

Участок b-a разбиваем на n отрезков. Простая площадь Si=f(Si)*(b-a)/n.

Площадью криволинейной трапеции S именуют предел:

когда n стремится к бесконечности так, что больший из участков разбиения стремится к нулю.

Разглядим функцию f(x), определенную и непрерывную на данном отрезке ab.

Построим для данной функции сумму вида:

Эту сумму будем именовать n-й интегральной суммой, построенной для функции f(x) на отрезке ab.

Если существует предел n-й интегральной суммы обозначенного вида при n стремящемся к бесконечности, так что больший из участков разбиения стремится к нулю, то то этот предел называют определенным интегралом функции f(x), на отрезке ab и обозначают:

а,b — нижний и верхний пределы интегрирования.

Главные характеристики определенного интеграла

1) Интеграл от суммы равен сумме интегралов (конечное число слагаемых)

2)Неизменный множитель можно выносить за символ неизменного интеграла:

3)Если поменять местами пределы интегрирования, символ интеграла поменяться на обратный:

4)Какие бы ни были числа a,b,c:

5)Свойство о оценке определенного интеграла:

Если м и М соответственно меньшее и наибольшее значения функции f(x) на ab, то справедлива последующая оценка:

Вычисление способом трапеций

Для того, чтоб вычислить интеграл 1) по способу трапеций, нужно найти число n – частей, на которые нужно разбить криволинейную трапецию, чтоб достигнуть требуемой точности (три знака опосля запятой).

Представим, есть некоторая криволинейная трапеция. Разбиваем криволинейную трапецию поначалу на случайное число частей n, другими словами получаем n1- обычных трапеций. Рассчитываем суммарную площадь трапеций (S1). Дальше разбиваем криволинейную трапецию на n2>n1 частей и также рассчитываем суммарную площадь трапеций (S2). Последующий шаг – вычисление разности S2-S1. Eсли |

S2-S1|<=0.001, то вычисления можно оборвать и взять за разыскиваемую площадь (

2. Если |S2-S1|>0.001, то S1:=S2, N1:=N2,N2:=N2*2, до того времени, пока не будет достигнута требуемая точность.

Расчетная формула способа трапеций:

где

Y-функция интеграла;

A-нижний предел интеграла;

B- верхний предел интеграла;

H-точность ;

N-количество итераций;

Расчетная формула способа Симпсона:

S=(h/3)*(y0+4*(y1+y3+…+yn-1)+2*(y2+y4+…+yn-2)+yn)

S-результат вычисления;

h-точность ;

y0-начальное

yn-редела;

1.2 Среда программирования

При выбирании программного средства разработки собственной программки я тормознул на DELHI. Почему?

Для начала истории.

Delphi — это греческий город, где жил дельфийский оракул. И сиим именованием был назван новейший программный продукт с феноменальными чертами. 6 месяцев вспять компания Borland представила на Трибунал программистской общественности новейший программный продукт, о котором к моменту его выхода ходило огромное количество слухов. 1-ая версия продукта явилась результатом разработки, которая велась компанией в обстановке строжайшей секретности в течение 2-ух с половиной лет. Компилятор, интегрированный в Delphi, обеспечивает высшую производительность, нужную для построения приложений в архитектуре «клиент-сервер». Этот компилятор в истинное время является самым резвым в мире, его скорость компиляции составляет выше 120 тыщ строк за минуту на компе 486DX33. Он дает легкость разработки и резвое время проверки готового программного блока, соответствующего для языков 4-ого поколения (4GL) и в то же время обеспечивает свойство кода, соответствующего для компилятора 3GL. Не считая того, Delphi обеспечивает резвую разработку без необходимости писать вставки на Си либо ручного написания кода (хотя это может быть).

В процессе построения приложения разраб выбирает из палитры компонент готовые составляющие как живописец, делающий большие мазки кистью. Еще до компиляции он лицезреет результаты собственной работы — опосля подключения к источнику данных их можно созидать отображенными на форме, можно передвигаться по данным, представлять их в том либо ином виде. В этом смысле проектирование в Delphi не много чем различается от проектирования в интерпретирующей среде, но опосля выполнения компиляции мы получаем код, который исполняется в 10-20 раз резвее, чем то же самое, изготовленное с помощью интерпретатора. Не считая того, компилятор компилятору рознь, в Delphi компиляция делается конкретно в родной машинный код, в то время как есть компиляторы, превращающие программку в так именуемый p-код, который потом интерпретируется виртуальной p-машиной. Это не может не сказаться на фактическом быстродействии готового приложения.


Объектно-ориентированная модель программных компонент

Главный упор данной модели в Delphi делается на наивысшем реиспользовании кода. Это дозволяет разрабам строить приложения очень стремительно из заблаговременно приготовленных объектов, также дает им возможность создавать свои собственные объекты для среды Delphi. Никаких ограничений по типам объектов, которые могут создавать создатели, не существует. Вправду, все в Delphi написано на нем же, потому создатели имеют доступ к этим же объектам и инструментам, которые использовались для сотворения среды разработки. В итоге нет никакой различия меж объектами, поставляемыми Borland либо третьими фирмами, и объектами, которые вы сможете сделать.

В обычную поставку Delphi входят главные объекты, которые образуют успешно подобранную иерархию из 270 базисных классов. Для начала — хорошо. Но если возникнет необходимость в решении некий специфичной препядствия на Delphi, рекомендуем, до этого чем попробовать начинать решать делему «с нуля», просмотреть перечень свободно распространяемых либо коммерческих компонент, разработанных третьими фирмами, количество этих компаний в истинное время превосходит число 250, хотя, может быть, я не обо всех понимаю. Скептики, может быть, не поверят мне, когда я скажу, что на Delphi можно идиентично отлично писать как приложения к корпоративным базам данных, так и, например, игровые программки. Тем не наименее, это так. Почти во всем это разъясняется тем, что обычно в среде Windows было довольно трудно реализовывать пользовательский интерфейс. Событийная модель в Windows постоянно была сложна для осознания и отладки. Но конкретно разработка интерфейса в Delphi является самой обычной задачей для программера.

систематизация версий
DELPHI

1-ая версия Delphi владела набором способностей, которые немедля завлекли мое пристальное внимание. Покорившими меня чертами Delphi были ее Идеология форм объектно – направленный подход, необыкновенно резвый компилятор, красивые инструменты для работы с базами данных, тесноватая интеграция с программированием в среде Windows и разработка компонент. Но важнейшей частью был язык OBJECTPASCAL, на фундаменте которого строилось все другое.

версия Delphi 2 была еще лучше! Посреди ее более принципиальных дополнений были последующие: компонент TBDCtrlGrid для работы с несколькими записями сразу, усовершенствованная сетка баз данных,поддержка автоматизации OLE и тип данных вариант, тесноватая интеграция с Windows 95, тип данных longstring и наследование форм. В Delphi 3 к этому добавились разработка Codeinsight (система подсказок для написания кода ), возможность отладки DLL, шаблоны компонент, TeeChart (библиотека компонент для работы с графиками), Decision Сube(метакуб –многомерная модель данных),разработка WebBroker (составляющие для программирования в интрасетях ), пакеты компонент, ActiveForms (формы для разработки частей activeX ) и восхитительная интеграция с COM основанная на применении интерфейсов.

В Delphi 4 возник редактор AppBrowser, поддержка новейших способностей Windows 98, усовершенствованная поддержка OLE и COM, расширенные составляющие баз данных и огромное количество добавлений к базисным классам VCL, включая поддержку фиксации ограничений и привязки частей управления. В Delphi 5 к общей картине добавилось огромное количество остальных улучшений IDE, расширенная поддержка баз данных, усовершенствованная версия MIDAS с поддержкой Веба, инструмент управления версиями TeamSource, способности лингвистического перевода, теория фреймов, огромное количество новейших компонент.

Delphi 6 добавляет ко всем уже имеющимся в Delphi способностям поддержку так именуемой кросс-платформенной разработки приложений (либо, говоря по другому, возможность разработки приложений для платформы Х ), которая базируется на использовании новейшей библиотеки компонент, расширенную библиотеку времени выполнения, новейший базисный принцип работы с базами данных dbExpress, поддержку Web –служб и XML, сильную инфраструктуру разработки приложений для Web, новейшие улучшения IDE, также большущее количество новейших компонент и классов.

Delphi – красивый инструмент разработки, но в то же время и непростая программная среда, состоящая из почти всех частей.

2. ПРАКТИЧЕСКИЕ АСПЕКТЫ ПРОГРАММЫ

2.1 Функционально-структурная схема





Рис. 1- Функционально-структурная схема

2.2
Иерархия форм

Рис.2 — Основная форма

Рис. 3– API –функции

Рис.4 – Основная форма (прорисовка графиков)


Рис.5 -Приятный способ решения

Рис.6 — Опции

Рис 7 – Основная форма для вычисления интеграла


Работа с программкой начинается с данной формы.

На данной форме вы сможете высчитать интеграл:

1. Избрать интеграл

2. Избрать способ (трапеций, Симпсона)

3. Ввести верхний предел интеграла

4. Ввести нижний предел интеграла

5. Ввести число разбиений

6. Нажав кнопку «Вперед» вычислить

Рис 8 – Форма для прорисовки графиков

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

1. Избрать интеграл

2. Надавить кнопку «График» и получить график избранного вами интеграла


Рис 9 — Таблицы

На данной форме показан наиболее детально способ нахождения интегралов.

Форма для внедрения функции
Windows
API
SetForegroundWindow
(
HWND
:
hwnd
);

Рис 10 – API –функции

На данной форме можно применить функцию SetForegroundWindow
(
HWND
:
hwnd
)
методом нажатия клавиши«Применить».

Форма для внедрения функции
Windows
API
SetCurrentDirectory
(
IpPathName
:
PChar
):
bool
;

Рис.11 – API-функции

На данной форме можно применить функцию SetCurrentDirectory
(
IpPathName
:
PChar
):
bool
;

методом нажатия клавиши«Применить».

Форма опций главной формы

Рис.12 — Опции

На данной форме размещены опции при помощи которых настраивается цвет и шрифты главной формы.

2.3 Элементы главной формы


Элемент формы

Предназначение

Событие


Bitgraf

Клавиша для пуска процедуры прорисовки графиков
BitgrafClick

Buclear

Клавиша для чистки поля для вывода значений интегралов
BuclearClick

Burun

Клавиша для пуска процедуры вычисления интегралов
BurunClick

Cbint

Переключатель для выбора интеграла
CbintChange

CBmet

Переключатель для выбора способа решения

ColorDialog

Гамма для выбора цвета

DateTimePicker

Календарь (денек,месяц,год)

Edzn1

Поле для ввода нижнего предела интеграла

Edzn2

Поле для ввода верхнего предела интеграла

Gauge

Компонент для зрительного отображения степени завершенности некой долговременной орерации либо процесса




Imgraf

Поле для вывода графически результатов вычисления

Imint

Поле для вывода графического изображения интеграла

Kurs

Основная форма

MainMenu

FormCreate




LbCbint

Метка которая показывает на переключатель Cbint


LbCbmet

Метка которая показывает на переключатель Cb
met


LbEdzn1

Метка которая показывает

поле Edzn1




LbEdzn2

Метка которая показывает

поле Edzn2




LbintGraf

Метка которая показывает

поле Imgraf




MMoutput

Поле для вывода значений припостроении графика

LbznGr

Метка которая показывает

поле MMoutput




N22
S
etCurrentDirectory

Пункт меню для применении функции S
etCurrentDirectory

N22GetCurrentDirectory1Click

N52SetForegroundWindow1Click
Пункт меню для применении функции SetForegroundWindow
N52SetForegroundWindow1Click

RBint1
Переключатель для построения графика на 1-ый интеграл
RBint1Click

RBint2
Переключатель для построения графика на 2-ой интеграл
RBint2Click

StatusBar
Строчка для вывода подсказок

2.4
Функции
Windows API

SetForeGroundWindow function SetForegroundWindow(hWnd: HWND): BOOL;

Функция SetForegroundWindow(HWND:hwnd) создана для перевода окна, которое идентифицируемо пораметром hwnd,в» верхний слой » и перевода на него фокус, независимо от того, какой поток сделал это окно.

SetForegroundWindow( HWNDhWnd // Маркер(дескриптор) окна, чтоб перенести к фронтальному плану)

Характеристики

hWnd

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

Применение:

procedure TForm2.Timer1Timer(Sender: TObject);

begin

SetForegroundWindow(kurs.Handle);

Timer1.Enabled:=false;

end;

Обработчиком действия является таймер (Timer1Timer) который и запускает функцию

SetCurrentDirectory

function SetCurrentDirectory(lpPathName: PChar): BOOL;

ФункцияSetCurrentDirectory
(‘lpPathName: PChar
‘) изменяет (устанавливает) текущийкаталог. Возвращаемое каталог был удачно изменен(заменен), либо False, если ошибка произошла.

SetCurrentDirectory(

lpPathName// адресок наименования(имени) новейшего текущего каталога );

Характеристики

lpPathName

Укажите на строчку с нулевым эмблемой в

конце, которая описывает путь к новенькому текущему каталогу.

Применение:

procedure TForm3.Button1Click(Sender: TObject);

begin

SetCurrentDirectory(‘c:’);

end;

Обработчиком действия является клавиша (Button1Click) который и запускает функцию.

2.5 Главные процедуры

Расчет интегралов

procedureTKurs.CbintChange(Sender: TObject);

begin

if CBint.Text=’Интеграл №1′ then

Imint.Picture.LoadFromFile(‘int.bmp’) else

Imint.Picture.LoadFromFile(‘int1.bmp’);

end;

procedure TKurs.BurunClick(Sender: TObject);

begin

try

try

a:=strtoint(Edzn1.text);

b:=strtoint(Edzn2.text);

n:=strtoint(Edit3.Text);

If (Cbint.Text=’Интеграл №1′) then

int:=f1;

if (CBmet.Text=’МетодомСимпсона’) then

int1(a,b,n,ss);

if (CBint.Text=’Интеграл №1′) then

int:=f1;

if (CBmet.Text=’Методомтрапеций’) then

int2(a,b,n,ss);

if (Cbint.Text=’Интеграл №2′) then

int:=f2;

if (CBmet.Text=’МетодомСимпсона’)then

int1(a,b,n,ss);

if (CBint.Text=’Интеграл №2′) then

int:=f2;

if (CBmet.Text=’Методомтрапеций’)then

int2(a,b,n,ss);

Memo1.Lines.Add(‘ ‘+CBint.Text);

Memo1.Lines.Add((CBmet.TextactiveXFloatToStrF(ss,ffNumber,9,3)));

except

on EConvertError do

begin

raiseException.Create(‘внимание!Ошибка в записи числа!’);

end;

end;

finally

if (a)>(b)

then

ShowMessage(‘Вверхняя граница обязана быть больше нижней’);

end;

end;

procedure TKurs.FormCreate(Sender: TObject);

begin

han:=loadlibrary(‘mydll.dll’);

if han=0 then showmessage(‘+Билиотеканенайдена!’)

else

begin

@f1:=getprocaddress(han,’f1′);

@f2:=getprocaddress(han,’f2′);

end;

end;

procedure TKurs.int1(a,b:real;n:integer;var ss:real);

var i1,i2,i:integer;h,s,s1,x1,s2,x2,yn,x:real;

begin

i:=1;

s1:=0;

y0:=INT(a);

h:=(b-a)/n;

repeat

x1:=a+i*h;

s1:=s1+INT(x1);

i:=i+2;

until i>n-1;

i1:=2;

s2:=0;

yn:=INT(b);

repeat

x2:=a+i1*h;

s2:=s2+INT(x2);

i1:=i1+2;

until i1>n-2;

yn:=a-n*h;

s:=(h/3)*(y0+4*s1+2*s2+yn);

ss:=s;

end;

procedure TKurs.int2(a,b:real;n:integer;var ss:real);

var i,j:integer;k:real;

begin

Form5.StringGrid1.Cells[0,0]:=’I’;

Form5.StringGrid1.Cells[1,0]:=’Xi’;

form5.StringGrid1.Cells[2,0]:=’SQR(Xi)’;

Form5.StringGrid1.Cells[3,0]:='(0.5*sqr(Xi)+1.5))’;

Form5.StringGrid1.Cells[4,0]:=’y0..yn’;

Form5.StringGrid1.Cells[5,0]:=’y1..yn’;

s:=0;

h:=(b-a)/n;

Form5.Label2.Caption:=floattostr(h);

Form5.StringGrid1.RowCount:=n+3;

for i:=0 to n do begin

s:=s+iNT(a+i*h);

j:=0;

Form5.StringGrid1.Cells[j,i+1]:=intToStr(i);

j:=1;

Form5.StringGrid1.Cells[j,i+1]:=FloatToStrF((a+i*h),ffNumber,4,4);

j:=2;

Form5.StringGrid1.Cells[j,i+1]:=FloatToStrF(sqr(a+i*h),ffNumber,4,4);

j:=3;

form5.StringGrid1.Cells[j,i+1]:=FloatToStrF(0.5*sqr(a+i*h)+1.5,ffNumber,4,4);

j:=5;

Form5.StringGrid1.Cells[j,i+2]:=FloatToStrF(int(a+(i+1)*h),ffNumber,4,4);

end;

Form5.Show;

Form5.StringGrid1.Cells[0,n+2]:=’Сумма’;

Form5.StringGrid1.Cells[5,n+2]:=FloatToStrF(s-(int(a+(n)*h)+int(a+0*h)),ffNumber,4,4);

Form5.StringGrid1.Cells[4,1]:=FloatToStrF(int(a+0*h),ffNumber,4,4);

Form5.StringGrid1.Cells[4,n+1]:=FloatToStrF(int(a+(n)*h),ffNumber,4,4);

Form5.StringGrid1.Cells[4,n+2]:=FloatToStrF(int(a+(n)*h)+int(a+0*h),ffNumber,4,4);

s:=((INT(a)+INT(b))/2+s)*h;

ss:=s;

end;

2.6 методика визуализации

Визуализация приобретенных значений при решении интеграла зависимо от значений нижней границы при фиксированных значениях верхней границы определенного интеграла была получена при помощи обычного компонента визуализации графических данных, также при помощи класса TCanvas его параметров и способов которые описаны ниже.


Свойство

Описание


Font

Описывает шрифт, чтоб применять его при записи текста на изображении

Brush

Описывает цвет и эталон использования холста для наполнения графических форм и фонов

Pen

Описывает вид пера для использования для рисования строк и структурирования форм

Pixels

Описывает цвет области пикселов в границах потока ClipRect.

способ

Описание


Draw

Делает графический объект обозначенным параметром Graphic на холсте в местоположении, данном координатами (X, Y).

FillRect

Заполняет обозначенный прямоугольник на холсте, используя текущую кисть.

LineTo

Тянет(отрисовывают) строчку на холсте от PenPos, к координатам обозначенных X и Y, и устанавливает перьевую позицию в (X, Y).

MoveTo

Изменяет позицию текущего рисунка к координатам (X, Y).

procedure TKurs.BitgrafClick(Sender: TObject);

var

x,ymin,ymax,hx1,hx,hy,xn,xk,mx,sx,my,sy,yy,xx:real;i,X1,Y1,Y2,x3,xa,ya,xb,yb:integer;

begin

if Timer1.Enabled=false then

Timer1.Enabled:=true;

Kurs.Imgraf.Canvas.FillRect(rect(0,0,620,370));

xn:=strtofloat(Edzn1.text);

xk:=StrTofloat(Edzn2.Text);

n:=strtoint(Edit3.Text);

x:=xn;ymax:=-1e30;ymin:=1e30;

while x<=xk do

begin

if RadioButton1.Checked then

int:=f1;

if RadioButton2.Checked then

int:=f2;

int1(x,xk,n,ss);

if ss>ymax then ymax:=ss;

if ss<ymin then ymin:=ss;

x:=x+0.01;

end;

x:=xn;

int1(x,xk,n,ss);

x1:=round(mx*x+sx);

y1:=round(my*x+sy);

repeat

int1(x,xk,n,ss);

x2:=ROUND(mx*x+sx);

y2:=round(-my*ss+sy);

kurs.Imgraf.Canvas.Pen.Color:=ColorDialog2.color;

kurs.Imgraf.Canvas.Brush.Color:=clwhite;

kurs.Imgraf.Canvas.MoveTo(x1,y1);

kurs.Imgraf.Canvas.LineTo(x2,y2);

x1:=x2;y1:=y2;

k:=true;

kurs.Imgraf.Canvas.Pen.Color:=clred;

kurs.Imgraf.Canvas.Pen.Width:=2;

hx1:=1;

hx:=(xk-xn)/10;

xa:=0;ya:=0;xb:=450;yb:=310;

mx:=(xb-xa)/(xk-xn);

my:=(yb-ya)/(ymax-ymin);

sy:=ya+my*ymax;sx:=xa-mx*xn;

kurs.Imgraf.Canvas.MoveTo(xb,yb);

kurs.Imgraf.Canvas.LineTo(xa,yb);

x:=x+0.01;

until x>xk;

i:=3;

xx:=xn;

//вертикальные состовляющие

repeat

kurs.Imgraf.Canvas.MoveTo(i,ya);

kurs.Imgraf.Canvas.LineTo(i,yb);

kurs.Imgraf.Canvas.TextOut(i,yb+5,FloatToStr(xx));

inc(i,Round((Imgraf.Width)/10));

xx:=xx+hx;

until i>Imgraf.Width;

//горизонтальные состовляющие

i:=Imgraf.Height-50;

repeat

yy:=(sy-i)/my;

kurs.Imgraf.Canvas.MoveTo(0,i);

kurs.Imgraf.Canvas.LineTo(Imgraf.Width,i);

kurs.Imgraf.Canvas.TextOut(0,i-5,FloatToStrF(yy,ffNumber,4,2));

i:=i-round(hy);

dec(i,Round((Imgraf.Height)/8));

until i<0 ;

2.6
Подключение
DLL-
библиотеки

Существует два типа исполняемых файлов Windows: программки и библиотеки динамической компоновки (DynamicLinkLibraries,Dll). Когда мы разрабатываем приложение Delphi, мы, обычно создаем исполняемый файл программки, который владеет расширением EXE. Но приложения Delphi в процессе собственной работы нередко обращаются к функциям, содержащимся в библиотеках DLL. к примеру, всякий раз, когда мы впрямую обращаемся к WindowsAPI, по сути мы обращаемся к DLL.

Что такое динамическая сборка ?

При использовании
компоновки, которая производится в случае, если разрабатываемый нами код обращается к функции, содержащейся в библиотеки DLL, компоновщик получает нужную информацию о функции из ее обьявления

Эта информация употребляется для наполнения неких таблиц снутри исполняемого файла. Когда операционная система Windows загружает исполняемый файл в память, сначала она производит загрузку всех нужных для функционирования программки библиотек, и лишь опосля этого программки начинает работу. В процессе загрузки библиотек DLL операционная система заполняет таблицы внутренние таблицы программки адресами функций из загруженных в память библиотек DLL.

Подключение Dll –подключение методом динамической Dll-загрузки.

procedure TKurs.FormCreate(Sender: TObject);

begin

han:=loadlibrary(‘mydll.dll’);

if han=0 then showmessage(‘+Библиотеканенайдена!’)

else

begin

@f1:=getprocaddress(han,’f1′);

@f2:=getprocaddress(han,’f2′);

end;

Листинг
Dll-
библиотеки

library mydll;

{ Important note about DLL memory management: ShareMem must be the

first unit in your library’s USES clause AND your project’s (select

Project-View Source) USES clause if your DLL exports any procedures or

functions that pass strings as parameters or function results. This

applies to all strings passed to and from your DLL—even those that

are nested in records and classes. ShareMem is the interface unit to

the BORLNDMM.DLL shared memory manager, which must be deployed along

with your DLL. To avoid using BORLNDMM.DLL, pass string information

using PChar or ShortString parameters. }

uses

SysUtils,

Classes;

{$R *.res}

function f1(x:real):real;

begin

f1:=1/sqrt(0.5*sqr(x)+1.5);

end;

function f2(x:real):real;

begin

f2:=(x+1)*cos(sqr(x));

end;

exports

f1 index 1 name ‘f1’,f2 index 2 name ‘f2’;

begin

end.

2.7
Составляющие
личного
задания

DateTimePicker1: TDateTimePicker;

TDateTimePicker — зрительный компонент, разработанный (предназначенный) точно для ввода дат либо времен. В DateTimePicker датируют режим, это походит на перечень либо поле со перечнем, кроме того, что раскрывающийся перечень заменен календарной иллюстрацией; юзеры могут выбирать дату от календаря. Даты либо времена могут также быть выбраны, листая со Стрелками «ввысь» и «вниз».

Gauge употребляется для зрительного отображения юзеру степень завершенности некой долговременной орерации либо процесса


Свойство
Предназначение

Backcolor
Изменение цвета фона заднего плана

Forecolor
Изменение цвета индикатора движения

Kind

gkVerticalBar

gkHorizontalBar

gkNeedle

gkPie

gkText


Изменение главный формы индикатора движения


вертикальный вид индикатора движения


горизонтальный вид индикатора движения


индикатора движения в виде полукруга


индикатора движения в виде сектора



текстовое отображение индикатора движения




MaxValue
Наибольшее

3.
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

3.1 Системные требования

Pentium 133 Mhz, RAM 32 Mb, HDD 10Mb, Windows 98

3.2
Помощь

Для справки нажмите F1, и покажется окно

Рис.8- Справка

3.3 установка программки

Для установки программки нужно скопировать папку EXE

содержимое папки:

Project1.exe

Mydll.dll

Helpkurs


Выводы

Таковым образом,данная работа дозволила мне:

1. закрепить на опыте познания, приобретенные при исследовании дисциплины “Системное программирование”.

2. научился разрабатывать программные продукты под операционную среду Windows

3. закрепил последующие познания:

— Программирование в Delphi

— Программирование программ использующие код, написанный на остальных языках программирования (внедрение DLL )

— Динамическая сборка с DLL

— Численные способы для вычисления определенных интегралов

— Написание Help в стиле Windows.


Перечень применяемой литературы

1. Delphi 6. Для экспертов. Разработка COM: Пер.с англ.:-464c. 2005

2. Разработка приложений в среде Delphi: пер.с англ.:Уч.пос-М.:Издательский дом «Вильямс»,2006.-464с.


Листинг
программки

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, ComCtrls, Menus, ExtDlgs, ExtCtrls, ToolWin, Gauges,

AppEvnts, TeEngine, Series, TeeProcs, Chart, TeeFunci, Buttons, ShellAPI,

ScktComp, ImgList;

type

TKurs = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

Edzn1: TEdit;

Edzn2: TEdit;

Edit3: TEdit;

MainMenu1: TMainMenu;

file1: TMenuItem;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

SavePictureDialog1: TSavePictureDialog;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

StatusBar1: TStatusBar;

Imint: TImage;

Cbint: TComboBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

CBmet: TComboBox;

Memo1: TMemo;

Label5: TLabel;

Burun: TButton;

N7: TMenuItem;

N22GetCurrentDirectory1: TMenuItem;

N52SetForegroundWindow1: TMenuItem;

DateTimePicker1: TDateTimePicker;

Imgraf: TImage;

Label6: TLabel;

Buclear: TButton;

Bitgraf: TBitBtn;

GroupBox1: TGroupBox;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

ApplicationEvents1: TApplicationEvents;

N8: TMenuItem;

N9: TMenuItem;

ImageList1: TImageList;

Timer1: TTimer;

Gauge1: TGauge;

N10: TMenuItem;

N11: TMenuItem;

ColorDialog1: TColorDialog;

ColorDialog2: TColorDialog;

N12: TMenuItem;

procedure N1Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure CbintChange(Sender: TObject);

procedure BurunClick(Sender: TObject);

procedure int1(a,b:real;n:integer;var ss:real);

procedure int2(a,b:real;n:integer;var ss:real);

procedure FormCreate(Sender: TObject);

procedure N22GetCurrentDirectory1Click(Sender: TObject);

procedure N52SetForegroundWindow1Click(Sender: TObject);

procedure ApplicationEvents1Hint(Sender: TObject);

procedure BuclearClick(Sender: TObject);

procedure BitgrafClick(Sender: TObject);

procedure RadioButton1Click(Sender: TObject);

procedure RadioButton2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N12Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

tfun=function(x:real):real;

var

Kurs: TKurs;

INT,F1,f2:tfun;

han:thandle;

k:boolean;

a,b,s,h,ss,y0,yn,s2,x2,xx1,xx2,xk:real;

n,n1,i1:integer;

mplementation

uses Unit2, Unit3, Unit4, Unit5 ;

{$R *.dfm}

procedure TKurs.N1Click(Sender: TObject);

begin

Imgraf.Picture.SaveToFile(SavePictureDialog1.FileName+’.bmp’);

end;

procedure TKurs.N4Click(Sender: TObject);

begin

if k=true then begin

N1.Enabled:=true;

if SavePictureDialog1.Execute then

Imgraf.Picture.SaveToFile(SavePictureDialog1.FileName+’.bmp’);

end

else

ShowMessage(‘Ãðàôèê íå îòðèñîâàí’);

end;

procedure TKurs.N6Click(Sender: TObject);

begin

Application.HelpCommand(HELP_FINDER,0);

end;

procedure TKurs.CbintChange(Sender: TObject);

begin

if CBint.Text=’Èíòåãðàë ¹1′ then

Imint.Picture.LoadFromFile(‘int.bmp’) else

Imint.Picture.LoadFromFile(‘int1.bmp’);

end;

procedure TKurs.BurunClick(Sender: TObject);

begin

a:=strtofloat(Edzn1.text);

b:=strtofloat(Edzn2.text);

n:=strtoint(Edit3.Text);

if (edzn1.Text<>») and (Edzn2.Text<>») and

(Cbint.ItemIndex<>-1)and (CBmet.ItemIndex<>-1) then

begin

try

If (Cbint.Text=’Èíòåãðàë ¹1′) then

int:=f1;

if (CBmet.Text=’Ìåòîäîì Ñèìïñîíà’) then

int1(a,b,n,ss);

if (CBint.Text=’Èíòåãðàë ¹1′) then

int:=f1;

if (CBmet.Text=’Ìåòîäîì òðàïåöèé’) then

int2(a,b,n,ss);

if (Cbint.Text=’Èíòåãðàë ¹2′) then

int:=f2;

if (CBmet.Text=’Ìåòîäîì Ñèìïñîíà’)then

int1(a,b,n,ss);

if (CBint.Text=’Èíòåãðàë ¹2′) then

int:=f2;

if (CBmet.Text=’Ìåòîäîì òðàïåöèé’)then

int2(a,b,n,ss);

Memo1.Lines.Add(‘ ‘+CBint.Text);

Memo1.Lines.Add((CBmet.TextactiveXFloatToStrF(ss,ffNumber,9,3)));

finally

if (a)>(b)

then

ShowMessage(‘Ââåðõíÿÿ ãðàíèöà äîëæíà áûòü áîëüøå íèæíåé’);

end;

end

else

if (Edzn1.Text=’ ‘) then ShowMessage(‘Íå ââåäåíà ââåðõíÿÿ ãðàíèöà!’);

if (Edzn2.Text=’ ‘) then ShowMessage(‘Íå ââåäåíà íèæíÿÿ ãðàíèöà!’);

if (Cbint.ItemIndex=-1) then ShowMessage(‘Âíèìàíèå!Íå âûáðàí èíòåãðàë!’);

if (CBmet.ItemIndex=-1) then ShowMessage(‘Íå âûáðàí ìåòîä ðåøåíèÿ!’);

end;

procedure TKurs.FormCreate(Sender: TObject);

begin

han:=loadlibrary(‘mydll.dll’);

if han=0 then showmessage(‘+Áèëèîòåêà íå íàéäåíà!’)

else

begin

@f1:=getprocaddress(han,’f1′);

@f2:=getprocaddress(han,’f2′);

end;

end;

procedure TKurs.int1(a,b:real;n:integer;var ss:real);

ar i1,i2,i:integer;h,s,s1,x1,s2,x2,yn,x:real;

begin

i:=1;

s1:=0;

y0:=INT(a);

h:=(b-a)/n;

repeat

x1:=a+i*h;

s1:=s1+INT(x1);

i:=i+2;

until i>n-1;

i1:=2;

s2:=0;

yn:=INT(b);

repeat

x2:=a+i1*h;

s2:=s2+INT(x2);

i1:=i1+2;

until i1>n-2;

yn:=a-n*h;

s:=(h/3)*(y0+4*s1+2*s2+yn);

ss:=s;

end;

procedure TKurs.int2(a,b:real;n:integer;var ss:real);

var i,j:integer;k:real;

begin

Form5.StringGrid1.Cells[0,0]:=’I’;

Form5.StringGrid1.Cells[1,0]:=’Xi’;

form5.StringGrid1.Cells[2,0]:=’SQR(Xi)’;

Form5.StringGrid1.Cells[3,0]:='(0.5*sqr(Xi)+1.5))’;

Form5.StringGrid1.Cells[4,0]:=’y0..yn’;

Form5.StringGrid1.Cells[5,0]:=’y1..yn’;

s:=0;

h:=(b-a)/n;

Form5.Label2.Caption:=floattostr(h);

Form5.StringGrid1.RowCount:=n+3;

for i:=0 to n do begin

s:=s+iNT(a+i*h);

j:=0;

Form5.StringGrid1.Cells[j,i+1]:=intToStr(i);

j:=1;

Form5.StringGrid1.Cells[j,i+1]:=FloatToStrF((a+i*h),ffNumber,4,4);

j:=2;

orm5.StringGrid1.Cells[j,i+1]:=FloatToStrF(sqr(a+i*h),ffNumber,4,4);

j:=3;

form5.StringGrid1.Cells[j,i+1]:=FloatToStrF(0.5*sqr(a+i*h)+1.5,ffNumber,4,4);

j:=5;

Form5.StringGrid1.Cells[j,i+2]:=FloatToStrF(int(a+(i+1)*h),ffNumber,4,4);

end;

Form5.Show;

Form5.StringGrid1.Cells[0,n+2]:=’Ñóììà’;

Form5.StringGrid1.Cells[5,n+2]:=FloatToStrF(s-(int(a+(n)*h)+int(a+0*h)),ffNumber,4,4);

Form5.StringGrid1.Cells[4,1]:=FloatToStrF(int(a+0*h),ffNumber,4,4);

Form5.StringGrid1.Cells[4,n+1]:=FloatToStrF(int(a+(n)*h),ffNumber,4,4);

Form5.StringGrid1.Cells[4,n+2]:=FloatToStrF(int(a+(n)*h)+int(a+0*h),ffNumber,4,4);

s:=((INT(a)+INT(b))/2+s)*h;

ss:=s;

end;

procedure TKurs.N22GetCurrentDirectory1Click(Sender: TObject);

begin

form2.Show;

end;

procedure TKurs.N52SetForegroundWindow1Click(Sender: TObject);

begin

form3.Show;

end;

procedure TKurs.ApplicationEvents1Hint(Sender: TObject);

begin

StatusBar1.Panels[0].Text:=Application.Hint;

end;

procedure TKurs.BuclearClick(Sender: TObject);

begin

Memo1.Lines.Clear;

end;

procedure TKurs.BitgrafClick(Sender: TObject);

var

x,ymin,ymax,hx1,hx,hy,xn,xk,mx,sx,my,sy,yy,xx:real;i,X1,Y1,Y2,x3,xa,ya,xb,yb:integer;

begin

if Timer1.Enabled=false then

Timer1.Enabled:=true;

Kurs.Imgraf.Canvas.FillRect(rect(0,0,620,370));

xn:=strtofloat(Edzn1.text);

xk:=StrTofloat(Edzn2.Text);

n:=strtoint(Edit3.Text);

x:=xn;ymax:=-1e30;ymin:=1e30;

while x<=xk do

begin

if RadioButton1.Checked then

int:=f1;

if RadioButton2.Checked then

int:=f2;

int1(x,xk,n,ss);

if ss>ymax then ymax:=ss;

if ss<ymin then ymin:=ss;

x:=x+0.01;

end;

x:=xn;

int1(x,xk,n,ss);

x1:=round(mx*x+sx);

y1:=round(my*x+sy);

repeat

int1(x,xk,n,ss);

x3:=ROUND(mx*x+sx);y2:=round(-my*ss+sy);

kurs.Imgraf.Canvas.Pen.Color:=ColorDialog2.color;

kurs.Imgraf.Canvas.Brush.Color:=clwhite;

kurs.Imgraf.Canvas.MoveTo(x1,y1);

kurs.Imgraf.Canvas.LineTo(x3,y2);

x1:=x3;y1:=y2;

k:=true;

kurs.Imgraf.Canvas.Pen.Color:=clred;

kurs.Imgraf.Canvas.Pen.Width:=2;

hx1:=1;

hx:=(xk-xn)/10;

xa:=0;ya:=0;xb:=450;yb:=310;

mx:=(xb-xa)/(xk-xn);my:=(yb-ya)/(ymax-ymin);

sy:=ya+my*ymax;sx:=xa-mx*xn;

kurs.Imgraf.Canvas.MoveTo(xb,yb);

kurs.Imgraf.Canvas.LineTo(xa,yb);

x:=x+0.01;

until x>xk;

i:=3;

xx:=xn;

//âåðòèêàëüíûå ñîñòîâëÿþùèå

repeat

kurs.Imgraf.Canvas.MoveTo(i,ya);

kurs.Imgraf.Canvas.LineTo(i,yb);

kurs.Imgraf.Canvas.TextOut(i,yb+5,FloatToStr(xx));

inc(i,Round((Imgraf.Width-50)/10));

xx:=xx+hx;

until i>Imgraf.Width;

//ãîðèçîíòàëüíûå ñîñòàâëÿþùèå

i:=Imgraf.Height-50;

repeat

yy:=(sy-i)/my;

kurs.Imgraf.Canvas.MoveTo(0,i);

kurs.Imgraf.Canvas.LineTo(Imgraf.Width,i);

kurs.Imgraf.Canvas.TextOut(0,i-5,FloatToStrF(yy,ffNumber,4,2));

i:=i-round(hy);

dec(i,Round((Imgraf.Height-50)/10));

until i<0 ;

end;

rocedure TKurs.RadioButton1Click(Sender: TObject);

begin

Bitgraf.Enabled:=true;

end;

procedure TKurs.RadioButton2Click(Sender: TObject);

begin

Bitgraf.Enabled:=true;

end;

procedure TKurs.Button3Click(Sender: TObject);

begin

SetForegroundWindow(HWND_TOP );

end;

procedure TKurs.N9Click(Sender: TObject);

begin

Form4.Show;

end;

procedure TKurs.Timer1Timer(Sender: TObject);

begin

Gauge1.Progress:=Gauge1.Progress+10;

if Gauge1.Progress=100 then begin

Timer1.Enabled:=false;

Gauge1.Progress:=0;

end;

end;

procedure TKurs.N10Click(Sender: TObject);

begin

if ColorDialog2.Execute then

kurs.Imgraf.Canvas.Pen.Color:=ColorDialog1.Color;

end;

procedure TKurs.N11Click(Sender: TObject);

begin

if ColorDialog1.Execute then

kurs.Imgraf.Canvas.Pen.Color:=ColorDialog1.Color;

end;

procedure TKurs.N12Click(Sender: TObject);

begin

Kurs.Close;

end;

end.

]]>