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

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Курсовая работа

по дисциплине

Конструирование программ и языки программирования

на тему

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

Введение

Целью курсовой работы по дисциплине: «Конструирование программ и языки программирования» на тему «Разработка приложения колебаний массы с гидравлическим демпфером» является разработка программного обеспечения для компьютера, с помощью которого будет производится расчет временного поведения системы.

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

Delphi — это современный программный продукт, позволяющий создавать широкий спектр приложений для среды Microsoft Windows. Он объединяет в себе высокопроизводительный компилятор с языка ObjectPascal, являющийся объектно-ориентированным расширением структурного языка третьего поколения Pascal, средств наглядного (визуального) создания программ и масштабируемую технологию управления БД. Основное назначение Delphi — служить средством для быстрого создания широкого класса Windows-приложений, включая приложения, отвечающие технологии распределенной обработки данных, называемой технологией клиент-сервер.

Для разработки Windows-приложений Delphi имеет следующие средства:

-высокопроизводительный компилятор

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

-быстрая среда разработки (RAD)

-расширяемость

-средства для построения БД

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

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

Принципиальная схема гидравлического демпфера или катаракта приведена на рисунке 1.

Рисунок 1 — Расчетная схема гидравлического демпфера

Демпфер состоит из наполненного вязкой жидкостью цилиндра D, в котором движется поршень Р с отверствиями А. Поршень штоком В соединен с массой m, вес которой G=mg. Масса m подвешена на пружине С.

Уравнение колебаний массы имеет вид

Сопротивление, встречаемое поршнем при движении его в цилиндре (так называемое вязкое трение), пропорционально первой степени скорости, причем q есть расстояние центра тяжести системы Р, В, m от положения равновесия. Наиболее сложной частью расчета является определение величины коэффициента c, зависящего от многих факторов. Здесь следует

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

где

коэффициент вязкости (),

длина отверствий, А (м),

диаметр отверствий (м),

площадь поршня (),

число отверствий.

Если вес всей колеблющейся системы (груз, поршень и поршневой шток), диаметр поршня (м), то

Введя обозначения масса равная сумме массы m, массы штока и массы поршня, жесткость пружины), запишем уравнение (1) в виде

(2)

Решение уравнения (2) будет иметь различную форму в зависимости от соотношений

Первый случай: (случай «малого» сопротивления).

Решение уравнения (2) представляется в виде

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

Второй случай: (случай «большого» сопротивления).

Решение уравнения (2) имеет вид:

(4)

где

Третий случай:

Решением уравнения (1) будет

(5)

Где.

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

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

Программа состоит из следующих модулей:

Project1. dpr — модуль проекта.

Unit1 — модуль содержащий описание класса главной формы программы, и описание методов работы формы.

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

Kursuv_class — модуль созданного класса с закрытыми полями, и методами для работы с данным классом.

ProjectDLL. dll — динамически подключаемая библиотека, содержащая форму окна «О программе», вызываемой из главного окна программы.

В программе реализованы следующие классы:

Класс TForm1 — от родительского класса TForm, содержит необходимые поля и методы для работы главной формы программы.

Основные поля класса:

MainMenu1 — главное меню.

StringGrid1 — таблица для вывода результатов вычислений.

Edit100 … 113 — поля для ввода исходной информации в программу.

StatusBar1 — строка состояние, отображающая справочную контекстную информацию.

ToolBar1 — панель кнопок.

Chart1 — область построения диаграмм на форме программы.

Series1 — график диаграммы.

Основные методы класса:

procedure N5Click (Sender: TObject) — обработка нажатий на пункты меню.

procedure ToolButton1Click (Sender: TObject) — обработка нажатий на кнопки на панели.

procedure FormShow (Sender: TObject) — отображение заставки на экране.

procedure ShowHint (Sender: TObject) — обработка показываний контекстной помощи (подсказки).

function Proverka (Sender: TObject): boolean — функция проверки на заполнение полей исходными данными.

Класс TLogo — от родительского класса TForm, содержит является окном заставки показываемой перед запуском основной формы программы.

Основные поля класса:

Image1 — рисунок заставки.

Label1 — текстовые поля со статической информацией.

