РефератыИнформатика, программированиеПрПрограммная реализация разложения временного процесса в тригонометрический ряд

Программная реализация разложения временного процесса в тригонометрический ряд

Белорусский
национальный технический университет


Кафедра информационных
систем и технологий

ПОЯСНИТЕЛЬНАЯ
ЗАПИСКА


к
курсовому проекту (работе)


по
дисциплине «Конструирование программ и языки программирования»


Тема: ”Программная реализация разложения временного процесса
в тригонометрический ряд”


Исполнитель:_______________________


                            (подпись)


Студент 2 курса 417318 группы


Руководитель: _____________________ Гурский Н.Н.


                            (подпись)


Минск 2010


Содержание


Оглавление


Введение


1.
Математическая формулировка задачи


2.
Описание программы


2.1
Структурная схема программы


2.2
Описание разработанного класса


2.3
Описание реализации технологии COM


2.4
Описание динамических библиотек


2.5
Основные возможности программы


2.6
Средства использования сервисов, предоставляемых Microsoft Office


3.
Руководство пользователя


4.
Методика испытаний


Заключение


Литература


Приложение


Файл
проекта VremRiad.dpr


Файл
головного модуля UnitMain.pas


Файл
вывода графика UnitGraphic.pas


Файл
реализации класса - UnitRiad.pas


Файл
описания динамической библиотеки About.dpr


Файл
описания динамической библиотеки Prompt.dpr


Файл
проекта COM-сервера – MyServer.dpr


Файл
описания COM- класса – UComRiad.pas




Введение

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


Временной ряд — это
упорядоченная (по времени) последовательность значений некоторой произвольной
переменной величины. Каждое отдельное значение данной переменной называется
отсчётом временного ряда. Тем самым, временной ряд существенным образом
отличается от простой выборки данных.


Анализ временных рядов —
совокупность математико-статистических методов анализа, предназначенных для
выявления структуры временных рядов и для их прогноза. Сюда относятся, в
частности, методы регрессионного анализа. Выявление структуры временного ряда
необходимо для того, чтобы построить математическую модель того явления,
которое является источником анализируемого временного ряда. Прогноз будущих
значений временного ряда используется при принятии решений, например, в
экономике.


Временные ряды состоят из
двух элементов:


·         
периода времени,
за который или по состоянию на который приводятся числовые значения;


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


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



при заданных начальных
данных



Результаты отображаются в
виде таблицы и графиков, совмещенных в одной системе координат.


Для разработки программы
была выбрана среда визуального проектирования Borland Delphi 7.0. Она позволяет
за короткий промежуток времени и с наименьшими затратами физических и
умственных сил создавать прикладные программы различной направленности,
обеспечивая при этом наличие дружественного оконного интерфейса. Указанные (а
также ряд других) преимущества среды Delphi 7.0. обуславливают широкое её
использование при создании программного обеспечения разнообразного назначения.




1.
Математическая формулировка задачи

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



Начальные данные:



Вычисления необходимо провести для трех значений :


  


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




2.
Описание программы
 
2.1 Структурная схема программы

Структурно программа
состоит из главного модуля, модулей описания вспомогательных форм, динамических
библиотек, файлов помощи и обращений к другим программам. Связь модулей
приведена на рисунке 2.1.



Рисунок-2.1. Структурная
схема связей модулей программы


2.2 Описание
разработанного класса

В результате анализа
предметной области для её описания и моделирования был разработан класс TRiad, инкапсулирующий поля, методы и
свойства, применимые к рассматриваемому объекту.


TRiad = class
//класс


private


IniFile :
TIniFile; //Объект Ini-файла


w: integer;


public


Constructor
Create(AIniFileName : string);


Destructor Destroy;


procedure
Graphic(AChart:TChart); //Постоение графика


procedure
Table(AStringGrid:TStringGrid); //Вывод в таблицу


procedure
WriteToIniFile; //Запись в Ini-файл


procedure
ReadFromIniFile; //Чтение из Ini-файла


function GetW
: integer; //Получить w


procedure
SetW; //Установить w


function
F(w:integer;t:extended):extended;//Вычисление суммы


//property ww
: integer read GetW write SetW;


private


end;


Назначение полей и
инкапсулированных в классе процедур и функций (методов) приведено в
комментариях. Описание и реализация класса структурно оформлено в отдельном Unit – UnitRiad. Используемые секции public и private определяют области видимости элементов класса. Так,
видно, что все поля класса являются полностью закрытыми, а доступ к ним
организуется с помощью методов и свойств.


 
2.3 Описание реализации технологии COM

В соответствии с
требованиями на разработку данной курсовой работы была также реализована
возможность экспорта методов созданного класса с помощью технологии COM. Для
этого был создан сервер в виде DLL –
программный модуль MyServer.


library
MyServer;


