Разработка программного продукта для расчета тепловых коэффициентов для тел с распределенными и сосредоточенными источниками энергии
Структура и описание программ для расчета тепловых коэффициентов для параллелепипеда с равномерно распределенными источниками тепла, равномерно распределенными на двух противоположных гранях и грани которого находятся в состоянии теплообмена со средой.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.06.2015 |
Размер файла | 523,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
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*lz/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(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)/(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);
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;
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));
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;
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.
Приложение 4
unit UPlot;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, ActnList, Menus, ComCtrls, ToolWin, TeEngine, Series,
ExtCtrls, TeeProcs, Chart;
type
TFPlot = class(TForm)
procedure ACursMouseExecute(Sender: TObject);
procedure Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Chart1DblClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Chart1AfterDraw(Sender: TObject);
procedure ARepaintExecute(Sender: TObject);
procedure AMaxExecute(Sender: TObject);
procedure AMinExecute(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ACalcExecute(Sender: TObject);
procedure ASaveBMPExecute(Sender: TObject);
procedure ASaveWMFExecute(Sender: TObject);
procedure ASaveEMFExecute(Sender: TObject);
procedure ACopyBMPExecute(Sender: TObject);
procedure ACopyWMFExecute(Sender: TObject);
procedure ACopyEMFExecute(Sender: TObject);
procedure APrintPExecute(Sender: TObject);
procedure AExitExecute(Sender: TObject);
procedure ACursorsExecute(Sender: TObject);
procedure AHelpExecute(Sender: TObject);
procedure FCoordClose;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
// Прорисовка изображений курсоров графика
procedure SetCursor;
// Запись координат курсоров в окно FCoord
procedure WriteValue;
public
{ Public declarations }
procedure BeginPlot;
procedure AddPoint(X,Y:real;Color:TColor);
procedure NullPoint(X:real);
end;
var
FPlot: TFPlot;
implementation
uses UCoord, Math, ShellAPI;
{$R *.DFM}
// IndCurs1 - индекс первого курсора
// IndCurs2 - индекс второго курсора
// HCursor - шаг перемещения курсора
var IndCurs1, IndCurs2, HCursor: LongInt;
ABad: array of real; // Массив областей недопустимых значений
Bad: boolean;
procedure TFPlot.BeginPlot;
begin
// Очистка серии прежнего графика
Series1.Clear;
// Обнуление массива недопустимых значений аргумента
SetLength(ABad,0);
// Сброс флага, сообщающего о том,
// что предыдущее значение аргумента недопустимое
Bad := false;
// Чтобы восстановить масштаб, если он перед этим изменялся
FPlot.Chart1.UndoZoom;
end;
procedure TFPlot.AddPoint(X,Y:real;Color:TColor);
begin
// Занесение очередной точки в график
if(FloatToStr(Y) = 'NAN')or
(FloatToStr(Y) = '-NAN')or
(FloatToStr(Y) = 'INF')or
(FloatToStr(Y) = '-INF')
then NullPoint(X)
else begin
Series1.AddXY(X,Y,'',Color);
// Сброс флага, сообщающего о том,
// что предыдущее значение аргумента недопустимое
Bad := false;
end;
end;
procedure TFPlot.NullPoint(X:real);
begin
// Если вычисление точки дало ошибку
if Bad
// Если прошлая точка тоже была недопустимой
then ABad[High(ABad)] := X
else begin
// Если прошлая точка была допустимой,
// то значение аргумента заносится как начальная и
// конечная точка очередного диапазона
SetLength(ABad,Length(ABad)+2);
ABad[High(ABad)-1] := X;
ABad[High(ABad)] := X;
// Установка флага, сообщающего о том,
// что предыдущее значение аргумента недопустимое
Bad := true;
end;
end;
procedure TFPlot.ACursMouseExecute(Sender: TObject);
// Включение/выключение курсора мыши
begin
ACursMouse.Checked:= not ACursMouse.Checked;
if ACursMouse.Checked
then begin
Series1.Cursor := crCross;
FCoord.Visible := true;
end
else begin
Series1.Cursor := crDefault;
if (not ACursors.Checked)
then FCoord.Visible := false
else begin
FCoord.XLabel.Caption := '';
FCoord.YLabel.Caption := '';
end;
end
end;
procedure TFPlot.ACursorsExecute(Sender: TObject);
// Включение/выключение курсоров графика
begin
ACursors.Checked:= not ACursors.Checked;
if ACursors.Checked
then begin
ACursors.ImageIndex:=4;
IndCurs1:=0;
IndCurs2:=0;
SetCursor;
WriteValue;
FCoord.Visible := true;
SetFocus; // Переключение фокуса на данную форму
end
else begin
ACursors.ImageIndex:=3;
SetCursor;
if (not ACursMouse.Checked)
then FCoord.Visible := false
else begin
with FCoord do begin
XLabel2.Caption := '';
YLabel2.Caption := '';
XLabel3.Caption := '';
YLabel3.Caption := '';
XLDelta.Caption := '';
YLDelta.Caption := '';
end;
end;
end;
end;
procedure TFPlot.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
// Отображение координат курсора мыши
var XData, YData: double;
begin
if (Series1.Cursor = crCross) then begin
Series1.GetCursorValues(XData, YData);
with FCoord do begin
XLabel.Caption := FloatToStrF(XData,ffGeneral,7,0);
YLabel.Caption := FloatToStrF(YData,ffGeneral,7,0);
end;
end;
end;
procedure TFPlot.SetCursor;
// Поиск координат и прорисовка курсоров графика
var XPos, YPos, Pos: LongInt;
PenMode: TPenMode;
begin
with Chart1 do begin
PenMode := Canvas.Pen.Mode;
Canvas.Pen.Color:=clBlack;
Canvas.Pen.Mode := pmNotXor;
XPos:=Series1.CalcXPos(IndCurs1);
YPos:=Series1.CalcYPos(IndCurs1);
Canvas.MoveTo(XPos,ChartRect.Bottom);
Canvas.LineTo(XPos, ChartRect.Top);
Canvas.MoveTo(ChartRect.Left, YPos);
Canvas.LineTo(ChartRect.Right, YPos);
Pos:=Series1.CalcXPos(IndCurs2);
if (Pos <> XPos) then begin
Canvas.MoveTo(Pos,ChartRect.Bottom);
Canvas.LineTo(Pos, ChartRect.Top);
end;
Pos:=Series1.CalcYPos(IndCurs2);
if (Pos <> YPos) then begin
Canvas.MoveTo(ChartRect.Left, Pos);
Canvas.LineTo(ChartRect.Right, Pos);
end;
Canvas.Pen.Mode := PenMode;
end;
end;
procedure TFPlot.WriteValue;
// Отображение координат курсоров
var X1, X2, Y1, Y2: double;
begin
X1:=Series1.XValue[IndCurs1];
X2:=Series1.XValue[IndCurs2];
Y1:=Series1.YValue[IndCurs1];
Y2:=Series1.YValue[IndCurs2];
with FCoord do begin
XLabel2.Caption := FloatToStrF(X1,ffGeneral,7,0);
YLabel2.Caption := FloatToStrF(Y1,ffGeneral,7,0);
XLabel3.Caption := FloatToStrF(X2,ffGeneral,7,0);
YLabel3.Caption := FloatToStrF(Y2,ffGeneral,7,0);
XLDelta.Caption := FloatToStrF(X1-X2,ffGeneral,7,0);
YLDelta.Caption := FloatToStrF(Y1-Y2,ffGeneral,7,0);
end;
end;
procedure TFPlot.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
// В режиме отображения курсоров графика перемещает курсоры
var IndNew:LongInt;
begin
if (ACursors.Checked) then begin
if (ssShift in Shift)
then IndNew:=IndCurs2
else IndNew:=IndCurs1;
case Key of
VK_Left: Dec(IndNew, HCursor);
VK_Right: Inc(IndNew, HCursor);
VK_Home: IndNew:=0;
VK_End: IndNew:= Series1.Count-1;
else exit;
end;
// Ограничение перемещения курсора
if (IndNew < 0) then IndNew := 0;
if (IndNew > Series1.Count-1) then IndNew := Series1.Count-1;
// Ускорение перемещения курсора
Inc(HCursor);
SetCursor; // Стирание прежнего курсора
if (ssShift in Shift)
then IndCurs2:=IndNew
else IndCurs1:=IndNew;
SetCursor; // Рисование нового курсора
WriteValue;
end;
end;
procedure TFPlot.Chart1AfterDraw(Sender: TObject);
// При перерисовке изображения прорисовывает курсоры
// отображает области недопустимых значений
var i: integer;
X1, X2 :longint;
begin
if(ACursors.Checked) then SetCursor;
if (Length(ABad) > 0)
then begin
FPlot.Chart1.Canvas.Brush.Color := clSilver;
FPlot.Chart1.Canvas.Pen.Color := clBlack;
FPlot.Chart1.Canvas.Brush.Style := bsSolid;
i:=0;
repeat
X1 := FPlot.Series1.CalcXPosValue(Max(ABad[i],FPlot.Series1.MinXValue));
X2 := FPlot.Series1.CalcXPosValue(Min(ABad[i+1],FPlot.Series1.MaxXValue));
if(X1 = X2) then begin
// Раздвигаются границы области, если они совпадают
Dec(X1,2);
Inc(X2,2);
end;
FPlot.Chart1.Canvas.Rectangle(X1,
FPlot.Chart1.ChartRect.Top,
X2,
FPlot.Chart1.ChartRect.Bottom);
inc(i,2);
until (i >= Length(ABad));
end;
end;
procedure TFPlot.FCoordClose;
// Выключение курсоров
begin
ACursMouse.Checked := false;
if(ACursors.Checked) then begin
SetCursor;
ACursors.Checked := false;
ACursors.ImageIndex:=3;
end;
end;
procedure TFPlot.ARepaintExecute(Sender: TObject);
// Перерисовка изображения
begin
Chart1.Repaint;
end;
procedure TFPlot.AMaxExecute(Sender: TObject);
// Установка курсора на максимум
var i: integer;
YMax: double;
begin
// Стирание прежнего курсора
if ACursors.Checked then SetCursor;
YMax := -1.7E308;
for i:=0 to Series1.LastValueIndex do
if (Series1.YValues[i] > YMax)
then begin
YMax := Series1.YValues[i];
IndCurs1 := i;
end;
IndCurs2 := 0;
SetCursor;
WriteValue;
FCoord.Visible := true;
ACursors.Checked := true;
ACursors.ImageIndex:=4;
SetFocus;
end;
procedure TFPlot.AMinExecute(Sender: TObject);
// Установка курсора на минимум
var i: integer;
YMin: double;
begin
// Стирание прежнего курсора
if ACursors.Checked then SetCursor;
YMin := 1.7E308;
for i:=0 to Series1.LastValueIndex do
if (Series1.YValues[i] < YMin)
then begin
YMin := Series1.YValues[i];
IndCurs1 := i;
end;
IndCurs2 := 0;
SetCursor;
WriteValue;
FCoord.Visible := true;
ACursors.Checked := true;
ACursors.ImageIndex:=4;
SetFocus;
end;
procedure TFPlot.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
HCursor := 1;
end;
procedure TFPlot.ACalcExecute(Sender: TObject);
// Вызов "Калькулятора"
begin
ShellExecute(Handle,'open','Calc',nil,nil,SW_RESTORE);
end;
procedure TFPlot.ASaveBMPExecute(Sender: TObject);
// Сохранят график в формате .bmp
begin
with SaveDialog1 do begin
DefaultExt:='bmp';
FilterIndex:=1;
if(SaveDialog1.Execute)
then Chart1.SaveToBitmapFile(SaveDialog1.FileName);
end;
end;
procedure TFPlot.ASaveWMFExecute(Sender: TObject);
// Сохранят график в формате .wmf
begin
with SaveDialog1 do begin
DefaultExt:='wmf';
FilterIndex:=3;
if(SaveDialog1.Execute)
then Chart1.SaveToMetafile(SaveDialog1.FileName);
end;
end;
procedure TFPlot.ASaveEMFExecute(Sender: TObject);
// Сохранят график в формате .emf
begin
with SaveDialog1 do begin
DefaultExt:='emf';
FilterIndex:=2;
if(SaveDialog1.Execute)
then Chart1.SaveToMetafileEnh(SaveDialog1.FileName);
end;
end;
procedure TFPlot.ACopyBMPExecute(Sender: TObject);
// Копирует график в Clipboard в формате .bmp
begin
Chart1.CopyToClipboardBitmap;
end;
procedure TFPlot.ACopyWMFExecute(Sender: TObject);
// Копирует график в Clipboard в формате .wmf
begin
Chart1.CopyToClipboardMetafile(false);
end;
procedure TFPlot.ACopyEMFExecute(Sender: TObject);
// Копирует график в Clipboard в формате .emf
begin
Chart1.CopyToClipboardMetafile(true);
end;
procedure TFPlot.APrintPExecute(Sender: TObject);
// Печать графика
var i: integer;
begin
if (PrintDialog1.Execute) then
for i:=1 to PrintDialog1.Copies do
if (Sender = APrintP)
then Chart1.PrintPortrait
else Chart1.PrintLandscape;
end;
procedure TFPlot.Chart1DblClick(Sender: TObject);
// Восстановление масштаба по умолчанию
begin
Chart1.UndoZoom;
end;
procedure TFPlot.AExitExecute(Sender: TObject);
// Завершение работы приложения
begin
Application.Terminate;
end;
procedure TFPlot.AHelpExecute(Sender: TObject);
// Вызов справки
begin
Application.HelpCommand(HELP_FINDER,0);
end;
procedure TFPlot.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if(ACursors.Checked or ACursMouse.Checked)
then FCoord.Close;
end;
procedure TFPlot.FormCreate(Sender: TObject);
begin
Series1.XValues.Order := loNone;
end;
end.
Окно работы с курсором:
unit UCoord;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TFCoord = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FCoord: TFCoord;
implementation
uses UPlot;
{$R *.dfm}
procedure TFCoord.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FPlot.FCoordClose;
end;
end.
Размещено на Allbest.ru
Подобные документы
Идентификация объектов методом наименьших квадратов. Анализ коэффициентов парной, частной и множественной корреляции. Построение линейной модели и модели с распределенными параметрами. Итерационный численный метод нахождения корня (нуля) заданной функции.
курсовая работа [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