Timer1 — таймер с отсчетом времени для показа заставки.

Методы класса:

procedure Timer1Timer (Sender: TObject) — метод отсчет таймера, по завершению которого форма (заставка) закрывается

procedure FormCreate (Sender: TObject) — при создании формы, автоматически срабатывает таймер, и форма закрывается по истечению времени.

procedure FormKeyPress (Sender: TObject; var Key: Char) — обработка нажатия клавиш на клавиатуре, при нажатии клавиши заставка закрывается.

Класс TKurs — разработанный класс для вычисления в заданный промежуток времени поведения системы с одной степенью свободы под действием нагрузки треугольного вида.

Поля класса (все поля типа double):

t0 — начальное значение времени,

ti — промежуточные значения времени,

tk — конечное значение периода времени,

k — упругость пружины,

m — масса груза,

u — коэффициент вязкости жидкости,

l — длина отверстий в поршне,

q — площадь поршня,

H — диаметр порщня,

m1 — масса штока,

m2 — масса поршня,

q0 — расстояние центра тяжести системы,

z — число отверстий,

d — диаметр отверстий,

hag — приращение (шаг) времени.

Методы класса:

function g_f (t: double): double — функция вычисления значения системы при заданном значении времени.

procedure Create — запись информации в поля класса;

procedure ReadIniFile — чтение ini файла;

procedure WriteIniFile — запись в ini файл;

procedure Raszet — произведение вычислений изменения системы и занесение информации в таблицу результатов главной формы;

procedure Draw — рисование на главной форме графика поведения системы относительно времени.

В программе реализована одна динамическая библиотека ProjectDLL. dll, в ней содержится окно «О программе». Библиотека имеет одну процедуру, которая доступна для использования из библиотеки и одну функцию которая посчитывает значение переменной n используемой при расчетах в программе.

procedure ShowAbout (Handle: THandle) stdcall; - процедура отображения окна «О программе».

function N_dann (u, l, Q_, z, H, d: double):double; - функция подсчета значения переменной n.

Работа программы выполняется следующим образом: при создании главное формы на экран выводится заставка, форма модуля Unit2. pas, которая по истечению 5 секунд, либо по нажатию клавиши, исчезает. Запускается главная форма, модуль Unit1. pas. Далее ожидаются действия пользователя. Пользователь должен ввести исходные данные, либо выбрать метод чтения данных из ini файла. Данные заносятся в создаваемый класс TKurs, модуля Kursuv_class. pas. Далее при выборе пользователя метода вычислить производится запуск метода Raszet, который выводит полученную информацию в таблицу. Затем метод Draw класса TKurs рисует график изменения поведения системы. При вызове окна «О программе», подключается динамическая библиотека ProjectDLL. dll из которой процедурой ShowAbout (Handle: THandle) отображается окно «О программе».

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

Работа программы начинается с запуска приложения Project1. exe. Пользователю сперва показывается заставка программы, которая сама пропадет через 5 секунд после появления, либо можно закрыть ее нажатием клавиши на клавиатуре. После чего появляется главная форма программы. Дальнейшие действия пользователя — заполнить данными поля «Исходные данные», исходные данные возможно взять из ini файла, для этого пользователю необходимо выбрать пункт меню Файл / Данные из *. ini. Данные берутся из файла ini. ini находящегося в папке Windows, если данный файл не найден, либо испорчен, данные автоматически записываются все единицами. Далее пользователь выбирает пункт меню Данные / Вычислить, происходит вычисления значений изменений системы относительно времени и занесение данных в таблицу. Данные / График происходит построение графического изображения изменения системы относительно времени.

Пункты меню программы:

Файл / Данные из *. ini. — читать данный из файла ini. ini в папке Windows.

Файл / Сохранить в *. ini — записывает исходные данные в файл ini. ini в папку Windows.

Файл / Выход — выход из программы.

Данные / Вычислить — происходит вычисления значений изменений системы относительно времени и занесение данных в таблицу.

Данные / График — происходит построение графического изображения изменения системы относительно времени.

Данные / Очистить / Все — все поля, таблицу значений и график

Данные / Очистить / Исходные данные — очищает поля с исходными данными

