Разработка программного продукта для расчета тепловых коэффициентов для тел с распределенными и сосредоточенными источниками энергии
Структура и описание программ для расчета тепловых коэффициентов для параллелепипеда с равномерно распределенными источниками тепла, равномерно распределенными на двух противоположных гранях и грани которого находятся в состоянии теплообмена со средой.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.06.2015 |
Размер файла | 523,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Воронежский государственный технический университет
Кафедра конструирования и производства радиоаппаратуры
КУРСОВОЙ ПРОЕКТ
Расчетно-пояснительная записка
на тему «Разработка программного продукта для расчета тепловых коэффициентов для тел с распределенными и сосредоточенными источниками энергии»
Содержание
Введение
1. Математические модели для расчета тепловых коэффициентов для тел с распределенными и сосредоточенными источниками энергии
1.1 Параллелепипед с равномерно распределенным источником тепла; граничные условия первого рода
1.2 Параллелепипед с равномерно распределенным источником тепла, грани которого находятся в состоянии теплообмена со средой
1.3 Параллелепипед с источниками тепла, равномерно распределенными на двух противоположных гранях
2. Алгоритмы вычислений
2.1 Параллелепипед с равномерно распределенным источником тепла; граничные условия первого рода
2.2 Параллелепипед с равномерно распределенным источником тепла, грани которого находятся в состоянии теплообмена со средой
2.3 Параллелепипед с источниками тепла, равномерно распределенными на двух противоположных гранях
3. Структура и описание программ
4. Руководство пользователю
4.1 Описание окна ввода исходных данных
4.2 Описание окна работы с графиком
Заключение
Приложение
Введение
Для сокращения времени расчетов температурных полей для тел с распределенными и сосредоточенными источниками энергии необходимо спроектировать три программных продукта для следующих условий:
- параллелепипед с равномерно распределенным источником тепла; граничные условия первого рода;
- параллелепипед с равномерно распределенным источником тепла, грани которого находятся в состоянии теплообмена со средой;
- параллелепипед с источниками тепла, равномерно распределенными на двух противоположных гранях.
Это также необходимо для ознакомления с законами распределения тепла в данных телах и получения практических навыков для теплофизического проектирования модулей РЭС.
1. Математические модели для расчета тепловых коэффициентов для тел с распределенными и сосредоточенными источниками энергии
1.1 Параллелепипед с равномерно распределенным источником тепла; граничные условия первого рода
В анизотропном параллелепипеде, размеры которого 21Х, 21у, 2/z, а коэффициенты теплопроводности в направлениях осей х, у, z равны Кх, Ку, Кг, равномерно распределен источник тепла с удельной мощностью W (рис. 1). На всех шести гранях параллелепипеда температура одинакова и равна ts.
Теплообмен со средой (температура среды tс) происходит по закону Ньютона, средний коэффициент теплообмена равен ее. Если температуры граней тела одинаковы, то а связан с коэффициентами теплообмена аx, ау, аz на гранях х = ± 1Х, у = ± 1у и z = ± lz зависимостью
(1)
где Sx, Sy, Sz -- площади поверхностей граней.
Известно, что если выполняются следующие условия: а) тело имеет различные коэффициенты теплопроводности Кх, Ку Кz в трех взаимно перпендикулярных направлениях, принятых за оси х, у, z; б) тело вообще не ограничено, либо ограничено плоскостями, перпендикулярными осям х, у, z, то уравнение теплопроводности, для такого класса анизотропных тел имеет вид
(2)
где W -- объемная плотность источников тепла.
Так как на всех шести гранях параллелепипеда температура по условию задачи постоянна, то удобно в дальнейшем отсчитывать температуру от значения ts, т. е. рассматривать разность температур (t -- ts). Тогда условия на гранях примут вид представленный в уравнение (3).
Итак, введением разности (t -- ts) вместо t удалось для поставленной задачи граничные условия третьего рода свести к условиям первого рода, что существенно упростило задачу.
Средняя поверхностная температура параллелепипеда
(3)
Рисунок 1. - Параллелепипед с внутренним источником тепла.
Нетрудно заметить, что 21Х, 21у, 2/z равны соответственно 211, 212, 2/3 .
Если координатные оси расположены так, как указано на рис. 1, то на границах параллелепипеда справедливы условия:
(4)
Решение системы уравнений (2) - (4) методом Г. А. Гринберга приводит к следующему выражению для температурного поля параллелепипеда.
(5)
где
(6)
Нетрудно видеть, что при х = у = z = 0 и x = 2/х, у = 2/2, z = 2/3 выражение (5) равно нулю, как это и следовало ожидать. Найдем температуру в центре параллелепипеда:
(7)
(8)
1.2 Параллелепипед с равномерно распределенным источником тепла, грани которого находятся в состоянии теплообмена со средой
Температурное поле такого параллелепипеда (рисунок 2) также описывается уравнением (2).
Рис. 2. Параллелепипед с равномерно распределенным источником энергии.
Граничные условия запишем для случая попарно симметричных условий теплообмена на противоположных гранях:
(9)
Приближенное решение системы уравнений (2) и (9) имеет вид:
(10)
где
(11)
Формулы (10), (11) в отличие от (5), (6) позволяют найти температурное поле во всех точках параллелепипеда, в том числе и на его гранях, при любых значениях коэффициентов теплообмена.
Значения тепловых коэффициентов Fjc для любой точки j из формулы средней поверхностной температуры параллелепипеда равны:
(12)
что позволяет из формул (5), (6), (10), (11) найти выражения для тепловых коэффициентов.
1.3 Параллелепипед с источниками тепла, равномерно распределенными на двух противоположных гранях
Рассматривается, как и в предыдущей задаче анизотропный параллелепипед с источниками тепла, равномерно распределенными по поверхностям граней у = ± 1у.
Математическая формулировка задачи:
(13)
где qy - удельная мощность поверхностного источника энергии.
Приближенное решение задачи можно представить в виде:
(14)
(15)
Значения еy, ez, Bx, By, Bz определяются соотношениями (11).
программа параллелепипед теплообмен грань
2. Алгоритмы вычислений
2.1 Параллелепипед с равномерно распределенным источником тепла; граничные условия первого рода
Для решения этой задачи необходимо выразить t(x,y,z) из формулы (5).
Геометрические размеры исследуемого параллелепипеда (рис. 1) нам известны. Удельная мощность источника тепла равна W. Коэффициент теплопроводности материала ? и коэффициент теплоотдачи поверхности тела ? нам известны. Для вычисления средней поверхностной температуры ts воспользуемся формулой (3).
2.2 Параллелепипед с равномерно распределенным источником тепла, грани которого находятся в состоянии теплообмена со средой
Для решения второй задачи необходимо воспользоваться формулой (10) выразив из нее t(x,y,z). Неизвестные значения находим из системы (11). Геометрические размеры исследуемого параллелепипеда (рис. 2) нам известны. Удельная мощность источника тепла равна W. Коэффициент теплопроводности материала ? и коэффициент теплоотдачи поверхности тела ? вдоль осей x, y, z нам известны. Для вычисления средней поверхностной температуры ts воспользуемся формулой (3).
2.3 Параллелепипед с источниками тепла, равномерно распределенными на двух противоположных гранях
В этой задаче исследуем параллелепипед (рис. 2) с источником тепла, равномерно распределенным по поверхностям граней вдоль оси y. Для решения этой задачи воспользуемся формулой (14). Все неизвестные значения находим из систем (15) и (11). Геометрические размеры исследуемого параллелепипеда нам известны. Мощность поверхностного источника тепла равна q. Коэффициент теплопроводности материала ? и коэффициент теплоотдачи поверхности тела ? вдоль осей x, y, z нам известны. Для вычисления средней поверхностной температуры ts воспользуемся формулой (3).
3. Структура и описание программ
Расчет значений производился в соответствии с п.п. 2.1, 2.2, 2.3. Листинг программ представлен в приложениях. Приложение 1 - Листинг основного окна ввода данных программы п. 2.1. Приложение 2 - Листинг основного окна ввода данных программы п. 2.2. Приложение 3 - Листинг основного окна ввода данных программы п. 2.3. Приложение 4 - Листинг программы работы с графиком и курсором. Для решения этих задач применили стандартные функции и операторы языка программирования Object Pascal.
Для предотвращения ввода не корректных данных в окна текстовых полей (Edit) воспользовались рядом условий и ограничений, поэтому в поля нельзя вводить ничего кроме чисел и знака ' , ' для написания дробных величин, а также знака ' - ' для отрицательных чисел, это было осуществлено с помощью процедуры «KeyPress» на текстовые поля Edit. Основные вычисления по необходимым формулам производятся при нажатии на кнопки «Температура поля в точке с координатами x, y, z», «График зависимости t от x», «График зависимости t от y» и «График зависимости t от z», также при нажатии трех последних кнопок вызываются процедуры BeginPlot, AddPoint, необходимые для построения графика зависимости. Одновременно при нажатии на кнопки проверяется заполнены ли все поля и не выходят ли координаты исследуемых точек за пределы параллелепипеда. Если данные ошибки имеют место, то программно предлагается устранить их и вычисления не производятся. Эти подходы сводят к минимуму возникновение различных ошибок в ходе работы программы.
Подробнее рассмотрим работу модуля работы с графиками, это наиболее сложный и объемный раздел. Основные процедуры модуля BeginPlot, AddPoint, NullPoint, они обеспечивают занесение точек в график.
Процедура BeginPlot подготавливает рисование нового графика, уничтожая информацию о прежнем графике. Сначала серия Seriesl очищается методом Clear от данных прежнего графика. Затем функцией SetLength обнуляется массив ABad, содержащий информацию об областях недопустимых значений прежнего графика. Сбрасывается в false глобальная переменная Bad, которая, как это будет видно далее, показывает, является ли предыдущая точка графика недопустимой. Значение false соответствует тому, что предыдущая точка допустимая. Последний оператор процедуры восстанавливает методом UndoZoom масштаб, если он был изменен пользователем при работе с предыдущим графиком.
Процедура AddPoint добавляет в график новую точку цвета Color с координатами X и Y. Но прежде, чем добавлять точку, проверяется, является ли Y конечным численным значением. Для этого проверяется, не равно ли значение Y, переведенное в строку, "NAN", "-NAN", "INF" или "-INF". Это значения, которые могут возвращать функции Delphi. Если Y не числовая или бесконечная величина, то вызывается рассмотренная далее процедура NullPoint, формирующая область недопустимых значений. А если Y -- нормальное число, то точка заносится в серию Series1 методом AddXY и Bad устанавливается в false, сигнализируя, что точка допустимая.
Обращение к процедуре NullPoint происходит, если при аргументе X не удалось вычислить функцию. Тогда дальнейшие действия зависят от значения переменной Bad. Если Bad = false (предыдущая точка была допустимой), то размер массива ABad увеличивается на 2 и значение X записывается в него дважды -- как начальная и конечная точка новой области недопустимых значений. А если Bad = true (предыдущая точка тоже была недопустимой), то значение X записывается в конец массива ABad как конечная точка текущей области недопустимых значений. В конце процедуры Bad устанавливается true, свидетельствуя о том, что текущая точка недопустимая.
Теперь рассмотрим организацию работы с курсорами графика. Отметим, что в модуле введены глобальные переменные IndCursl и IndCurs2, хранящие индексы точек в массиве отображаемых данных, соответствующие координатам первого и второго курсора графика. Кроме того введена глобальная переменная HCursor, хранящая текущий шаг сдвига курсора.
Процедура ACursMouseExecute переключает режим отображения координат курсора мыши. Она срабатывает при выборе пользователем команды меню Курсор | Курсор мыши. Первый оператор этой процедуры переключает действие ACursMouse, а вместе с ним и соответствующий раздел меню, между включенным и не включенным значениями. Если действие включилось, то делается видимым окно отображения координат курсора FCoord и свойство Cursor объекта Seriesl задается равным crCross. Последнее означает, что когда курсор мыши будет проходить над кривой графика, он будет изменять свой обычный вид -- стрелку на крест. Тем самым можно будет знать, когда координаты курсора точно совпадают с координатами графика.
Если действие ACursMouse выключилось, то курсору возвращается его значение по умолчанию. Далее проверяется, включен ли режим курсоров графика. Если нет, то форма FCoord делается невидимой. Если же режим курсоров графика включен, то в окне FCoord стираются координаты курсора мыши.
Теперь рассмотрим процедуру ChartlMouseMove -- обработчик событий OnMouseMove, происходящих при перемещении курсора над компонентом Chart. Если режим отображения координат курсора мыши включен (это проверяется по значению свойства Seriesl.Cursor), то требуется отображать координаты курсора в окне FCoord. Для этого методом GetCursorValues определяются координаты курсора в системе координат графика: XData и YData. А затем эти координаты отображаются в соответствующих метках окна формы FCoord.
Включение и выключение курсоров графиков осуществляется процедурой ACursorsExecute. Первый оператор этой процедуры включает или выключает курсоры графика. Если в результате курсоры включаются, то пиктограмма, отображаемая в соответствующем разделе меню и на соответствующей быстрой кнопке, изменяется с '+' на '-'. Индексы IndCursl и IndCurs2 сбрасываются на нуль, т.е. курсоры устанавливаются на первую точку графика. Затем следует вызов процедуры SetCursor, определяющей координаты курсоров и рисующей курсоры. После этого вызывается процедура WriteYalue, которая отображает в окне FCoord координаты курсоров. Если в результате выполнения первого оператора процедуры ACursorsExecute курсоры графика выключились, то пиктограмма, отображаемая в соответствующем разделе меню и на соответствующей быстрой кнопке, изменяется с '-' на '+'. Далее, если режим курсора мыши не включен, форма FCoord делается невидимой. Если же режим курсора мыши включен, то в окне координат стираются значения, относящиеся к координатам графика.
Теперь рассмотрим вспомогательную процедуру SetCursor, которая вызывается, в частности, из процедуры ACursorsExecute и из ряда других процедур. Назначение этой процедуры -- определить координаты курсоров графика и нарисовать (или стереть) их изображение на экране.
Начинается процедура с установки режима рисования. Дело в том, что курсоры рисуются пером Pen на канве Canvas компонента Chart 1. При перемещении курсора надо сначала стереть прежнее изображение курсора, а затем нарисовать его в новом месте. Подобные операции легко осуществляются в режиме пера pmNotXor. В этом режиме повторное рисование фигуры на том же месте, где она была нарисована ранее, стирает прежнее изображение. В конце процедуры восстанавливается запомненный режим рисования пера.
Вторая вспомогательная процедура TFPlot. Write Value отображает координаты курсоров в окне FCoord. В начале этой процедуры методами Seriesl.XValue и Seriesl.YValue определяются координаты курсоров в системе координатных осей графика. Затем эти значения функцией FloatToStrF отображаются в соответствующих метках формы FCoord с точностью 7 значащих цифр.
Теперь обратимся к процедуре FormKeyDown. Это обработчик события ОпKeyDown формы, наступающего при нажатии пользователем какой-нибудь клавиши. Все операции выполняются только в случае, если включен режим курсоров графика (ACursors.Checked = true). Если пользователем нажата клавиша Shift (проверяется условием ssShift in Shift), то работа идет со вторым курсором. В противном случае работа идет с первым курсором. Индекс курсора, с которым идет работа, присваивается локальной переменной IndNew.
Далее анализируется нажатая пользователем клавиша. Если нажата клавиша со стрелкой влево (Key = VK_Left), то индекс курсора уменьшается функцией Dec на величину шага HCursor. Если нажата клавиша со стрелкой вправо (Key = VK_Right), то индекс курсора увеличивается функцией Inc на величину шага HCursor. При нажатых клавишах Ноmе и End индекс соответственно устанавливается на начало или конец графика.
Процедура ARepaintExecute осуществляет перерисовку изображения графика и всего нарисованного на канве, если это изображение по каким-то причинам испортилось. Для перерисовки вызывается стандартный метод Repaint.
Процедуры AMaxExecute и AMinExecute осуществляют расчет максимума и минимума отображенной на графике функции. Зрительно для пользователя это сводится к перемещению первого курсора соответственно в точку максимального или минимального значения. Поэтому сначала вызовом процедуры SetCursor стираются прежние изображения курсоров, затем по массиву Seriesl.YValues рассчитывается максимальное или минимальное значения графика, индекс первого курсора IndCursl задается равным индексу найденной точки, после чего курсоры рисуются в новой позиции.
Процедура ACalcExecute осуществляет вызов стандартной программ Windows «Калькулятор» функцией ShellExecute.
Процедуры ASaveBMPExecut, ASaveWMFExecute и ASaveEMFExecute вызывают стандартный диалог сохранения в файле и при выборе пользователем файла сохраняют график в соответствующем формате. При вызове диалога расширение по умолчанию DefaultExt и фильтр файлов Filterlndex диалога задаются соответствующими формату результирующего файла.
Процедуры ACopyBMPExecute, ACopyWMFExecute и ACopyEMFExecute соответствующими методами компонента копируют график в буфер обмена Clipboard в различных форматах. Из Clipboard эту копию может взять любая программа, например, Word.
Процедура APrintPExecut является обработчиком сразу двух действий: печати графика в книжной и альбомной ориентации. Вызов стандартного диалога печати позволяет пользователю выбрать принтер и число печатаемых копий, А затем одним из двух методов Chartl.PrintPortrait или Chartl.PrintLandscape (в зависимости от того, какое действие вызвало процедуру, т.е. от значения параметра Sender) осуществляется печать графика.
Процедура AExitExecute завершает приложение методом Application.Terminate. Процедура ChartlDblClick является обработчиком двойного щелчка. Она восстанавливает исходный масштаб графика, если он был изменен пользователем. Процедура AHelpExecute вызывает справку. Процедура FormClose является обработчиком события OnClose формы. Она закрывает окно координат, если оно было открыто.
Процедура FormCreate задает свойству Order массива аргументов серии Seriesl значение loNone. Это обеспечивает отсутствие упорядочивания точек и обеспечивает возможность рисования графиков многозначных функций.
4. Руководство пользователю
4.1 Описание окна ввода исходных данных
Окно содержит текстовые поля для ввода исходных данных и кнопки для расчета температуры в конкретной точке или для перехода в окно работы с графиком.
Ввод дробных чисел осуществляется через запятую, а не через точку. Переход между окнами ввода и кнопками можно осуществлять с помощью клавиши "Tab", обратное перемещение "Shift+Tab".
Для работы с программой необходимо ввести требуемые данные в соответствующие поля. Размерность ввода указана рядом с полем ввода. Ввод температуры осуществляется в соответствии с заданием или в градусах Цельсия, или в градусах Кельвина, соответственно результат будет представлен в той размерности которую Вы выберите.
При вводе координаты точки, в которой планируется произвести исследования необходимо обратить внимание, чтобы она не выходила за приделы параллелепипеда, представленного на рисунке.
4.2 Описание окна работы с графиком
Окно содержит панель, в которой отображается график, главное меню и инструментальную панель.
Масштаб по оси ординат выбирается автоматически исходя из рассчитанных значений отображаемого выражения. Масштаб по оси абсцисс определяется диапазоном аргумента X, заданным в основном окне приложения. Однако, он может изменяться, если обнаруживается, что значения аргумента в начале или в конце диапазона вызывают вычислительные ошибки. Если подобные ошибки возникают во внутренних точках диапазона, на графике отображаются области недопустимых значений. В них отсутствует кривая графика и стерта координатная сетка.
Для восстановления нормального изображения можно выполнить команду Правка | Перерисовать или нажать соответствующую быструю кнопку (шестая справа) на инструментальной панели.
В процессе просмотра графика пользователь может увеличивать размер окна вплоть до развертывания на весь экран, чтобы посмотреть график в более крупном масштабе. Однако, иногда этого мало. Требуется еще более крупное увеличение какого-то фрагмента. Это можно сделать, если нажать на графике левой кнопкой мыши и, потянув курсор, обвести прямоугольной рамкой требуемый фрагмент. Тогда обведенный фрагмент развернется на всю площадь графика.
В таком увеличенном масштабе пользователь может перемещаться по графику, сдвигая его фрагмент, отображаемый в окне. Для этого надо нажать правую кнопку мыши и, не отпуская ее, перемещать курсор в любом желательном направлении. При этом в окне будут отображаться новые фрагменты графика.
Двойной щелчок на графике левой кнопкой мыши вернет масштаб графика к исходному значению. То же самое можно сделать, перейдя в основное окно приложения и выполнив команду График.
В меню Курсор имеется два раздела: Курсор мыши и Курсоры графика. Второй из этих разделов продублирован "горячими" клавишами Ctrl-C и быстрой кнопкой на инструментальной панели (пятой справа на приведенных ранее рисунках).
При выборе любого из этих разделов открывается окно координат курсоров. Верхняя строка в этом окне заполнена, если включена команда Курсор мыши. Тогда при перемещении курсора мыши в поле графика в этой верхней строке отображаются координаты X и Y курсора, соответствующие координатным осям графика. В момент, когда курсор мыши проходит точно над кривой, изображенной на графике, изменяется вид курсора - вместо стрелки появляется крест. Таким образом, команда Курсор мыши позволяет быстро (но приблизительно) определить координаты характерных точек графика.
Если выполнена команда Курсоры графика, то в окне координат заполняются строки 1-ый курсор, 2-ой курсор, Разность. Одновременно на графике появляются два курсора в виде тонких линий, пересекающих все поле графика. В первый момент координата X обоих курсоров равна начальной координате. Если пользователь нажимает на клавиатуре клавишу со стрелкой вправо, первый курсор будет перемещаться вправо, причем будет точно отслеживать кривую графика. Соответственно в строке 1-ый курсор окна координат будут отображаться координаты той точки графика, в которой в данный момент расположен курсор. При нажатии клавиши со стрелкой влево курсор будет перемещаться по кривой влево. Если пользователь нажмет соответствующую клавишу со стрелкой и не будет ее отпускать, то движение курсора вдоль кривой будет со временем ускоряться. Это позволяет быстро подвести курсор к той области графика, которая интересует пользователя. А затем однократными нажатиями на клавишу со стрелкой можно установить курсор точно в требуемую позицию.
Нажатие клавиш Home или End переводит курсор в соответственно в начальную или конечную точку графика.
Если вы закончили работу с курсорами, их можно удалить. Для этого надо повторно выполнить команду меню Курсор | Курсор мыши или Курсор | Курсоры графика.
При измерениях на графиках в ряде случаев пользователю желательно произвести какие-то вычисления. Поэтому в окно графиков встроен вызов программы Windows "Калькулятор". Вызов осуществляется командой Функции | Калькулятор или соответствующей быстрой кнопкой на инструментальной панели (вторая справа).
Часто при исследовании графиков надо найти минимальное и максимальное значение кривой. Эти операции осуществляются командами Функции | Максимум и Функции | Минимум или соответствующими быстрыми кнопками со стрелками (третья и четвертая справа). При выборе этих команд открывается окно координат курсоров и первый курсор автоматически перемещается соответственно в точки минимума или максимума.
Команды Файл | Сохранить как .BMP, Файл | Сохранить как .WMF, Файл | Сохранить как .EMF и соответствующие им быстрые кнопки (три слева на инструментальной панели) сохраняют график в файлах форматов соответственно .bmp, .wmf (метафайл) и .emf (метафайл Enhanced WMF). При выборе этих команд открывается стандартное окно сохранения файла, в котором пользователь может задать имя файла и каталог.
Команды Файл | Печать книги (четвертая слева быстрая кнопка) и Файл | Печать альбома позволяют вывести график на принтер соответственно при книжной (вертикальной) или альбомной (горизонтальной) ориентации страницы.
Команды Правка | Копировать | Битовая матрица (BMP), Правка | Копировать | Метафайл WMF, Правка | Копировать | Метафайл EMF копируют в соответствующих форматах график в буфер обмена Clipboard, откуда его можно заимствовать в другое приложение, например, в документ Word.
Заключение
В ходе выполнения данного курсового проекта были решены поставленные задачи по оптимизации вычислений и отображения тепловых полей для тел с распределенными и сосредоточенными источниками энергии.
В третей задаче источник тепла равномерно распределен по поверхности грани y. Реализовать задачу распределения источника тепла по другим граням оказалось невыполнимым по формулам приведенным в [1].
Данные программные продукты позволяют сократить затраты времени на расчет температурных полей и получить графики распределения температуры вдоль двух выбранных осей координат с фиксированной третей координатой.
Приложение 1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, TeEngine, Series, ExtCtrls, TeeProcs, Chart,
AppEvnts, ImgList, ActnList, Menus, ComCtrls, ToolWin, jpeg;
type
TForm1 = class(TForm)
…
procedure BitBtn1Click(Sender: TObject);
procedure Edit4Change(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit10KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
t,t1,W,l3,l2,l1,LA,x,y,t2,z,h,maximal,ts,S,AL,tc,P: real;
n,m,i: integer;
implementation
uses UPlot, UCoord, Unit2;
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
// кнопка «График зависимости t от x»
if (Edit1.text='') or (Edit2.text='') or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit7.text='') or (Edit8.text='') or (Edit9.text='')
or (Edit10.text='')then
ShowMessage('Заполните все поля формы')
else
begin
if (strtofloat(Edit7.text)<0) or (strtofloat(Edit7.text)>strtofloat(Edit2.text)) or
(strtofloat(Edit8.text)<0) or (strtofloat(Edit8.text)>strtofloat(Edit3.text)) then
ShowMessage('Координаты исследуемой точки выходят за рамки параллепипеда')
else
begin
l1:=strtofloat(Edit1.text)/2;
l2:=strtofloat(Edit2.text)/2;
l3:=strtofloat(Edit3.text)/2;
P:=strtofloat(Edit4.text);
W:=(strtofloat(Edit4.text))/(8*l1*l2*l3);
LA:=strtofloat(Edit5.text);
AL:=strtofloat(Edit9.text);
tc:=strtofloat(Edit10.text);
y:=strtofloat(Edit7.text);
z:=strtofloat(Edit8.text);
S:=2*2*l1*2*l2+2*2*l3*2*l2+2*2*l3*2*l1;
ts:=(P+AL*tc*S)/(AL*S);
t:=0; x:=0;
FPlot.BeginPlot;
maximal:=l1*2;
h:=maximal/1000;
for i:=1 to 1000 do
begin
t2:=0;
t1:=(64*W*l3*l3)/(3.14*3.14*3.14*3.14*LA);
// Вычисление основной формулы
for n:=1 to 20 do
begin
for m:=1 to 20 do
begin
t2:=t2+(sin((2*n-1)*3.14*x/(2*l1))*sin((2*m-1)*3.14*y/(2*l2))/
((2*n-1)*(2*m-1)*
((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+
(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2)))*
(2*l3/3.14)*(2*l3/3.14)))*
(1-(exp(sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*(l3-z))+
exp(-sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*(l3-z)))/
(exp(sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*l3)+
exp(-sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*l3)));
end;
end;
t:=t1*t2+ts;
FPlot.AddPoint(x,t,clRed);
x:=x+h;
end;
FPlot.Chart1.Title.Text.Clear;
FPlot.Chart1.Title.Text.Add('График зависимости температуры от координаты X');
FPlot.Show;
FCoord.LX.Caption:='X';
end;
end;
end;
procedure TForm1.Edit4Change(Sender: TObject);
begin
if (Edit1.text<>'') and (Edit2.text<>'') and (Edit3.text<>'') and (Edit4.text<>'') then
label6.Caption:=floattostr(round(strtofloat(Edit4.Text)/(strtofloat(Edit1.Text)*strtofloat(Edit2.Text)*strtofloat(Edit3.Text))*1000)/1000);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
// кнопка «График зависимости t от y»
if (Edit1.text='') or (Edit2.text='') or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit6.text='') or (Edit8.text='') or (Edit9.text='')
or (Edit10.text='')then
ShowMessage('Заполните все поля формы')
else
begin
if (strtofloat(Edit6.text)<0) or (strtofloat(Edit6.text)>strtofloat(Edit1.text)) or
(strtofloat(Edit8.text)<0) or (strtofloat(Edit8.text)>strtofloat(Edit3.text)) then
ShowMessage('Координаты исследуемой точки выходят за рамки параллепипеда')
else
begin
l1:=strtofloat(Edit1.text)/2;
l2:=strtofloat(Edit2.text)/2;
l3:=strtofloat(Edit3.text)/2;
P:=strtofloat(Edit4.text);
W:=(strtofloat(Edit4.text))/(8*l1*l2*l3);
LA:=strtofloat(Edit5.text);
AL:=strtofloat(Edit9.text);
tc:=strtofloat(Edit10.text);
x:=strtofloat(Edit6.text);
z:=strtofloat(Edit8.text);
S:=2*2*l1*2*l2+2*2*l3*2*l2+2*2*l3*2*l1;
ts:=(P+AL*tc*S)/(AL*S);
t:=0; y:=0;
FPlot.BeginPlot;
maximal:=l2*2;
h:=maximal/1000;
for i:=0 to 1000 do
begin
t2:=0;
t1:=(64*W*l3*l3)/(3.14*3.14*3.14*3.14*LA);
for n:=1 to 20 do
begin
for m:=1 to 20 do
begin
t2:=t2+(sin((2*n-1)*3.14*x/(2*l1))*sin((2*m-1)*3.14*y/(2*l2))/
((2*n-1)*(2*m-1)*
((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+
(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2)))*
(2*l3/3.14)*(2*l3/3.14)))*
(1-(exp(sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*(l3-z))+
exp(-sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*(l3-z)))/
(exp(sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*l3)+
exp(-sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*l3)));
end;
end;
t:=t1*t2+ts;
FPlot.AddPoint(y,t,clRed);
y:=y+h;
end;
FPlot.Chart1.Title.Text.Clear;
FPlot.Chart1.Title.Text.Add('График зависимости температуры от координаты Y');
FPlot.Show;
FCoord.LX.Caption:='Y';
end;
end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
// кнопка «График зависимости t от z»
if (Edit1.text='') or (Edit2.text='') or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit7.text='') or (Edit6.text='') or (Edit9.text='')
or (Edit10.text='')then
ShowMessage('Заполните все поля формы')
else
begin
if (strtofloat(Edit7.text)<0) or (strtofloat(Edit7.text)>strtofloat(Edit2.text)) or
(strtofloat(Edit6.text)<0) or (strtofloat(Edit6.text)>strtofloat(Edit1.text)) then
ShowMessage('Координаты исследуемой точки выходят за рамки параллепипеда')
else
begin
l1:=strtofloat(Edit1.text)/2;
l2:=strtofloat(Edit2.text)/2;
l3:=strtofloat(Edit3.text)/2;
P:=strtofloat(Edit4.text);
W:=(strtofloat(Edit4.text))/(8*l1*l2*l3);
LA:=strtofloat(Edit5.text);
AL:=strtofloat(Edit9.text);
tc:=strtofloat(Edit10.text);
y:=strtofloat(Edit7.text);
x:=strtofloat(Edit6.text);
S:=2*2*l1*2*l2+2*2*l3*2*l2+2*2*l3*2*l1;
ts:=(P+AL*tc*S)/(AL*S);
t:=0; z:=0;
FPlot.BeginPlot;
maximal:=l3*2;
h:=maximal/1000;
for i:=0 to 1000 do
begin
t2:=0;
t1:=(64*W*l3*l3)/(3.14*3.14*3.14*3.14*LA);
for n:=1 to 20 do
begin
for m:=1 to 20 do
begin
t2:=t2+(sin((2*n-1)*3.14*x/(2*l1))*sin((2*m-1)*3.14*y/(2*l2))/
((2*n-1)*(2*m-1)*
((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+
(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2)))*
(2*l3/3.14)*(2*l3/3.14)))*
(1-(exp(sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*(l3-z))+
exp(-sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*(l3-z)))/
(exp(sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*l3)+
exp(-sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*l3)));
end;
end;
t:=t1*t2+ts;
FPlot.AddPoint(z,t,clRed);
z:=z+h;
end;
FPlot.Chart1.Title.Text.Clear;
FPlot.Chart1.Title.Text.Add('График зависимости температуры от координаты Z');
FPlot.Show;
FCoord.LX.Caption:='Z';
end;
end;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
// кнопка «Температура поля в точке с координатами x, y, z.»
if (Edit1.text='') or (Edit2.text='') or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit7.text='') or (Edit8.text='') or (Edit9.text='')
or (Edit10.text='') or (Edit6.text='') then
ShowMessage('Заполните все поля формы')
else
begin
if (strtofloat(Edit6.text)<0) or (strtofloat(Edit6.text)>strtofloat(Edit1.text)) or
(strtofloat(Edit8.text)<0) or (strtofloat(Edit8.text)>strtofloat(Edit3.text)) or
(strtofloat(Edit7.text)<0) or (strtofloat(Edit7.text)>strtofloat(Edit2.text)) then
ShowMessage('Координаты исследуемой точки выходят за рамки параллепипеда')
else
begin
l1:=strtofloat(Edit1.text)/2;
l2:=strtofloat(Edit2.text)/2;
l3:=strtofloat(Edit3.text)/2;
P:=strtofloat(Edit4.text);
W:=(strtofloat(Edit4.text))/(8*l1*l2*l3);
LA:=strtofloat(Edit5.text);
AL:=strtofloat(Edit9.text);
tc:=strtofloat(Edit10.text);
x:=strtofloat(Edit6.text);
y:=strtofloat(Edit7.text);
z:=strtofloat(Edit8.text);
S:=2*2*l1*2*l2+2*2*l3*2*l2+2*2*l3*2*l1;
ts:=(P+AL*tc*S)/(AL*S);
t:=0;
t2:=0;
t1:=(64*W*l3*l3)/(3.14*3.14*3.14*3.14*LA);
for n:=1 to 20 do
begin
for m:=1 to 20 do
begin
t2:=t2+(sin((2*n-1)*3.14*x/(2*l1))*sin((2*m-1)*3.14*y/(2*l2))/
((2*n-1)*(2*m-1)*
((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+
(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2)))*
(2*l3/3.14)*(2*l3/3.14)))*
(1-(exp(sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*(l3-z))+
exp(-sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*(l3-z)))/
(exp(sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*l3)+
exp(-sqrt(((2*n-1)*(2*n-1)*(3.14/(2*l1))*(3.14/(2*l1))+(2*m-1)*(2*m-1)*(3.14/(2*l2))*(3.14/(2*l2))))*l3)));
end;
end;
t:=t1*t2+ts;
t:=trunc(t*1000)/1000;
label13.Caption:=floattostr(t);
label17.Caption:=floattostr(trunc(ts*1000)/1000);
end;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
ShowMessage('Для вызова помощи в программе, нажмите F1 или правую кнопку мыши');
// Переключение на русскую раскладку клавиатуры
LoadKeyboardLayout('00000419',KLF_ACTIVATE);
end;
procedure TForm1.N1Click(Sender: TObject);
begin
// вызов справки
Form2.Show;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
// разрешение ввода только цифр
if not (key in ['0'..'9', ',', #8]) then
begin
Key:=#0;
end;
end;
procedure TForm1.Edit10KeyPress(Sender: TObject; var Key: Char);
begin
// разрешение ввода только цифр и знака «-»
if not (key in ['0'..'9', ',','-', #8]) then
begin
Key:=#0;
end;
end;
end.
Приложение 2
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, TeEngine, Series, ExtCtrls, TeeProcs, Chart,
AppEvnts, ImgList, ActnList, Menus, ComCtrls, ToolWin, jpeg;
type
TForm1 = class(TForm)
….
procedure BitBtn1Click(Sender: TObject);
procedure Edit4Change(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit10KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
t,W,lz,ly,lx,LAx,LAy,LAz,x,y,z,h,maximal,ALx,ALy,ALz,tc,P,m: real;
Ey,Ez,px,py,Bx,By,Bz,KSIy,KSIz: real;
i: integer;
implementation
uses UPlot, UCoord, Unit2;
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if (Edit1.text='') or (Edit2.text='') or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit7.text='') or (Edit8.text='') or (Edit9.text='')
or (Edit10.text='') or (Edit11.text='') or (Edit12.text='') or (Edit13.text='')
or (Edit14.text='') then
ShowMessage('Заполните все поля формы')
else
begin
// проверка првильности ввода координат точек
if (strtofloat(Edit7.text)<(-1/2)*strtofloat(Edit2.text)) or (strtofloat(Edit7.text)>(1/2)*strtofloat(Edit2.text)) or
(strtofloat(Edit8.text)<(-1/2)*strtofloat(Edit3.text)) or (strtofloat(Edit8.text)>(1/2)*strtofloat(Edit3.text)) then
ShowMessage('Координаты исследуемой точки выходят за рамки параллепипеда')
else
begin
lx:=strtofloat(Edit1.text)/2;
ly:=strtofloat(Edit2.text)/2;
lz:=strtofloat(Edit3.text)/2;
P:=strtofloat(Edit4.text);
W:=(strtofloat(Edit4.text))/(8*lx*ly*lz);
LAx:=strtofloat(Edit5.text);
LAy:=strtofloat(Edit11.text);
LAz:=strtofloat(Edit12.text);
ALx:=strtofloat(Edit9.text);
ALy:=strtofloat(Edit13.text);
ALz:=strtofloat(Edit14.text);
tc:=strtofloat(Edit10.text);
y:=strtofloat(Edit7.text);
z:=strtofloat(Edit8.text);
x:=-lx;
Ez:=(lx/lz)*sqrt(LAz/LAx);
Ey:=(lx/ly)*sqrt(LAy/LAx);
Bx:=ALx*lx/LAx;
By:=ALy*ly/LAy;
Bz:=ALz*lz/LAz;
py:=sqrt((Ez*Ez/(Ey*Ey))*Bz/(1+0.5*Bz));
m:=(py*py*(exp(py)-exp(-py))/(exp(py)+exp(-py)))/(py-(exp(py)-exp(-py))/(exp(py)+exp(-py)));
KSIy:=1/(1+By/m);
KSIz:=1/(1+Bz/3);
px:=sqrt(Ey*Ey*By*KSIy+Ez*Ez*Bz*KSIz);
FPlot.BeginPlot;
h:=2*lx/1000;
for i:=1 to 1000 do
begin
t:=0;
t:=W*lx*lx/(2*Ez*Ez*LAx)*
(1-(exp(px*x/lx)+exp(-px*x/lx))/
(exp(px)+exp(-px)+(px/Bx)*(exp(px)-exp(-px))))*
(1-(exp(py*y/ly)+exp(-py*y/ly))/
(exp(py)+exp(-py)+(py/By)*(exp(py)-exp(-py))))*
(1+2/Bz-z*z/(lz*lz))+tc;
FPlot.AddPoint(x,t,clRed);
x:=x+h;
end;
FPlot.Chart1.Title.Text.Clear;
FPlot.Chart1.Title.Text.Add('График зависимости температуры от координаты X');
FPlot.Show;
FCoord.LX.Caption:='X';
end;
end;
end;
procedure TForm1.Edit4Change(Sender: TObject);
begin
if (Edit1.text<>'') and (Edit2.text<>'') and (Edit3.text<>'') and (Edit4.text<>'') then
label6.Caption:=floattostr(round(strtofloat(Edit4.Text)/(strtofloat(Edit1.Text)*strtofloat(Edit2.Text)*strtofloat(Edit3.Text))*1000)/1000);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if (Edit1.text='') or (Edit2.text='') or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit6.text='') or (Edit8.text='') or (Edit9.text='')
or (Edit10.text='') or (Edit11.text='') or (Edit12.text='') or (Edit13.text='')
or (Edit14.text='') then
ShowMessage('Заполните все поля формы')
else
begin
if (strtofloat(Edit6.text)<(-1/2)*strtofloat(Edit1.text)) or (strtofloat(Edit6.text)>(1/2)*strtofloat(Edit1.text)) or
(strtofloat(Edit8.text)<(-1/2)*strtofloat(Edit3.text)) or (strtofloat(Edit8.text)>(1/2)*strtofloat(Edit3.text)) then
ShowMessage('Координаты исследуемой точки выходят за рамки параллепипеда')
else
begin
lx:=strtofloat(Edit1.text)/2;
ly:=strtofloat(Edit2.text)/2;
lz:=strtofloat(Edit3.text)/2;
P:=strtofloat(Edit4.text);
W:=(strtofloat(Edit4.text))/(8*lx*ly*lz);
LAx:=strtofloat(Edit5.text);
LAy:=strtofloat(Edit11.text);
LAz:=strtofloat(Edit12.text);
ALx:=strtofloat(Edit9.text);
ALy:=strtofloat(Edit13.text);
ALz:=strtofloat(Edit14.text);
tc:=strtofloat(Edit10.text);
x:=strtofloat(Edit6.text);
z:=strtofloat(Edit8.text);
y:=-ly;
Ez:=(lx/lz)*sqrt(LAz/LAx);
Ey:=(lx/ly)*sqrt(LAy/LAx);
Bx:=ALx*lx/LAx;
By:=ALy*ly/LAy;
Bz:=ALz*lz/LAz;
py:=sqrt((Ez*Ez/(Ey*Ey))*Bz/(1+0.5*Bz));
m:=(py*py*(exp(py)-exp(-py))/(exp(py)+exp(-py)))/(py-(exp(py)-exp(-py))/(exp(py)+exp(-py)));
KSIy:=1/(1+By/m);
KSIz:=1/(1+Bz/3);
px:=sqrt(Ey*Ey*By*KSIy+Ez*Ez*Bz*KSIz);
FPlot.BeginPlot;
h:=2*ly/1000;
for i:=1 to 1000 do
begin
t:=0;
t:=W*lx*lx/(2*Ez*Ez*LAx)*
(1-(exp(px*x/lx)+exp(-px*x/lx))/
(exp(px)+exp(-px)+(px/Bx)*(exp(px)-exp(-px))))*
(1-(exp(py*y/ly)+exp(-py*y/ly))/
(exp(py)+exp(-py)+(py/By)*(exp(py)-exp(-py))))*
(1+2/Bz-z*z/(lz*lz))+tc;
FPlot.AddPoint(y,t,clRed);
y:=y+h;
end;
FPlot.Chart1.Title.Text.Clear;
FPlot.Chart1.Title.Text.Add('График зависимости температуры от координаты Y');
FPlot.Show;
FCoord.LX.Caption:='Y';
end;
end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if (Edit1.text='') or (Edit2.text='') or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit7.text='') or (Edit6.text='') or (Edit9.text='')
or (Edit10.text='') or (Edit11.text='') or (Edit12.text='') or (Edit13.text='')
or (Edit14.text='') then
ShowMessage('Заполните все поля формы')
else
begin
if (strtofloat(Edit7.text)<(-1/2)*strtofloat(Edit2.text)) or (strtofloat(Edit7.text)>(1/2)*strtofloat(Edit2.text)) or
(strtofloat(Edit6.text)<(-1/2)*strtofloat(Edit2.text)) or (strtofloat(Edit6.text)>(1/2)*strtofloat(Edit1.text)) then
ShowMessage('Координаты исследуемой точки выходят за рамки параллепипеда')
else
begin
lx:=strtofloat(Edit1.text)/2;
ly:=strtofloat(Edit2.text)/2;
lz:=strtofloat(Edit3.text)/2;
P:=strtofloat(Edit4.text);
W:=(strtofloat(Edit4.text))/(8*lx*ly*lz);
LAx:=strtofloat(Edit5.text);
LAy:=strtofloat(Edit11.text);
LAz:=strtofloat(Edit12.text);
ALx:=strtofloat(Edit9.text);
ALy:=strtofloat(Edit13.text);
ALz:=strtofloat(Edit14.text);
tc:=strtofloat(Edit10.text);
y:=strtofloat(Edit7.text);
x:=strtofloat(Edit6.text);
z:=-lz;
Ez:=(lx/lz)*sqrt(LAz/LAx);
Ey:=(lx/ly)*sqrt(LAy/LAx);
Bx:=ALx*lx/LAx;
By:=ALy*ly/LAy;
Bz:=ALz*lz/LAz;
py:=sqrt((Ez*Ez/(Ey*Ey))*Bz/(1+0.5*Bz));
m:=(py*py*(exp(py)-exp(-py))/(exp(py)+exp(-py)))/(py-(exp(py)-exp(-py))/(exp(py)+exp(-py)));
KSIy:=1/(1+By/m);
KSIz:=1/(1+Bz/3);
px:=sqrt(Ey*Ey*By*KSIy+Ez*Ez*Bz*KSIz);
FPlot.BeginPlot;
h:=2*lz/1000;
for i:=1 to 1000 do
begin
t:=0;
t:=W*lx*lx/(2*Ez*Ez*LAx)*
(1-(exp(px*x/lx)+exp(-px*x/lx))/
(exp(px)+exp(-px)+(px/Bx)*(exp(px)-exp(-px))))*
(1-(exp(py*y/ly)+exp(-py*y/ly))/
(exp(py)+exp(-py)+(py/By)*(exp(py)-exp(-py))))*
(1+2/Bz-z*z/(lz*lz))+tc;
FPlot.AddPoint(z,t,clRed);
z:=z+h;
end;
FPlot.Chart1.Title.Text.Clear;
FPlot.Chart1.Title.Text.Add('График зависимости температуры от координаты Z');
FPlot.Show;
FCoord.LX.Caption:='Z';
end;
end;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
if (Edit1.text='') or (Edit2.text='') or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit7.text='') or (Edit8.text='') or (Edit9.text='')
or (Edit10.text='') or (Edit6.text='') or (Edit11.text='') or (Edit12.text='') or (Edit13.text='')
or (Edit14.text='') then
ShowMessage('Заполните все поля формы')
else
begin
if (strtofloat(Edit6.text)<(-1/2)*strtofloat(Edit1.text)) or (strtofloat(Edit6.text)>(1/2)*strtofloat(Edit1.text)) or
(strtofloat(Edit8.text)<(-1/2)*strtofloat(Edit3.text)) or (strtofloat(Edit8.text)>(1/2)*strtofloat(Edit3.text)) or
(strtofloat(Edit7.text)<(-1/2)*strtofloat(Edit2.text)) or (strtofloat(Edit7.text)>(1/2)*strtofloat(Edit2.text)) then
ShowMessage('Координаты исследуемой точки выходят за рамки параллепипеда')
else
begin
lx:=strtofloat(Edit1.text)/2;
ly:=strtofloat(Edit2.text)/2;
lz:=strtofloat(Edit3.text)/2;
P:=strtofloat(Edit4.text);
W:=(strtofloat(Edit4.text))/(8*lx*ly*lz);
LAx:=strtofloat(Edit5.text);
LAy:=strtofloat(Edit11.text);
LAz:=strtofloat(Edit12.text);
ALx:=strtofloat(Edit9.text);
ALy:=strtofloat(Edit13.text);
ALz:=strtofloat(Edit14.text);
tc:=strtofloat(Edit10.text);
x:=strtofloat(Edit6.text);
y:=strtofloat(Edit7.text);
z:=strtofloat(Edit8.text);
Ez:=(lx/lz)*sqrt(LAz/LAx);
Ey:=(lx/ly)*sqrt(LAy/LAx);
Bx:=ALx*lx/LAx;
By:=ALy*ly/LAy;
Bz:=ALz*lz/LAz;
py:=sqrt((Ez*Ez/(Ey*Ey))*Bz/(1+0.5*Bz));
m:=(py*py*(exp(py)-exp(-py))/(exp(py)+exp(-py)))/(py-(exp(py)-exp(-py))/(exp(py)+exp(-py)));
KSIy:=1/(1+By/m);
KSIz:=1/(1+Bz/3);
px:=sqrt(Ey*Ey*By*KSIy+Ez*Ez*Bz*KSIz);
t:=0;
t:=W*lx*lx/(2*Ez*Ez*LAx)*
(1-(exp(px*x/lx)+exp(-px*x/lx))/
(exp(px)+exp(-px)+(px/Bx)*(exp(px)-exp(-px))))*
(1-(exp(py*y/ly)+exp(-py*y/ly))/
(exp(py)+exp(-py)+(py/By)*(exp(py)-exp(-py))))*
(1+2/Bz-z*z/(lz*lz))+tc;
t:=trunc(t*1000)/1000;
label13.Caption:=floattostr(t);
end;
end;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
ShowMessage('Для вызова помощи в программе нажмите F1 или правую клавишу мыши.');
LoadKeyboardLayout('00000419',KLF_ACTIVATE);
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9', ',', #8]) then
begin
Key:=#0;
end;
end;
procedure TForm1.Edit10KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9', ',','-', #8]) then
begin
Key:=#0;
end;
end;
end.
Приложение 3
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, TeEngine, Series, ExtCtrls, TeeProcs, Chart,
AppEvnts, ImgList, ActnList, Menus, ComCtrls, ToolWin, jpeg;
type
TForm1 = class(TForm)
….
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit10KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
t,W,lz,ly,lx,LAx,LAy,LAz,x,y,z,h,ALx,ALy,ALz,tc,P,k: real;
Ey,Ez,g1,g2,Bx,By,Bz,KSIx,KSIz: real;
i: integer;
implementation
uses UPlot, UCoord, Unit2;
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if (Edit1.text='') or (Edit2.text='') or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit7.text='') or (Edit8.text='') or (Edit9.text='')
or (Edit10.text='') or (Edit11.text='') or (Edit12.text='') or (Edit13.text='')
or (Edit14.text='') then
ShowMessage('Заполните все поля формы')
else
begin
if (strtofloat(Edit7.text)<(-1/2)*strtofloat(Edit2.text)) or (strtofloat(Edit7.text)>(1/2)*strtofloat(Edit2.text)) or
(strtofloat(Edit8.text)<(-1/2)*strtofloat(Edit3.text)) or (strtofloat(Edit8.text)>(1/2)*strtofloat(Edit3.text)) then
ShowMessage('Координаты исследуемой точки выходят за рамки параллепипеда')
else
begin
lx:=strtofloat(Edit1.text)/2;
ly:=strtofloat(Edit2.text)/2;
lz:=strtofloat(Edit3.text)/2;
P:=strtofloat(Edit4.text);
W:=strtofloat(Edit4.text)/(4*lx*lz);
LAx:=strtofloat(Edit5.text);
LAy:=strtofloat(Edit11.text);
LAz:=strtofloat(Edit12.text);
ALx:=strtofloat(Edit9.text);
ALy:=strtofloat(Edit13.text);
ALz:=strtofloat(Edit14.text);
tc:=strtofloat(Edit10.text);
y:=strtofloat(Edit7.text);
z:=strtofloat(Edit8.text);
x:=-lx;
Ez:=(lx/lz)*sqrt(LAz/LAx);
Ey:=(lx/ly)*sqrt(LAy/LAx);
Bx:=ALx*lx/LAx;
By:=ALy*ly/LAy;
Bz:=ALz*lz/LAz;
KSIz:=1/(1+Bz/3);
g2:=Bz*Ez*Ez*KSIz;
k:=(g2*g2*(exp(g2)-exp(-g2))/(exp(g2)+exp(-g2)))/(g2-(exp(g2)-exp(-g2))/(exp(g2)+exp(-g2)));
KSIx:=1/(1+By/k);
g1:=sqrt((Bx*KSIx+g2*g2)/(Ey*Ey));
FPlot.BeginPlot;
h:=2*lx/1000;
for i:=1 to 1000 do
begin
t:=0;
t:=W*lx*lx*0.5*g1*g1/(Ez*Ez*LAx*ly*By)*
(exp(g1*y/ly)+exp(-g1*y/ly))/
(exp(g1)+exp(-g1)+(g1/By)*(exp(g1)-exp(-g1)))*
(1-(exp(g2*x/lx)+exp(-g2*x/lx))/
(exp(g2)+exp(-g2)+(g2/Bx)*(exp(g2)-exp(-g2))))*
(1+2/Bz-z*z/(lz*lz))+tc;
FPlot.AddPoint(x,t,clRed);
x:=x+h;
end;
FPlot.Chart1.Title.Text.Clear;
FPlot.Chart1.Title.Text.Add('График зависимости температуры от координаты X');
FPlot.Show;
FCoord.LX.Caption:='X';
end;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if (Edit1.text='') or (Edit2.text='') or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit6.text='') or (Edit8.text='') or (Edit9.text='')
or (Edit10.text='') or (Edit11.text='') or (Edit12.text='') or (Edit13.text='')
or (Edit14.text='') then
ShowMessage('Заполните все поля формы')
else
begin
if (strtofloat(Edit6.text)<(-1/2)*strtofloat(Edit1.text)) or (strtofloat(Edit6.text)>(1/2)*strtofloat(Edit1.text)) or
(strtofloat(Edit8.text)<(-1/2)*strtofloat(Edit3.text)) or (strtofloat(Edit8.text)>(1/2)*strtofloat(Edit3.text)) then
ShowMessage('Координаты исследуемой точки выходят за рамки параллепипеда')
else
begin
lx:=strtofloat(Edit1.text)/2;
ly:=strtofloat(Edit2.text)/2;
lz:=strtofloat(Edit3.text)/2;
P:=strtofloat(Edit4.text);
W:=strtofloat(Edit4.text)/(4*lx*lz);
LAx:=strtofloat(Edit5.text);
LAy:=strtofloat(Edit11.text);
LAz:=strtofloat(Edit12.text);
ALx:=strtofloat(Edit9.text);
ALy:=strtofloat(Edit13.text);
ALz:=strtofloat(Edit14.text);
tc:=strtofloat(Edit10.text);
x:=strtofloat(Edit6.text);
z:=strtofloat(Edit8.text);
y:=-ly;
Ez:=(lx/lz)*sqrt(LAz/LAx);
Ey:=(lx/ly)*sqrt(LAy/LAx);
Bx:=ALx*lx/LAx;
By:=ALy*ly/LAy;
Bz:=ALz*lz/LAz;
KSIz:=1/(1+Bz/3);
g2:=Bz*Ez*Ez*KSIz;
k:=(g2*g2*(exp(g2)-exp(-g2))/(exp(g2)+exp(-g2)))/(g2-(exp(g2)-exp(-g2))/(exp(g2)+exp(-g2)));
KSIx:=1/(1+By/k);
g1:=sqrt((Bx*KSIx+g2*g2)/(Ey*Ey));
FPlot.BeginPlot;
h:=2*ly/1000;
for i:=1 to 1000 do
begin
t:=0;
t:=W*lx*lx*0.5*g1*g1/(Ez*Ez*LAx*ly*By)*
(exp(g1*y/ly)+exp(-g1*y/ly))/
(exp(g1)+exp(-g1)+(g1/By)*(exp(g1)-exp(-g1)))*
(1-(exp(g2*x/lx)+exp(-g2*x/lx))/
(exp(g2)+exp(-g2)+(g2/Bx)*(exp(g2)-exp(-g2))))*
(1+2/Bz-z*z/(lz*lz))+tc;
FPlot.AddPoint(y,t,clRed);
y:=y+h;
end;
FPlot.Chart1.Title.Text.Clear;
FPlot.Chart1.Title.Text.Add('График зависимости температуры от координаты Y');
FPlot.Show;
FCoord.LX.Caption:='Y';
end;
end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if (Edit1.text='') or (Edit2.text='') or (Edit3.text='') or (Edit4.text='')
or (Edit5.text='') or (Edit7.text='') or (Edit6.text='') or (Edit9.text='')
or (Edit10.text='') or (Edit11.text='') or (Edit12.text='') or (Edit13.text='')
or (Edit14.text='') then
ShowMessage('Заполните все поля формы')
else
begin
if (strtofloat(Edit7.text)<(-1/2)*strtofloat(Edit2.text)) or (strtofloat(Edit7.text)>(1/2)*strtofloat(Edit2.text)) or
(strtofloat(Edit6.text)<(-1/2)*strtofloat(Edit2.text)) or (strtofloat(Edit6.text)>(1/2)*strtofloat(Edit1.text)) then
ShowMessage('Координаты исследуемой точки выходят за рамки параллепипеда')
else
begin
lx:=strtofloat(Edit1.text)/2;
ly:=strtofloat(Edit2.text)/2;
lz:=strtofloat(Edit3.text)/2;
P:=strtofloat(Edit4.text);
W:=strtofloat(Edit4.text)/(4*lx*lz);
LAx:=strtofloat(Edit5.text);
LAy:=strtofloat(Edit11.text);
LAz:=strtofloat(Edit12.text);
ALx:=strtofloat(Edit9.text);
ALy:=strtofloat(Edit13.text);
ALz:=strtofloat(Edit14.text);
tc:=strtofloat(Edit10.text);
y:=strtofloat(Edit7.text);
x:=strtofloat(Edit6.text);
z:=-lz;
Ez:=(lx/lz)*sqrt(LAz/LAx);
Ey:=(lx/ly)*sqrt(LAy/LAx);
Bx:=ALx*lx/LAx;
By:=ALy*ly/LAy;
Bz:=ALz*lz/LAz;
KSIz:=1/(1+Bz/3);
Подобные документы
Идентификация объектов методом наименьших квадратов. Анализ коэффициентов парной, частной и множественной корреляции. Построение линейной модели и модели с распределенными параметрами. Итерационный численный метод нахождения корня (нуля) заданной функции.
курсовая работа [893,3 K], добавлен 20.03.2014Программный комплекс для расчета тепловых потерь через печные ограждения. Общие сведения об огнеупорных стенках. Технические характеристики огнеупоров. Разработка программного обеспечения для выполнения расчетов тепловых потерь через многослойную стенку.
дипломная работа [5,3 M], добавлен 10.06.2012Установка программ Winamp и распознавания текста ABBYY FineReader 11 Professional Edition. Использование в современной компании программы бухгалтерского учета 1С–Предприятие. Управление распределенными информационными базами. Установка драйверов защиты.
отчет по практике [4,0 M], добавлен 18.05.2015Техническое задание на проектирование системы автоматизированного решения задач механики. Разработка комплекта математических моделей систем с распределенными параметрами при действии динамических нагрузок. Выбор базового программного обеспечения.
дипломная работа [679,7 K], добавлен 15.01.2010Сравнение графиков заданной функции и интерполяционных полиномов на определенном интервале при двух вариантах выбора узлов (равномерно с шагом, по Чебышеву). Создание программы на основе метода Ньютона для построения графиков и расчета значений функции.
контрольная работа [1,1 M], добавлен 07.07.2012Рассмотрение архитектуры "файл-сервер" и двух- и трехуровневых архитектур "клиент-сервер". Модель сервера приложений и свойства "идеальной" системы управления распределенными базами данных. Способы распределения функций обработки логики запроса.
презентация [60,2 K], добавлен 19.08.2013Реализация концепции геопространственных информационных технологий, в рамках которой программист создает приложения, используя стандартные языки программирования. Применение ГИС для эффективного контроля за территориально-распределенными объектами.
реферат [2,4 M], добавлен 12.01.2015Обзор и анализ существующих методик управления проектами и оценки трудоемкости. Разработка алгоритма задания параметров и вычисления трудоемкости и стоимости программного продукта. Отладка и тестирование продукта. Разработка руководства пользователя.
дипломная работа [2,5 M], добавлен 18.11.2017Математические методы решения задачи расчета химического равновесия. Структура программного средства. Схема отношений базы данных химических элементов и соединений. Программная реализация Генетического Алгоритма для расчета химического равновесия.
дипломная работа [6,6 M], добавлен 07.07.2012Разработка и реализация компонентов "Интерфейс администратора", "Виртуальная лаборатория" системы удаленного доступа к вычислительным ресурсам. Определение функций клиента. Построение ER-модели базы данных системы УД и УРВР; архитектура и требования.
дипломная работа [5,5 M], добавлен 26.05.2015