Это большой плюс в визуальной технологии программирования. Создавая или модифицируя свой программный продукт, пользователь не зная или не обращая внимания на некоторые свойства элемента программы, а используя только необходимые, пишет полностью готовый рабочий продукт, порой выступающий на равных по сложности, с написанными на невизуальном редакторе.
Дополнительное удобство в работе в среде Delphi это мощная справочная система. Контекстно-зависимая от текущего выбранного элемента или строки программы, позволяет получить подробнейшую справку. Вложенные примеры позволяют, не отходя далеко от интересующей вас информации, просмотреть реализацию уже готовой, возможно полезной для вас, программы. Естественно, справка, как и сама среда разработки, описана на английском языке. Одновременно существуют и русифицированные файлы справки.
Контекстно-зависимое внедрение файлов справки позволяет поднять уровень проектируемого приложения на порядок выше. А не сказать про поддержку работы с базами данных – значит не сказать многого. При работе в среде программирования посредством так называемого BDE (Borland Database Engine), системного администратора баз данных, можно получать прямой доступ к таким стандартным форматам данных, как dBASE, Paradox, FoxPro, Access, ASCII таблицам. Набор драйверов Borland SQL Links обеспечивает все необходимые соединения с SQL-серверами.
Delphi использует структурный объектно-ориентированный язык (Object Pascal), который сочетает с одной стороны выразительную мощь и простоту программирования, характерную для языков 4GL, а с другой стороны эффективность языка 3GL. Программисты немедленно могут начать производить работающие приложения, и им не придется для этого изучать особенности программирования событий в Windows. Delphi полностью поддерживает передовые программные концепции включая инкапсуляцию, наследование, полиморфизм и управление событиями.
Редактирование программ можно осуществлять, используя запись и исполнение макросов, работу с текстовыми блоками, настраиваемые комбинации клавиш и цветовое выделение строк.
Delphi обладает мощнейшим, встроенным в редактор графическим отладчиком, позволяющим находить и устранять ошибки в коде. Вы можете установить точки останова, проверить и изменить переменные, при помощи пошагового выполнения в точности понять поведение программы. Если же требуются возможности более тонкой отладки, Вы можете использовать отдельно доступный Turbo Debugger, проверив ассемблерные инструкции и регистры процессора.
В состав RAD Pack входит эксперт для преобразования ресурсов, изготовленных в Borland Pascal 7.0, в формы Delphi. Уже появились эксперты, облегчающие построение DLL и даже написание собственных экспертов
2. СТРУКТУРА ПРОГРАММЫ
2.1 Описание процесса разработки
Процесс разработки программного комплекса реализующего задачи поставленные в задании к курсовому проекту начинается с создания нового проекта в среде программирования Delphi.
Главная форма программы содержит компоненты, необходимые для реализации пользовательского интерфейса, а также для выполнения иных необходимых функций:
- PageControl – компонент предназначен для создания многостраничного диалога: на одной странице будет расположен диалог расчета интегралов, а на второй – диалог построения графиков.
- MainMenu – главное меню программы.
- SavePictureDialog – диалог предназначенный для сохранения графических файлов (в программе используется для сохранения графика).
С помощью компонента PageControl реализуется многостраничный диалог. Первая страница диалога содержит компоненты:
- Panel – компонент используется в декоративных целях
- Label - служит для отображения текста на экране;
- ComboBox – служит для выбора информации из списка (используется для выбора подынтегральной функции)
- Edit – используется в программе для ввода значений (в программе используется для ввода численных значений)
- Button - позволяет выполнить какие-либо действия при нажатии кнопки во время выполнения программы (в программе по нажатию кнопок происходит расчет интегралов).
Вторая страница диалога содержит компонент:
- Image – компонент используется для построения графика.
В программе необходимо реализовать следующие функции:
1. Реализация подынтегральных функций (реализовано в functions.dll).
2. Реализация функции разбора произвольно заданных математических функций (реализовано в модуле evalcomp.pas)
3. Реализация численных методов вычисления интегралов методами трапеций и Симпсона (реализовано в integrals.dll).
4. Реализация функции построения графика (реализовано в модуле Chart.pas).
5. Реализация функции сохранения графика в файл (реализовано в модуле Chart.pas).
6. Реализация вызовов API функций
Кроме того необходимо создать справочную систему помогающую пользователям в процессе работы с программой
2.2 Функциональная схема программного комплекса
Укрупненная функциональная схема приложения изображена на рис. 2. Схема показывает взаимодействие основных элементов программы.
Рисунок 2 – Функциональная схема приложения
Стрелки на рисунке указывают взаимодействие элементов программы и операционной системы. В виде прямоугольников на схеме изображены элементы программы и ОС.
2.3 Реализация подынтегральных функций
Подынтегральные функции, которые необходимы для вычисления интегралов
и , заданных в задании к курсовому проекту реализованы в отдельной динамической библиотеке functions.dll. Данная библиотека динамически присоединяется к программе в процессе работы. Листингифункцийпредставленынарисунке3.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;
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.