Данные / Очистить / Таблицу значений — очищает значения функции занесенные в таблицу.

Данные / Очистить / График — стирает изображение графика.

Документы / Пояснительная записка — отрывается пояснительная записка данного курсового проекта.

Документы / Презентация — в PowerPoint открывается презентация на данное программное средство.

Документы / Данные в Excel — заносятся данные полученный при выполнении вычислений в книгу Microsoft Excel.

Справка / Содержание — справочная информация по использованию данного программного средства.

Справка / Заставка — запускается заставка.

Справка / О программе — открывается диалоговое окно «О программе».

На рисунке 3 изображена кнопочная панель для удобства использования программного средства.

Рис. 3 Кнопочная панель

Значение кнопок с лева на право следующее:

1 — Читать данный из файла ini. ini в папке Windows.

2 — Записывает исходные данные в файл ini. ini в папку Windows.

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

4 — График — происходит построение графического изображения изменения системы относительно времени.

5 — Очистить — все поля, таблицу значений и график.

6 — Пояснительная записка — отрывается пояснительная записка данного курсового проекта.

7 — Презентация — в PowerPoint открывается презентация на данное программное средство.

8 — Данные в Excel — заносятся данные полученный при выполнении вычислений в книгу Microsoft Excel.

9 — справочная информация по использованию данного программного средства.

10 — Заставка — запускается заставка.

11 — О программе — открывается диалоговое окно «О программе».

12 — Выход из программы.

4. Тестирование программного средства

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

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

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

— процессор AMD Duron 800MGh;

— 128 Mb оперативной памяти SDRAM;

— видеокарта GeForce 4MX 64 Mb памяти;

— 20 Gb винчестер Samsung SP0212N, из них на системном диске свободны 200 Mb для размещения файла виртуальной памяти;

— CD-RW Teac CRX, который используется для инсталляции программы;

— 3,5″ флоппи-дисковод, который также может быть использован для установки приложения;

— 17″ монитор с разрешением 1024×768 и глубиной цвета 32 бита на пиксель;

— операционная система Windows XP.

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

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

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

После тестирования были построены финальная версия программы и программа-установщик. Данное приложение готово к использованию.

В ходе испытаний была доказана полная совместимость и правильность работы программного средства с Windows ХР.

Заключение

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

Программный продукт реализован на языке высокого уровня Borland Delphi 7.0.

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

программа гидравлический демпфер delphi

Список использованной литературы

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

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

3. Гринчишин Я. Т. и др. Алгоритмы и программы на Бейсике: Учеб. Пособие для студентов пед. Ин-тов по физ. -мат. Спец. /Я.Т. Гринчишин, В. И. Ефимов, А. Н. Ломакович. -М.: Просвещение, 1988.- 160 с.

4. Дарахвелидзе П. Г., Марков Е. П. Delphi 4. -СПб.: БХВ-Санкт-Петербург, 1999.- 816 с.

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

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

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

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

Приложения

Листинг программных модулей

// Project1. dpr — файл проекта.

program Project1;

uses

Forms,

Unit1 in 'Unit1. pas' {Form1},

Unit2 in 'Unit2. pas' {Logo},

Kursuv_class in 'Kursuv_class. pas';

{$R *. res}

begin

Application. Initialize;

Application. CreateForm (TForm1, Form1);

Application. CreateForm (TLogo, Logo);

Application. Run;

end.

// Unit1. pas — главная форма программы.

// главная форма программы.

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, Buttons, Menus, ToolWin, ActnMan, ActnCtrls, Grids, IniFiles,

Kursuv_class, ComCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart,

ImgList, PowerPointXP, ExcelXP, OleServer, WordXP, ComObj, ActiveX, ShellAPI;

// процедура вызова окна о программе из DLL

procedure ShowAbout (Handle: THandle) stdcall;

function N_dann (u, l, Q_, z, H, d: double):double;

type

TForm1 = class (TForm)

BitBtn1: TBitBtn;

MainMenu1: TMainMenu;

PopupMenu1: TPopupMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

StringGrid1: TStringGrid;

GroupBox1: TGroupBox;

Edit100: TEdit;

Label9: TLabel;

Label10: TLabel;