{ 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,


 ComServ,


 UComRiad in
'UComRiad.pas',


 UCom_Tlb in
'UCom_Tlb.pas',


 Classes,


 MyServer_TLB
in 'MyServer_TLB.pas';


exports


DllGetClassObject,


DllCanUnloadNow,


DllRegisterServer,


DllUnregisterServer;


{$R *.TLB}


{$R *.res}


begin


end.


Этот сервер позволяет
создать COM-объект, описание класса которого находится в модуле UСomRiad. Следует заметить, что данный класс
полностью соответствует, приведенному в п.2.2 классу TRiad и имеет и такое же название, т.е. он является его копией,
за исключение конструктора Create, который заменен обычной процедурой.
Непосредственный доступ к открытым элементам COM-класса осуществляется с
помощью интерфейса IcomRiad,
описанного в модуде UCom_Tlb.


 
2.4 Описание динамических библиотек

При разработке приложения
были реализованы 2 динамические библиотеки.


Динамическая библиотека Prompt.dll содержит заставку, появляющуюся после запуска
программы, но до появления главного окна.


Библиотека содержит 1
экспортируемую процедуру ShowPrompt, служащую для отображения формы.


library
Prompt;


{ 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,


 Windows,


 UnitPrompt in
'UnitPrompt.pas' {FormPrompt};


{$R *.res}


//Показать
заставку


procedure
ShowPrompt(AOwner:TComponent);


var


Time:extended;


Form:TFormPrompt;


begin


Form:=TFormPrompt.Create(AOwner);
//Создать форму


Time:=GetTickCount/1000; //Запомнить время


Form.Show; //Показать форму


Form.Repaint; //Перерисовать форму


//Пока не вышел лимит
времени - ничего не делать


while
GetTickCount/1000<Time+4 do;


Form.Close; //Закрыть
форму


Form.Free; //Уничтожить форму


end;


exports ShowPrompt;


begin


end.


Библиотека About.dll содержит форму с информацией о программе.


library About;


uses


SysUtils,


Classes,


Forms,


UnitAbout in
'UnitAbout.pas' {FormAbout};


{$R *.res}


//Показать
форму


procedure
ShowAbout(AOwner:TComponent);


var


Form:TFormAbout;


begin


Form:=TFormAbout.Create(AOwner);
//Создать форму


Form.ShowModal; //Показать форму


Form.Free; //Уничтожить форму


end;


exports
ShowAbout;


begin


end.


Библиотека содержит
экспортируемую функцию ShowAbout для отображения формы.


 
2.5 Основные возможности программы

Программа начинается с
отображения оригинальной заставки (содержится в Prompt.dll), а затем на экране
появляется главное окно программы (модуль UnitMain). Главный модуль управляет
работой всех других модулей в соответствии с запросами пользователя.


Он содержит:


·         
Вызов окна «О
программе»;


·         
Вызов
презентации;


·         
Передачу данных в
Word и Excel;


·         
Вызов формы
«График»;


·         
Вызов окна
помощи;


·         
Сохранение данных
в Ini-файлах;


·         
Использование
возможностей разработанного COM-сервера;


Диалог с пользователем
поддерживается с помощью главного и выпадающего меню, панели инструментов,
кнопок и других интерфейсных элементов.


Окно «О программе»
содержит краткую информацию о приложении.


Окно «График» служит для
отображения информации в графической форме – в виде графиков.


В рамках данного проекта
также реализуется поддержка клиент-серверной технологии обмена данными между
приложениями.


Процесс логического
взаимодействия пользователя c программой, назначение элементов главного окна
описаны в «Руководстве пользователя».


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


2.6 Средства
использования сервисов, предоставляемых Microsoft Office

Кроме процедур и функций,
описанных в классах, программа обеспечивает взаимодействие с серверами
автоматизации приложений Microsoft Office. Так, следующие процедуры головного
модуля программы позволяют автоматически производить запуск MS Word, MS Excel,
Power Point и передавать им текстовую, табличную и графическую информацию с
целью создания отчетов или использование ее для дальнейшей обработки.


1. Procedure
TFormMain.ReportExcel(AStringGrid : TStringGrid). Данная процедура обеспечивает передачу
данных в Excel. Для формирования таблицы необходимо передать ссылку на
компонент типа TStringGrid, на основе данных которого будут заполнены ячейки в
Excel. Рисунок, помещаемый в отчет, совпадает с текущим видом графика.


2. Procedure TFormMain.ReportWord(AStringGrid:TStringGrid). Процедура позволяет создать отчет,
принятый в Word.


3. Procedure
TFormMain.PresentationClick(Sender: TObject). Активизация данной процедуры позволяет запустить
презентацию, которая может использоваться в рекламных и учебных целях.




3.
Руководство пользователя

Для активизации программы
необходимо вызвать файл VremRiad.exe.
При этом, на экране появится заставка, показанная на рисунке 3.1.



Рисунок 3.1 - Заставка
программы


После того как заставка
через несколько секунд исчезнет, появится главное окно программы (см. рисунок
3.2).



Рисунок 3.2 - Главное
окно программы


Как видно, данное окно
состоит из следующих частей:


·         
Главного меню;


·         
Панели
инструментов;


·         
Области ввода
данных;


·         
Области вывода
информации;


·         
Управляющих
кнопок.


Пункты главного меню
показаны на рисунке 3.3.



Рисунок 3.3 - Главное
меню программы


В свою очередь пункты
главного меню содержит ряд подпунктов, приведенных на рисунке 3.4.



Рисунок 3.4 - Пункт меню
«Файл»


При выборе пункта «Выход»
происходит завершение работы приложения.


Пункт меню «Вычислить»
обеспечивает разложение временного процесса в тригонометрический ряд при
заданном w и вывод соответствующей информации. Если w не задано, выводится
сообщение об ошибке (рисунок 3.5).



Рисунок 3.5 – Сообщение
об ошибке


Пункты «Отчет в Word» и
«Отчет в Excel» обеспечивают по желанию пользователя
формирование результатов расчетов в виде текстового документа в стиле редактора
Ms Word или в табличном процессоре MS Excel соответсвенно.


На рисунке 3.6 приведены
команды, вызываемые пунктом главного меню «Помощь».



Рисунок 3.6 - Пункт меню
«Помощь»


При выборе пункта меню
«Презентация» начинается просмотр возможностей программы под управлением Power
Point.


Выбор пункта меню
«Справка» приводит к появлению окна помощи, содержащим сведения о работе с
программой (см. рисунок 3.7)



Рисунок 3.7 - Окно
справочной системы


Выбор пункта главного меню
«О программе» позволяет получить на экране краткие сведения о программе в виде,
показанном на рисунке 3.8.



Рисунок 3.8 - Окно
«About»


Кроме главного меню
программа управляется также кнопками на панели инструментов, которые дублирует
наиболее важные пункты главного меню и предназначены для оперативного
выполнения основных команд:



Рисунок 3.9 - Панель
инструментов


Также имеется четыре
управляющие кнопки, показанные на рисунке 3.10.



Рисунок 3.10 -
Управляющие кнопки


Кнопка «Вычислить»
обеспечивает расчет состояния системы и вывод соответствующей информации.
Кнопка «График» обеспечивает появление окна с графиком, т.е. имеется
возможность просмотра результатов разложения временного процесса в
тригонометрический ряд при заданном значении w. Можно просмативать сразу как
несколько графиков (рисунок 3.11), так и один для определенного значения w (рисунок
3.12).



Рисунок 3.11 – График разложения
временного процесса в тригонометрический ряд при заданном значении w=3



Рисунок 3.12 – График
разложения временного процесса в тригонометрический ряд при заданном значении
w=3 и w=1


Кнопка «Очистить» очищает
область построения графиков. Для закрытия окна используется кнопка «Закрыть».


Для выхода из программы
следует нажать кнопку «Выход».




4.
Методика испытаний

Целью проведения
испытаний является проверка работоспособности (надежности) программы при
различных условиях ее функционирования.


Программа должна
обеспечивать корректность ввода исходных данных (путем осуществления
соответствующих проверок и информирования пользователя о возникших неточностях
в работе), а также получение непротиворечивого результата.


Для демонстрации
работоспособности программы необходимо провести ряд испытаний с различными
начальными условиями. Для обеспечения нормальной работы программы требуется
наличие соответствующих DLL, а также приложений Word, Excel, PowerPoint.


Для использования
COM-сервера, он должен быть предварительно зарегистрирован в системе. Тестовые
примеры выполнялись в среде операционной системы Windows XP Profesional при
использовании процессора Intel Pentium 4 2.4 GHz и разрешении экрана 1024*768.
Для работы с программой необходимо также наличие клавиатуры и манипулятора типа
«мышь».


Испытание проведем с
начальными данными, указанными в задании.


Начальные данные: при w=3



Результаты этого
вычислительного эксперимента приведены на рисунках 4.1, 4.2.



Рисунок 4.1 -Тестовая
таблица №1



Рисунок 4.2 - Тестовый
график №1


Если w не выбрано,
выводится сообщение об ошибке (рисунок 3.5).


Произведем также
испытание при других значениях исходных данных и с использованием
разработанного COM-объекта.


Начальные данные: при w=5



Полученные результаты



Рисунок 4.3 - Тестовый
график №2



Рисунок 4.4 - Тестовая
таблица №2


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




Заключение

В ходе выполнения
курсовой работы:


·         
были закреплены
знания по курсу «Конструирование программ и языки программирования»;


·         
приобретен опыт
при разработке объектно-ориентированных программ;


·         
изучены принципы
создания динамических библиотек;


·         
изучены и
реализованы способы создания клиент-серверных приложений на базе
COM-технологий;


·         
освоены методы
передачи данных между приложениями;


·         
изучены
возможности создания справочной системой высокой степени сложности и различных
форматов.


При разработке программы
использовался модульный принцип программирования. Такая структура программы
позволяет в дальнейшем модифицировать отдельные её части без нарушения
работоспособности и потери функциональности приложения.


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


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


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




Литература

1.   Фаронов В.В. Delphi 6. Учебный курс.-М.: Издатель Молгачева С.В.,
2001.-672с.


2.   Елмакова Н., Трепалин С., Тенцер А. Delphi 6 и технология COM.-СПб.: Питер, 2002. – 640 с.


3.   Федоров А.. Delphi 5.0 для всех. -М.:
Тоо фирма “КомпьютерПресс”, 1998. - 464 с.


4.   Марко Кэнту. Delphi 5 для профессионалов.-СПб.: Питер. 2001. – 944 с.


5.   Бобровский С. Delphi 5: учебный курс- СПб: Издательство
«Питер», 2000.- 640с.


6.   А.М.Епанешников, В.А.Епанешников
Программирование в среде Delphi.-М.:»Диалог
МИФИ», 1998.




Приложение
 
Файл проекта VremRiad.dpr

program VremRiad;


uses


 Forms,Windows,Classes,Dialogs,SysUtils,


 UnitMain in
'UnitMain.pas' {Form1},


 UnitRiad in
'UnitRiad.pas',


 UComRiad in
'UComRiad.pas',


 UCom_Tlb in
'UCom_Tlb.pas',


 UnitGraphic
in 'UnitGraphic.pas' {FormGraphic},


 VremRiad_TLB
in 'VremRiad_TLB.pas';


{$R *.TLB}


//******************************************


Type


//Процедурный тип для
функции, вызываемой из DLL


 TProc=procedure(AOwner:TComponent);


 Var


 Handle :
LongWord; //Дескриптор DLL


 ShowPrompt : tproc; //Переменная для функции


//*******************************************


 {$R *.res}


begin


 Application.Initialize;


//Загрузка
иконки


Application.Icon.LoadFromFile('Prompt.ico');


//*****Загрузка библиотеки
и показ заставки******//


Handle:=
LoadLibrary('Prompt.dll');


if Handle
<> 0 then


begin


//Получить адрес функции
из библиотеки


@ShowPrompt:=
GetProcAddress(Handle, PChar('ShowPrompt'));


ShowPrompt(Application);
//Показать заставку


FreeLibrary(Handle);
//Удалить библиотеку


end


else
ShowMessage('Не найдена библиотека Prompt.dll');


//***********************************************//


 Application.CreateForm(TForm1,
Form1);


 Application.CreateForm(TFormGraphic,
FormGraphic);


 Application.Run;


end.


Файл
головного модуля UnitMain.pas

unit UnitMain;


interface


uses


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


Dialogs,
StdCtrls, Menus, ToolWin, ComCtrls, XPMan, ImgList, Grids,


IniFiles,
Clipbrd, WordXP, Math, ShellAPI, ExtCtrls, msppt8,


UCom_Tlb,
ComObj, MSPpt2000, PowerPointXP, Activex, OleServer,


 Buttons;


type


 TForm1 =
class(TForm)


 Panel1:
TPanel;


 Panel2:
TPanel;


 Label1:
TLabel;


 Label2:
TLabel;


 Label3:
TLabel;


 Label4:
TLabel;


 Label5: TLabel;


 Label6:
TLabel;


 Label7:
TLabel;


 Label8:
TLabel;


 RadioGroup1:
TRadioGroup;


 BitBtn1:
TBitBtn;


 Panel3:
TPanel;


 BitBtn2:
TBitBtn;


 MainMenu1:
TMainMenu;


 N1:
TMenuItem;


 N2:
TMenuItem;


 N3:
TMenuItem;


 N4:
TMenuItem;


 N6:
TMenuItem;


 BitBtn3:
TBitBtn;


 N7:
TMenuItem;


 StringGrid1:
TStringGrid;


 Label9:
TLabel;


 Label10:
TLabel;


 BitBtn4:
TBitBtn;


 PowerPointApplication1:
TPowerPointApplication;


 Presentation:
TSpeedButton;


 N8:
TMenuItem;


 Word1:
TSpeedButton;


 Excel1:
TSpeedButton;


 N9:
TMenuItem;


 EXcel2:
TMenuItem;


 SpeedButton1:
TSpeedButton;


 SpeedButton2:
TSpeedButton;


 procedure
BitBtn3Click(Sender: TObject);


 procedure
FormActivate(Sender: TObject);


 procedure
BitBtn1Click(Sender: TObject);


 procedure
BitBtn4Click(Sender: TObject);


 procedure
BitBtn2Click(Sender: TObject);


 procedure
N4Click(Sender: TObject);


 procedure
PresentationClick(Sender: TObject);


 procedure
Word1Click(Sender: TObject);


 procedure
Excel1Click(Sender: TObject);


 procedure
SpeedButton2Click(Sender: TObject);


 // Procedure
TFormMain.PresentationClick(Sender: TObject);


 


 private


 { Private
declarations }


 public


IniFileName :
string; //Имя файла инициализации


procedure
ReportExcel(AStringGrid : TStringGrid); //Передать отчет в Excel


procedure
ReportWord (AStringGrid : TStringGrid); //Передать отчет в Word


 { Public
declarations }


 end;


var


 Form1:
TForm1;


 Flag : bool; //Флаг определения вида используемого объекта


 const x=1;


 const P=500;


 


 


implementation


uses UnitRiad,
UnitGraphic;


{$R *.dfm}


procedure
TForm1.BitBtn3Click(Sender: TObject);


begin


 Close;


end;


procedure
TForm1.FormActivate(Sender: TObject);


 var i:integer;


begin


 //По умолчанию
установить работу с обычным (классическим) объектом


 Flag:= false;


 //Имя Ini-файла сохранения параметров


 IniFileName:=
GetCurrentDir+'Riad.ini';


 //Создать обычный объект


 Riad:= TRiad.Create(IniFileName);


 //Считать данные из Ini-файла


 Riad.ReadFromIniFile;


 //Вычисление и вывод
данных в таблицу


 Riad.Table(StringGrid1);


<
p> StringGrid1.Cells[0,0]:='Номер'
;


 StringGrid1.Cells[1,0]:='Время(с)';


 StringGrid1.Cells[2,0]:='F{t}
при w=1';


 StringGrid1.Cells[3,0]:='F{t}
при w=3';


 StringGrid1.Cells[4,0]:='F{t}
при w=5';


 for i:=1 to
201 do


 StringGrid1.Cells[0,i]:=IntToStr(i)
;


 for i:=0 to
201 do


 begin


 StringGrid1.Cells[1,i+1]:=FloatToStr(0.5*i)


 end;


 label10.Caption:='';


end;


procedure
TForm1.BitBtn1Click(Sender: TObject);


 var
i:integer;


 begin


 Riad.SetW();


 //Вычисление и вывод данных в таблицу


 Riad.Table(StringGrid1);


 end;


procedure
TForm1.BitBtn4Click(Sender: TObject);


var i:integer;


begin


 for i:=0 to
201 do


 begin


 StringGrid1.Cells[2,i+1]:='';


 StringGrid1.Cells[3,i+1]:='';


 StringGrid1.Cells[4,i+1]:='';


 end;


end;


procedure
TForm1.BitBtn2Click(Sender: TObject);


begin


 


 FormGraphic.Show;


end;


procedure
TForm1.N4Click(Sender: TObject);


Type


//Процедурный тип для
вызова процедуры из DLL


TProc =
procedure(AOwner:TComponent);


var


Handle :
LongInt; //Дескриптор библиотеки


ShowAbout : TProc; //Переменая для вызова функции из DLLbegin


begin


//Получить значение
дескриптора загруженной библиотеки


Handle:=LoadLibrary('About.dll');


//Проверить существование
библиотеки


if Handle = 0
then


begin


ShowMessage('Библиотека
не найдена : About.dll');


exit;


end;


//Получить адрес
вызываемой функции


@ShowAbout:=
GetProcAddress(Handle, PChar('ShowAbout'));


//Вызов функции,
показывающей форму About


ShowAbout(Application);


FreeLibrary(Handle);
//Выгрузка библиотеки


end;


procedure
TForm1.PresentationClick(Sender: TObject);


var


name : string;


pw : TOleEnum;


begin


 //Запуск
презетации


Name:=
ExtractFileDir(Application.ExeName) + 'Vremennoj process.ppsx';


PowerPointApplication1.Activate;


PowerPointApplication1.Presentations.Open(Name,
pw, pw, pw);


PowerPointApplication1.Presentations.Item(1).SlideShowSettings.Run;


//Другой
способ запуска


//
ShellExecute(Application.MainForm.Handle,PChar('Open'),


//
PChar('Riad.pps'), NIL, PChar(''), sw_ShowNormal);


end;//TFormMain.PresentationClick


procedure
TForm1.Word1Click(Sender: TObject);


begin //Отчет
в Word


ReportWord(StringGrid1);


end;//TFormMain.Word1Click


Procedure
TForm1.ReportExcel(AStringGrid : TStringGrid);


//Отчет в
Excel


var


Excel :
variant;


WorkBook :
variant; //Рабочая книга


i, j :
integer;


begin


//Cоздать
форму для графика


FormGraphic:=
TFormGraphic.Create(Form1);


//Создать
Соm-объект


Excel:=
CreateOleObject('Excel.Application');


//Отключить реакцию на
внешние события-для ускорения процесса передачи данных


Excel.Application.EnableEvents:=
false;


//Добавить
рабочую книгу


WorkBook:=
Excel.WorkBooks.Add;


//Изменение
ширины столбцов


for j:=0 to
AStringGrid.ColCount do


WorkBook.WorkSheets[1].Columns[j+1].ColumnWidth:=
10;


//Вывод строки


WorkBook.WorkSheets[1].Cells[1,1]:=
'Отчет о колебаниях стержня';


//Заполнение ячеек
таблицы Excel значениями из StringGrid


//Нумерация ячеек в Excel начинается с 1 и идет в формате
строка-столбец


for i:= 1 to
AStringGrid.RowCount + 1 do


for j:= 0 to
AStringGrid.ColCount do


WorkBook.WorkSheets[1].Cells[i+1,
j+1]:= AStringGrid.Cells[j, i-1];


//Вставит
изображение графика в Excel


WorkBook.WorkSheets[1].Shapes.AddPicture(GetCurrentDir+'PictureWord.bmp',


True, True, 0,
(AStringGrid.RowCount+2)*12.5+10, FormGraphic.Chart1.Width*0.8,


FormGraphic.Chart1.Height*0.8);


//Уничтожить
форму


FormGraphic.Release;


FormGraphic:=
NIL;


//Показать
Excel


Excel.Visible:=true;


end;//TFormMain.ReportExcel


Procedure
TForm1.ReportWord(AStringGrid : TStringGrid);


//Отчет в Word


var


i,j,k :
integer;


a,b,c :
OleVariant;


wa :
TWordApplication; //WordApplication


wd :
TWordDocument; //WordDocument


begin


//Создать
форму для графика


FormGraphic:=
TFormGraphic.Create(Form1);


//Создать
com-объект


wa:=
TWordApplication.Create(Form1);


//Подключиться к серверу Word


wa.Connect;


//Добавить новый документ


wa.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);


wd:=
TWordDocument.Create(Form1);


wd.ConnectTo(wa.ActiveDocument);


//Отменить
проверку правописания


wa.Options.CheckSpellingAsYouType:=False;


//Отменить
проверку орфографии


wa.Options.CheckGrammarAsYouType:=False;


a:= 0;


b:= 0;


wd.Range.InsertAfter('Отчет');


c:=
Length(wd.Range.Text) - 1;


a:= c;


b:= c + 10;


//Добавить таблицу


wd.Tables.Add(wd.Range(a),
AStringGrid.RowCount,


AStringGrid.ColCount,
EmptyParam, EmptyParam);


k:= 1;


//Перенести данные из StringGrid в таблицу


for i:= 1 to
AStringGrid.RowCount do


for j:= 1 to
AStringGrid.ColCount do


wd.Tables.Item(k).Cell(i,j).Range.Text:=
AStringGrid.Cells[j-1, i-1];


//Загрузить
изображение в Image


FormGraphic.Image1.Picture.LoadFromFile('PictureWord.bmp');


//Поместить
изображение в буфер обмена


Clipboard.Assign(FormGraphic.Image1.Picture);


c:=
Length(wd.Range.Text) - 1;


a:= c;


//Вставить изображение из
буфера обмена


wa.Selection.Paste;


//Показать
Word


wa.Visible:=
true;


//Уничтожить
форму


FormGraphic.Release;


FormGraphic:=
NIL;


end;//TFormMain.ReportWord


procedure
TForm1.Excel1Click(Sender: TObject);


begin


 ReportExcel(StringGrid1);


 end;


procedure
TForm1.SpeedButton2Click(Sender: TObject);


begin


 WinExec('hh.exe
1.chm',SW_SHOW);


end;


end.


Файл
вывода графика UnitGraphic.pas

unit
UnitGraphic;


interface


uses


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


 Dialogs,
TeEngine, Series, StdCtrls, ExtCtrls, TeeProcs, Chart, XPMan,


 TeeFunci,
Buttons;


type


 TFormGraphic
= class(TForm)


 Chart1:
TChart;


 Button1:
TButton;


 XPManifest1:
TXPManifest;


 Series1:
TLineSeries;


 Series2:
TLineSeries;


 TeeFunction1:
TAddTeeFunction;


 Series3:
TLineSeries;


 Image1:
TImage;


 BitBtn1:
TBitBtn;


 BitBtn2:
TBitBtn;


 BitBtn3:
TBitBtn;


 BitBtn4:
TBitBtn;


 procedure
Button1Click(Sender: TObject);


 procedure
BitBtn1Click(Sender: TObject);


 procedure
BitBtn2Click(Sender: TObject);


 procedure
BitBtn3Click(Sender: TObject);


 procedure
BitBtn4Click(Sender: TObject);


 private


 { Private
declarations }


 public


 { Public
declarations }


 end;


var


 FormGraphic:
TFormGraphic;


implementation


uses UnitRiad;


{$R *.dfm}


procedure
TFormGraphic.Button1Click(Sender: TObject);


begin


Chart1.Series[0].Clear;


Chart1.Series[1].Clear;


Chart1.Series[2].Clear;


Close;


end;//TFormGraphic.Button1Click


procedure
TFormGraphic.BitBtn1Click(Sender: TObject);


begin


 Riad.Graphic1(FormGraphic.Chart1);


end;


procedure
TFormGraphic.BitBtn2Click(Sender: TObject);


begin


 Riad.Graphic2(FormGraphic.Chart1);


end;


procedure
TFormGraphic.BitBtn3Click(Sender: TObject);


begin


 Riad.Graphic3(FormGraphic.Chart1);


end;


procedure
TFormGraphic.BitBtn4Click(Sender: TObject);


begin


Chart1.Series[0].Clear;


Chart1.Series[1].Clear;


Chart1.Series[2].Clear;


end;


end.


end.


Файл реализации
класса - UnitRiad.pas

unit UnitRiad;


interface


uses Chart,
Series, Math, Grids, SysUtils, Types, Graphics, IniFiles, Messages, Dialogs,
StdCtrls, Variants, Classes, Controls, Forms,


 ExtCtrls,
Buttons, Menus;


Type


TRiad = class
//класс


private


IniFile :
TIniFile; //Объект Ini-файла


w: integer;


public


Constructor
Create(AIniFileName : string);


Destructor
Destroy;


procedure
Graphic1(AChart:TChart); //Постоение графика


procedure
Graphic2(AChart:TChart); //Постоение графика


procedure
Graphic3(AChart:TChart); //Постоение графика


procedure
Table(AStringGrid:TStringGrid); //Вывод в таблицу


procedure
WriteToIniFile; //Запись в Ini-файл


procedure
ReadFromIniFile; //Чтение из Ini-файла


function GetW
: integer; //Получить w


procedure
SetW; //Установить w


function
F(w:integer;t:extended):extended;//Вычисление суммы


//property ww
: integer read GetW write SetW;


private


end;


var


Riad : TRiad;
//Объект


implementation


uses UnitMain,
UnitGraphic;


const P=500;


const x=1;


const
TimeStart=0; //Время начала отсчета


const TimeEnd=100; //Время окончания отсчета


const TimeStep=0.5; //Шаг дискретизация времени


Constructor
TRiad.Create(AIniFileName : string);


begin


//Создать
объект Ini-файла


IniFile:=
TIniFile.Create(AIniFileName);


end;//TRiad.Create


Destructor
TRiad.Destroy;


begin


//Удалить из Heap объект Ini-файла


if
Assigned(IniFile) then


begin


IniFile.Free;


IniFile:= NIL;


end;


end;//TRiad.Create


procedure
TRiad.Graphic1(AChart : TChart);


//Построение
графика


var


time :
extended;


Y: extended;


begin


Time:=
TimeStart;


AChart.Series[0].Clear;
//Очистить Series[0]


AChart.BottomAxis.Increment:=
Floor((TimeEnd - TimeStart) / 5);


//Занести
значения в Series


while(time
<= TimeEnd) do


begin


Y:= F(1,time);


AChart.Series[0].AddXY(time,
Y);


time:= time +
TimeStep / 4;


end;


end;//TRiad.Graphic1


procedure
TRiad.Graphic2(AChart : TChart);


//Построение
графика


var


time :
extended;


Y: extended;


begin


Time:=
TimeStart;


AChart.Series[1].Clear;
//Очистить Series[0]


AChart.BottomAxis.Increment:=
Floor(( TimeEnd- TimeStart) / 5);


//Занести
значения в Series


while(time
<= TimeEnd) do


begin


Y:= F(3,time);


AChart.Series[1].AddXY(time,
Y);


time:= time +
TimeStep / 4;


end;


end;//TRiad.Graphic2


procedure
TRiad.Graphic3(AChart : TChart);


//Построение
графика


var


time :
extended;


Y: extended;


begin


Time:=
TimeStart;


AChart.Series[2].Clear;
//Очистить Series[0]


AChart.BottomAxis.Increment:=
Floor((TimeEnd - TimeStart) / 5);


//Занести
значения в Series


while(time
<= TimeEnd) do


begin


Y:= F(5,time);


AChart.Series[2].AddXY(time,
Y);


time:= time +
TimeStep / 4;


end;


end;//TRiad.Graphic3


function
TRiad.F(w : integer;t : extended) : extended;


//вычисление функции


var


j:integer;


begin


 F:=(2*P/x)*(sin(w*t)-1/2*sin(2*w*t)+1/3*sin(3*w*t)-1/4*sin(4*w*t))


end;//TRiad.F


procedure
TRiad.Table(AStringGrid : TStringGrid);


//Вывод информации в
таблицу


var


k : integer;


time :
extended;


y: extended;


begin


k:= 0;


time:=
TimeStart;


 if w=1 then


while (time
<= TimeEnd) do


begin


inc(k);


y:= F(w,
time);


Form1.StringGrid1.Cells[2,k]:=
FloatToStrF(y , ffFixed, 5, 3);


time:= time +
TimeStep;


end


 else if w=3
then


while (time
<= TimeEnd) do


begin


inc(k);


y:= F(w,
time);


Form1.StringGrid1.Cells[3,k]:=
FloatToStrF(y , ffFixed, 5, 3);


time:= time +
TimeStep;


end


 else if w=5
then


while (time
<= TimeEnd) do


begin


inc(k);


y:= F(w,
time);


Form1.StringGrid1.Cells[4,k]:=
FloatToStrF(y , ffFixed, 5, 3);


time:= time +
TimeStep;


end ;


end;//TRiad.Table


procedure
TRiad.WriteToIniFile;


//запись в
Ini-файл


begin


IniFile.WriteInteger('Parameters',
'W', W);


IniFile.UpdateFile;//очистка буфера и запись файла на
диск


end;//TRiad.WriteToIniFile


procedure
TRiad.ReadFromIniFile;


//чтение из
Ini-файла


begin


W:=
IniFile.ReadInteger('Parameters', 'W', w);


end;//TRiad.ReadFromIniFile


function
TRiad.GetW :integer;


begin


 result:= W;


end;//TRiad.GetW


procedure
TRiad.SetW;


begin


if
Form1.RadioGroup1.ItemIndex=-1 then


 MessageDlg(Pchar('Не
выбрано значение w!!!'),mtError,[mbOk],0);


 if
Form1.RadioGroup1.ItemIndex =0 then


 begin


 Form1.Label10.Caption:='1';


 w:=1;


 end


 else if
Form1.RadioGroup1.ItemIndex =1 then


 begin


 Form1.label10.Caption:='3';


 w:=3;


 end


 else


 begin


 Form1.label10.Caption:='5';


 w:=5;


 end ;


 end;//TRiad.SetW


end.


Файл
описания динамической библиотеки About.dpr


library About;


{ 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,


 Forms,


 UnitAbout in
'UnitAbout.pas' {FormAbout};


{$R *.res}


 //показать форму


procedure
ShowAbout(AOwner:TComponent);


var


Form:TFormAbout;


begin


Form:=TFormAbout.Create(AOwner);
//создать форму


Form.ShowModal;
//показать форму


Form.Free; //уничтожить
форму


end;


exports
ShowAbout;


begin


end.


unit
UnitAbout;


interface


uses


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


 Dialogs,
StdCtrls, ExtCtrls, XPMan, Buttons;


type


 TFormAbout =
class(TForm)


 Image1:
TImage;


 Label1:
TLabel;


 Label2:
TLabel;


 Label3:
TLabel;


 Label4:
TLabel;


 BitBtn1:
TBitBtn;


 Label5:
TLabel;


 XPManifest1:
TXPManifest;


 procedure
BitBtn1Click(Sender: TObject);


 private


 { Private
declarations }


 public


 { Public
declarations }


 end;


var


 FormAbout:
TFormAbout;


implementation


{$R *.dfm}


procedure
TFormAbout.BitBtn1Click(Sender: TObject);


begin


 Close;


end;


end.


Файл описания динамической библиотеки Prompt.dpr


library
Prompt;


{ 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,


 Windows,


 UnitPrompt in
'UnitPrompt.pas' {FormPrompt};


{$R *.res}


//Показать заставку


procedure
ShowPrompt(AOwner:TComponent);


var


Time:extended;


Form:TFormPrompt;


begin


Form:=TFormPrompt.Create(AOwner);
//Создать форму


Time:=GetTickCount/1000; //Запомнить
время


Form.Show; //Показать
форму


Form.Repaint; //Перерисовать
форму


//Пока не вышел лимит
времени - ничего не делать


while
GetTickCount/1000<Time+4 do;


Form.Close; //Закрыть форму


Form.Free; //Уничтожить
форму


end;


exports
ShowPrompt;


begin


end.


unit
UnitPrompt;


interface


uses


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


 Dialogs,
ExtCtrls, XPMan;


type


 TFormPrompt =
class(TForm)


 XPManifest1:
TXPManifest;


 Image1:
TImage;


 private


 { Private
declarations }


 public


 { Public
declarations }


 end;


var


 FormPrompt:
TFormPrompt;


implementation


{$R *.dfm}


end.


Файл проекта COM-сервера – MyServer.dpr


library
MyServer;


{ 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,


 ComServ,


 UComRiad in
'UComRiad.pas',


 UCom_Tlb in
'UCom_Tlb.pas',


 Classes,


 MyServer_TLB
in 'MyServer_TLB.pas';


exports


DllGetClassObject,


DllCanUnloadNow,


DllRegisterServer,


DllUnregisterServer;


{$R *.TLB}


{$R *.res}


begin


end.




Файл описания
COM- класса – UComRiad.pas


unit UComRiad;


{$WARN
SYMBOL_PLATFORM OFF}


interface


uses


Windows,
ActiveX, Classes, ComObj, Chart, Grids, Math, SysUtils, IniFiles,


UCom_Tlb,
ExtCtrls;


type


TRiad =
class(TComObject, IComRiad)


protected


IniFile :
TIniFile; //Объект Ini-файла


w : integer;


public


Procedure
Create(AIniFileName : string); stdcall;


Destructor
Destroy;


procedure
Graphic(AChart:TChart); stdcall; //Постоение графика


procedure
Table(AStringGrid:TStringGrid); stdcall; //Вывод в таблицу


procedure
WriteToIniFile; stdcall; //Запись в Ini-файл


procedure
ReadFromIniFile; stdcall; //Чтение из Ini-файла


function GetW
: integer; stdcall; //Получить w


procedure
SetW; stdcall; //Установить w


function
F(w:integer; t:extended):extended;stdcall;//Вычисление суммы


private


end;


implementation


uses ComServ,
Dialogs, Graphics, UnitMain;


const P=500;


const x=1;


const
TimeStart=0; //Время начала
отсчета


const TimeEnd=100;
//Время окончания отсчета


const TimeStep=0.5; //Шаг
дискретизация времени


Procedure
TRiad.Create(AIniFileName : string);


begin


//Создать объект
Ini-файла


IniFile:=
TIniFile.Create(AIniFileName);


end;//TRod.Create


Destructor
TRiad.Destroy;


begin //Не используется


//Удалить из Heap объект
Ini-файла


if
Assigned(IniFile) then


begin


IniFile.Free;


IniFile:= NIL;


end;


end;//TRod.Create


procedure
TRiad.Graphic(AChart : TChart);


//Построение графика


var


time :
extended;


Y1, Y2 :
extended;


begin


Time:=
TimeStart;


AChart.Series[0].Clear;
//Очистить Series[0]


AChart.Series[1].Clear;
//Очистить Series[1]


AChart.BottomAxis.Increment:=
Floor((TimeEnd - TimeStart) / 5);


//Занести значения в Series


while(time
<= TimeEnd) do


begin


Y1:=
F(w,time);


Y2:=
F(w,time);


AChart.Series[0].AddXY(time,
Y1);


AChart.Series[1].AddXY(time,
Y2);


time:= time +
TimeStep / 4;


end;


end;//TRiad.Graphic


function
TRiad.F(w : integer;t : extended) : extended;


//вычисление функции


var


j:integer;


begin


 F:=(2*P/x)*(sin(w*t)-1/2*sin(2*w*t)+1/3*sin(3*w*t)-1/4*sin(4*w*t))


end;//TRiad.F


procedure
TRiad.Table(AStringGrid : TStringGrid);


//Вывод информации в
таблицу


var


k : integer;


time :
extended;


y: extended;


begin


k:= 0;


time:=
TimeStart;


while (time
<= TimeEnd) do


begin


inc(k);


y:= F(w,
time);


Form1.StringGrid1.Cells[2,k]:=
FloatToStrF(y , ffFixed, 5, 3);


time:= time +
TimeStep;


end;


end;//TRiad.Table


procedure
TRiad.WriteToIniFile;


//запись в Ini-файл


begin


IniFile.WriteInteger('Parameters',
'W', W);


IniFile.UpdateFile;//очистка
буфера и запись файла на диск


end;//TRiad.WriteToIniFile


procedure
TRiad.ReadFromIniFile;


//чтение из Ini-файла


begin


W:=
IniFile.ReadInteger('Parameters', 'W', w);


end;//TRiad.ReadFromIniFile


function
TRiad.GetW :integer;


begin


 result:= W;


end;//TRiad.GetW


procedure
TRiad.SetW;


begin


if
Form1.RadioGroup1.ItemIndex=-1 then


 MessageDlg(Pchar('Не выбрано значение w!!!'),mtError,[mbOk],0);


 if
Form1.RadioGroup1.ItemIndex =0 then


 begin


 Form1.Label10.Caption:='1';


 w:=1;


 end


 else if
Form1.RadioGroup1.ItemIndex =1 then


 begin


 Form1.label10.Caption:='3';


 w:=3;


 end


 else


 begin


 Form1.label10.Caption:='5';


 w:=5;


 end ;


 end;//TRiad.SetW


initialization


TComObjectFactory.Create(ComServer,
TRiad, Class_ServerRiad,


'ServerRiad',
'', ciMultiInstance, tmApartment);


end.


Файл
библиотеки типов COM- класса – Ucom_Tlb.pas


unit UCom_Tlb;


interface


uses Chart,
Grids, StdCtrls, ExtCtrls;


const


Class_ServerRiad:
TGUID = '{1CB7B26E-5BAF-4BA7-8F17-EA174D7CD750}';


Type


IComRiad =
interface


['{1326DD83-DB3E-4054-9572-CFB9EAE3FE95}']


Procedure
Create(AIniFileName : string); stdcall;


procedure
Graphic(AChart:TChart); stdcall; //Постоение графика


procedure
Table(AStringGrid:TStringGrid); stdcall; //Вывод в таблицу


procedure
WriteToIniFile; stdcall; //Запись в Ini-файл


procedure
ReadFromIniFile; stdcall; //Чтение из Ini-файла


function Getw
: integer; stdcall; //Получить w


procedure
Setw; stdcall; //Установить w


function
F(w:integer; t:extended):extended;stdcall;//Вычисление суммы


end;


implementation


end.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Программная реализация разложения временного процесса в тригонометрический ряд

Слов:4530
Символов:59417
Размер:116.05 Кб.