Edit101: TEdit;

Label11: TLabel;

Edit102: TEdit;

Label12: TLabel;

Edit103: TEdit;

Label13: TLabel;

Edit104: TEdit;

StatusBar1: TStatusBar;

ToolBar1: TToolBar;

N5: TMenuItem;

Chart1: TChart;

ini1: TMenuItem;

ini2: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

ToolButton1: TToolButton;

ToolButton2: TToolButton;

ToolButton3: TToolButton;

ToolButton4: TToolButton;

ToolButton5: TToolButton;

ToolButton6: TToolButton;

ToolButton7: TToolButton;

ToolButton8: TToolButton;

ToolButton9: TToolButton;

ToolButton10: TToolButton;

ImageListHot: TImageList;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

Excel1: TMenuItem;

ImageListDisable: TImageList;

ImageListNormal: TImageList;

ToolButton11: TToolButton;

ToolButton12: TToolButton;

ToolButton13: TToolButton;

ToolButton14: TToolButton;

WordApplication1: TWordApplication;

ExcelApplication1: TExcelApplication;

PowerPointApplication1: TPowerPointApplication;

WordDocument1: TWordDocument;

ToolButton15: TToolButton;

ToolButton16: TToolButton;

N13: TMenuItem;

N14: TMenuItem;

N15: TMenuItem;

N16: TMenuItem;

N17: TMenuItem;

N18: TMenuItem;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label6: TLabel;

Edit107: TEdit;

Label5: TLabel;

Edit106: TEdit;

Label7: TLabel;

Label8: TLabel;

Label16: TLabel;

Label17: TLabel;

Edit105: TEdit;

Label18: TLabel;

Label19: TLabel;

Label20: TLabel;

Edit108: TEdit;

Label21: TLabel;

Edit111: TEdit;

Label14: TLabel;

Edit112: TEdit;

Edit113: TEdit;

Label15: TLabel;

Label22: TLabel;

Edit109: TEdit;

Label23: TLabel;

Label24: TLabel;

Edit110: TEdit;

Label25: TLabel;

Series1: TLineSeries;

procedure FormShow (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure Button4Click (Sender: TObject);

procedure ToolButton1Click (Sender: TObject);

procedure ToolButton2Click (Sender: TObject);

procedure ToolButton4Click (Sender: TObject);

procedure ToolButton6Click (Sender: TObject);

procedure ToolButton5Click (Sender: TObject);

procedure ToolButton11Click (Sender: TObject);

procedure ToolButton13Click (Sender: TObject);

procedure ToolButton12Click (Sender: TObject);

procedure ToolButton10Click (Sender: TObject);

procedure N5Click (Sender: TObject);

procedure N4Click (Sender: TObject);

procedure N15Click (Sender: TObject);

procedure N16Click (Sender: TObject);

procedure N17Click (Sender: TObject);

procedure N12Click (Sender: TObject);

private

{ Private declarations }

procedure ShowHint (Sender: TObject);

function Proverka (Sender: TObject): boolean;

public

{ Public declarations }

end;

//---------------------------------------------

var

Form1: TForm1;

Kurs: TKurs; // объявление созданного класса

// процедура вызова окна о программе из DLL

procedure ShowAbout; external 'ProjectDLL. DLL' index 10;

function N_dann (u, l, Q_, z, H, d: double):double; external 'ProjectDLL. DLL' index 11;

implementation

uses Unit2, about3;

{$R *. dfm}

// перед показом клавной формы, показывается заставка

// и проводится настройка окна программы.

procedure TForm1. FormShow (Sender: TObject);

begin

Logo. showmodal;

Application. OnHint:=ShowHint;

StringGrid1. ColWidths[2]:=180;

end;

// функция проверки заполнеия исходными данными полей на форме

function TForm1. Proverka (Sender: TObject): boolean;

begin

if (Form1. Edit100. Text='') or (Form1. Edit107. Text='')or (Form1. Edit108. Text='')or

(Form1. Edit101. Text='') or (Form1. Edit102. Text='') or (Form1. Edit109. Text='')or

(Form1. Edit103. Text='') or (Form1. Edit104. Text='') or

(Form1. Edit105. Text='') or (Form1. Edit106. Text='') then

Proverka: =false

else

Proverka: =true;

end;

// при нажатии Справка о программе либо на панели инструментов соответствующей кнопки

procedure TForm1. N4Click (Sender: TObject);

begin

ShowAbout (Handle);

end;

// при нажати записи в ini файл происходить вызов метода созданного класса.

procedure TForm1. Button2Click (Sender: TObject);

begin

Kurs. WriteIniFile;

end;

// при нажатии кнопки закрытие программы

procedure TForm1. N5Click (Sender: TObject);

begin

close;

end;

// очистка графика

procedure TForm1. Button4Click (Sender: TObject);

begin

Series1. Clear;

end;

// включение контекстной помощи (передача в строку состояния, справочной информации)

procedure TForm1. ShowHint (Sender: TObject);

begin

StatusBar1. SimpleText:=Application. Hint;

end;

// запуск презентации программы.

procedure TForm1. N12Click (Sender: TObject);

var

PowerPointApp: OLEVariant;

FilePr: String;

begin

FilePr: =ExtractFilePath (Application. ExeName)+'Prezent. ppt';

try

PowerPointApp := CreateOleObject ('PowerPoint. Application');

except

ShowMessage ('Error… ');

Exit;

end;

PowerPointApp. Visible := True;

PowerPointApp. Presentations. Open (FilePr, False, False, True);

end;

// чтение ini файла.

procedure TForm1. ToolButton1Click (Sender: TObject);

begin

Kurs. ReadIniFile;

end;

//

procedure TForm1. ToolButton2Click (Sender: TObject);

begin

Kurs. WriteIniFile;

end;

//процедура расчета значений системы

procedure TForm1. ToolButton4Click (Sender: TObject);

begin

if Proverka (Sender) then

Kurs. Raszet;

end;

// Процедура очистка всех полей, графика, и таблицы результатов

procedure TForm1. ToolButton6Click (Sender: TObject);

begin

Series1. Clear;

StringGrid1. RowCount := 1;

Edit100. Text:='';

Edit101. Text:='';

Edit102. Text:='';

Edit103. Text:='';

Edit104. Text:='';

Edit105. Text:='';

Edit106. Text:='';

Edit107. Text:='';

Edit108. Text:='';

Edit109. Text:='';

Edit110. Text:='';

end;

// очистка полей с исходной информацией

procedure TForm1. N15Click (Sender: TObject);

begin

Edit100. Text:='';

Edit101. Text:='';

Edit102. Text:='';

Edit103. Text:='';

Edit104. Text:='';

Edit105. Text:='';

Edit106. Text:='';

Edit107. Text:='';

Edit108. Text:='';

Edit109. Text:='';

Edit110. Text:='';

end;

// очистка таблицы с результатами

procedure TForm1. N16Click (Sender: TObject);

begin

StringGrid1. RowCount := 1;

end;

// очистка графика

procedure TForm1. N17Click (Sender: TObject);

begin

Series1. Clear;

end;

// рисование графика.

procedure TForm1. ToolButton5Click (Sender: TObject);

begin

if Proverka (Sender) then

begin

Kurs. Raszet;

Kurs. Draw;

end;

end;

// запуск Ворда и пояснительной записки

procedure TForm1. ToolButton11Click (Sender: TObject);

var

FileName, ConfirmConversions, ReadOnly, AddToRecentFiles,

PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument,

WritePasswordTemplate, Format, EmptyParam: OleVariant;

begin

WordApplication1. Connect;

WordApplication1. Visible:=true;

// открываем шаблон документа

FileName: =ExtractFilePath (Application. ExeName)+'ПЗ. doc';

ConfirmConversions: =False;

ReadOnly: =False;

AddToRecentFiles: =False;

PasswordDocument: ='';

PasswordTemplate: ='';

Revert: =False;

WritePasswordDocument: ='';

WritePasswordTemplate: ='';

Format: =0;

WordApplication1. Documents. Open (FileName, ConfirmConversions, ReadOnly,

AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument,

WritePasswordTemplate, Format, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);

// связываем компонент с существующим интерфейсом

WordDocument1. ConnectKind:=ckAttachToInterface;

WordDocument1. ConnectTo (WordApplication1. ActiveDocument);

end;

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

procedure TForm1. ToolButton13Click (Sender: TObject);

var

PowerPointApp: OLEVariant;

FilePr: String;

begin

FilePr: =ExtractFilePath (Application. ExeName)+'Prezent. ppt';

try

PowerPointApp := CreateOleObject ('PowerPoint. Application');

except

ShowMessage ('Error… ');

Exit;

end;

PowerPointApp. Visible := True;

PowerPointApp. Presentations. Open (FilePr, False, False, True);

end;

// сооздание документа Excel и перенос в него таблицы результатов

procedure TForm1. ToolButton12Click (Sender: TObject);

var

XLApp, Sheet, Colum, Chart: Variant;

index, i, n: integer;

const xl3DColumn=4;

xlColumns=2;

begin

// создание документа. Лист с именем Отчет

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

XLApp. Visible := True;

XLApp. Workbooks. Add (-4167);

XLApp. Workbooks[1]. WorkSheets[1]. Name:='Отчет';

Colum: =XLApp. Workbooks[1]. WorkSheets['Отчет']. Columns;

Colum. Columns[3]. ColumnWidth:=30;

Sheet: =XLApp. Workbooks[1]. WorkSheets['Отчет'];

n: =StringGrid1. RowCount;

// перенос результатов

for i: =1 to n-1 do

begin

Sheet. Cells[i+1,1]:=StringGrid1. Cells[0,i];

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

Sheet. Cells[i+1,3]:=StrtoFloat (StringGrid1. Cells[2,i]);

end;

// добавление графика в таблицу Ексель

XLApp. Charts. Add;

XLApp. Charts[1]. Activate;

Chart: =XLApp. Charts. Item[1];

Chart. ChartType:=xl3DColumn;

Chart. SetSourceData (Source:=XLApp. ActiveWorkbook. Sheets. Item['Отчет']. Range['B1:C1000'],

PlotBy: =xlColumns);

end;

// вызов справочной информации

procedure TForm1. ToolButton10Click (Sender: TObject);

begin

ShellExecute (Handle, 'open', '1. chm', nil, nil, SW_SHOWNORMAL);

end;

end.

// Unit2. pas модуль заставки

unit Unit2;

interface

uses

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

Dialogs, ExtCtrls, jpeg, StdCtrls, Registry;

type

TLogo = class (TForm)

Timer1: TTimer;

Image1: TImage;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

procedure Timer1Timer (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure FormKeyPress (Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Logo: TLogo;

implementation

{$R *. dfm}

// по истечению таймера заставка закрывается. таймер на 5 сек.

procedure TLogo. Timer1Timer (Sender: TObject);

begin

Close;

end;

// форма заставки когда заставка созданна она должна закрыться

procedure TLogo. FormCreate (Sender: TObject);

begin

Close;

end;

// форма заставки если нажата клафиша закрыть заставку

procedure TLogo. FormKeyPress (Sender: TObject; var Key: Char);

begin

Close;

end;

end.

// Kursuv_class. pas созданный класс

// созданный класс

unit Kursuv_class;

interface

type

TKurs = object

private

t0,tk, hag: double;

// p, k, m, Q, h: double;

m, m1, m2,q0,q, l, u, H, k, Mas, z, d: double;

c_, n_, Q_, w_, A_, T_, V_, wt: double;

b, C1, C2: double;

function g_f (t: double): double;

{ Private declarations }

public

procedure Create;

procedure ReadIniFile;

procedure WriteIniFile;

procedure Raszet;

procedure Draw;

{ Public declarations }

end;

function RoundEx (chislo: double; Precision: Integer): string;

implementation

uses

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

Dialogs, StdCtrls, Buttons, Menus, ToolWin, ActnMan, ActnCtrls, Grids, IniFiles,

Unit1, Math;

// запись информации в закрытые поля класса

procedure TKurs. Create;

begin

m: =StrToFloat (Form1. Edit100. Text);

u: =StrToFloat (Form1. Edit101. Text);

l: =StrToFloat (Form1. Edit102. Text);

q: =StrToFloat (Form1. Edit103. Text);

H: =StrToFloat (Form1. Edit104. Text);

k: =StrToFloat (Form1. Edit105. Text);

m1: =StrToFloat (Form1. Edit106. Text);

m2: =StrToFloat (Form1. Edit107. Text);

q0: =StrToFloat (Form1. Edit108. Text);

z: =StrToFloat (Form1. Edit109. Text);

d: =StrToFloat (Form1. Edit110. Text);

t0: =StrToFloat (Form1. Edit111. Text);

tk: =StrToFloat (Form1. Edit112. Text);

hag: =StrToFloat (Form1. Edit113. Text);

end;

// процес записи информации в ini файл

procedure TKurs. WriteIniFile;

var ini: TIniFile;

begin

if (Form1. Edit100. Text='') or (Form1. Edit107. Text='')or (Form1. Edit108. Text='')or

(Form1. Edit101. Text='') or (Form1. Edit102. Text='') or (Form1. Edit109. Text='')or

(Form1. Edit103. Text='') or (Form1. Edit104. Text='') or (Form1. Edit110. Text='')or

(Form1. Edit105. Text='') or (Form1. Edit106. Text='') then

Application. MessageBox ('Заполните все поля!!!','Замечание!')

else

begin

ini: =TIniFile. Create ('ini. ini');

ini. WriteFloat ('Data','m', StrToFloat (Form1. Edit100. Text));

ini. WriteFloat ('Data','u', StrToFloat (Form1. Edit101. Text));

ini. WriteFloat ('Data','l', StrToFloat (Form1. Edit102. Text));

ini. WriteFloat ('Data','q', StrToFloat (Form1. Edit103. Text));

ini. WriteFloat ('Data','H', StrToFloat (Form1. Edit104. Text));

ini. WriteFloat ('Data','k', StrToFloat (Form1. Edit105. Text));

ini. WriteFloat ('Data','m1', StrToFloat (Form1. Edit106. Text));

ini. WriteFloat ('Data','m2', StrToFloat (Form1. Edit107. Text));

ini. WriteFloat ('Data','q0', StrToFloat (Form1. Edit108. Text));

ini. WriteFloat ('Data','z', StrToFloat (Form1. Edit109. Text));

ini. WriteFloat ('Data','d', StrToFloat (Form1. Edit110. Text));

ini. WriteFloat ('Data','t0', StrToFloat (Form1. Edit111. Text));

ini. WriteFloat ('Data','tk', StrToFloat (Form1. Edit112. Text));

ini. WriteFloat ('Data','hag', StrToFloat (Form1. Edit113. Text));

ini. Free;

end;

end;

// чтение ini файла

procedure TKurs. ReadIniFile;

var ini: TIniFile;

begin

ini: =TIniFile. Create ('ini. ini');

m: =ini. ReadFloat ('Data','m', 0);

Form1. Edit100. Text:=FloatToStr (m);

u: =ini. ReadFloat ('Data','u', 1);

Form1. Edit101. Text:=FloatToStr (u);

l: =ini. ReadFloat ('Data','l', 1);

Form1. Edit102. Text:=FloatToStr (l);

q: =ini. ReadFloat ('Data','q', 1);

Form1. Edit103. Text:=FloatToStr (q);

H: =ini. ReadFloat ('Data','H', 1);

Form1. Edit104. Text:=FloatToStr (H);

k: =ini. ReadFloat ('Data','k', 1);

Form1. Edit105. Text:=FloatToStr (k);

m1: =ini. ReadFloat ('Data','m1', 1);

Form1. Edit106. Text:=FloatToStr (m1);

m2: =ini. ReadFloat ('Data','m2', 1);

Form1. Edit107. Text:=FloatToStr (m2);

q0: =ini. ReadFloat ('Data','q0', 1);

Form1. Edit108. Text:=FloatToStr (q0);

z: =ini. ReadFloat ('Data','z', 1);

Form1. Edit109. Text:=FloatToStr (z);

d: =ini. ReadFloat ('Data','d', 1);

Form1. Edit110. Text:=FloatToStr (d);

t0: =ini. ReadFloat ('Data','t0', 1);

Form1. Edit111. Text:=FloatToStr (t0);

tk: =ini. ReadFloat ('Data','tk', 1);

Form1. Edit112. Text:=FloatToStr (tk);

hag: =ini. ReadFloat ('Data','hag', 1);

Form1. Edit113. Text:=FloatToStr (hag);

ini. Free;

end;

// функция системы зависящая от времени

function TKurs. g_f (t: double): double;

begin

if (n_< w_)then

begin

A_: =sqrt (q0*q0+q0*q0/(w_*w_));

b:= ArcTan (w_*q0/q0);

wt: =sqrt (w_*w_-n_*n_);

g_f: =A_*exp (n_*t)*sin (wt*t+b);

end;

if (n_> w_)then

begin

wt: =sqrt (n_*n_-w_*w_);

g_f: =exp (-n_*t)*(((q0*(wt+n_)+q0)/(2*wt))*exp (2*t)+((q0*(wt-n_)-q0)/(2*wt))*exp (2*wt*t));

end;

if (n_=w_)then

begin

C1: =(q0*(wt+n_)+q0)/(2*wt);

C2: =(q0*(wt-n_)-q0)/(2*wt);

g_f: =exp (-n_*t)*(C1*t+C2);

end;

end;

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

procedure TKurs. Raszet;

var i: integer;

ti, temp: double;

begin

Create;

ti: =t0;

i: =0;

Mas: =m+m1+m2; // сичаем массу

Q_: =Mas*9. 81; // вес всей колеблющейся системы (груз, поршень и поршневой шток)

n_: =N_dann (u, l, Q_, z, H, d);

c_: =128*u*l*q*q/(3. 14*power (d, 4));

w_: =sqrt (k/Mas);

temp: =(tk-t0)/hag;

Form1. StringGrid1. RowCount := 1;

Form1. StringGrid1. RowCount:=round (temp)+2;

Form1. StringGrid1. Cells[0,0]:=' № ';

Form1. StringGrid1. Cells[1,0]:=' t= ';

Form1. StringGrid1. Cells[2,0]:=' x (t)= ';

while (ti< =(tk+hag/2)) do

begin

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

Form1. StringGrid1. Cells[1,i+1]:=FloatToStr ((Round (ti*10))/10);

Form1. StringGrid1. Cells[2,i+1]:=FloatToStr (g_f ((Round (ti*10))/10));

inc (i);

ti: =ti+hag;

end;

end;

// рисование графика

procedure TKurs. Draw;

var

ti: double;

begin

ti: =t0;

while (ti< =tk) do

begin

Form1. Series1. AddXY (ti, strtofloat (RoundEx (g_f (ti), 8)),'', clGreen);

ti: =ti+hag;

end;

end;

// процедура округления значений до заданного количества цифр после запятой.

function RoundEx (chislo: double; Precision: Integer): string;

var

ChisloInStr: string;

ChisloInCurr: currency;

begin

ChisloInCurr := chislo;

Str (ChisloInCurr: 20: Precision, ChisloInStr);

ChisloInStr[Pos ('. ', ChisloInStr)] := ',';

RoundEx := Trim (ChisloInStr);

end;

end.

// файл about. pas для создания DLL файла с формой диалогового окна «О программе»

unit about;

interface

uses

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

Dialogs, StdCtrls, Buttons, Math;

type

TForm1 = class (TForm)

Label1: TLabel;

BitBtn1: TBitBtn;

Label2: TLabel;

Label4: TLabel;

Label5: TLabel;

Label7: TLabel;

Label8: TLabel;

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

procedure ShowAbout (Handle: THandle); export; stdcall;

function N_dann (u, l, Q_, z, H, d: double):double; export; stdcall;

implementation

{$R *. dfm}

procedure ShowAbout (Handle: THandle);

begin

// установить указатель на приложение

Application. Handle:=Handle;

// создать форму

Form1: =TForm1. Create (Application);

// отобразить

Form1. ShowModal;

//очистить

Form1. Free;

end;

function N_dann (u, l, Q_, z, H, d: double):double;

begin

N_dann: =(4 * 3. 14 * 9. 81 * u * l / (Q_*z))*power (H/d, 4);

end.

ПоказатьСвернуть
Заполнить форму текущей работой