VB.net - тепловой баланс
Представляю вам небольшую программу, на основе лабораторной работы.
* * *
Когда нет под рукой термометра, а необходимо получить нужную температуру, можно воспользоваться следующей формулой:
t = (t1 * V1 + t2 * V2) / (V1 + V2)
Где
t - конечная температура,
t1,t2 - начальные температуры жидкостей
V1,V2 - начальные объемы соответствующих жидкостей
Таким образом, мы сможем подобрать любую температуру из диапазона, для воды это примерно от 18°- 24° (комнатная температура) до 100° (температура кипения воды).
Другой задачей является получение жидкости заданного объема и температуры - для этого необходимо узнать сколько жидкости с разной температурой необходимо добавить.
Таким образом можно решить 3 различных задачи:
- Найти общую температуру
- Найти начальные объемы
- Определить одну из температур
Для решения этих задач выведем соответствующие формулы.
- Найти общую температуру
T = (T1 * V1 + T2 * V2) / (V1 + V2)
V = V1 + V2
- Найти начальные объемы
V2 = V * (T - T1) / (T2 - T1)
V1 = V - V2
- Определить одну из температур
V = V1 + V2
T1 = (T * V - T2 * V2) / V1
Интерфейс нашей программы будет таким:
на форму поместим
- 3 RadioButton - для выбора задачи
- 3 GroupBox - для ввода условий и вывода ответов
- Кнопку - для решения (при изменении значений в нумераторе - так же будет выполнятся решение)
- Ярлыки - для подписей
В GroupBox помешаем нумераторы(NumericUpDown) и Ярлыки.
Свойства нумераторов(NumericUpDown):
-DecimalPlaces = 2 (для объемов) и 3 (для температур)
-Maximum = 1000
-Value - отличное от нуля
-Minimum = 0,01 (для объемов) и 0 (для температур, если работаем только с водой)
Все нумераторы и ярлыки ответов называем соответственно.
- Найти общую температуру
gbT
numV1
numV2
lblV
numt1
numt2
lblt
- Найти начальные объемы
gbV2
numVVt1
numVVt2
numVVt
numVVv
lblVVv1
lblVVv2
- Определить одну из температур
gbTT
numTTv1
numTTv2
lblTTv
numTTt
numTTt2
lblTTt1
Где
gb... - GroupBox
num... - NumericUpDown
lbl... - label (ярлыки)
---
Переходим к коду.
Public Class Form1
'Задаем переменные
Dim V As Decimal 'общий объем
Dim V1 As Decimal 'объем 1 жидкости
Dim V2 As Decimal 'объем 2 жидкости
Dim T As Decimal 'полученная температура
Dim T1 As Decimal 'температура 1 жидкости
Dim T2 As Decimal 'температура 2 жидкости
'При загрузке, выравниваем все GroupBox (gb...) и меняем размер формы (me)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
'374; 475
Me.Width = 374
Me.Height = 475
gbT.Top = 137
gbT.Left = 52
gbTT.Top = 137
gbTT.Left = 52
gbV2.Top = 137
gbV2.Left = 52
End Sub
'подпрограмма выполнения расчетов
Sub START()
'----- T---Найти общую температуру-
If rbT.Checked = True Then
V1 = numV1.Value
V2 = numV2.Value
T1 = numt1.Value
T2 = numt2.Value
If V1 <> 0 Or V2 <> 0 Then
V = V1 + V2
T = (T1 * V1 + T2 * V2) / (V1 + V2)
lblt.Text = Math.Round(T, 1)
lblV.Text = Math.Round(V, 2)
Else
lblt.Text = "-"
lblV.Text = "-"
End If
End If
'---END-- T----
'----- V1V2---Найти начальные объемы -
If rbV2.Checked = True Then
T = numVVt.Value
T1 = numVVt1.Value
T2 = numVVt2.Value
V = numVVv.Value
If (T2 - T1) <> 0 Then
V2 = V * (T - T1) / (T2 - T1)
V1 = V - V2
lblVVv1.Text = Math.Round(V1, 2)
lblVVv2.Text = Math.Round(V2, 2)
Else
lblVVv1.Text = "-"
lblVVv2.Text = "-"
End If
End If
'---END-- V1V2----
'----- t1t2---Определить одну из температур-
If rbT1.Checked = True Then
V1 = numTTv1.Value
V2 = numTTv2.Value
T = numTTt.Value
T2 = numTTt2.Value
If V1 <> 0 Then
V = V1 + V2
T1 = (T * V - T2 * V2) / V1
lblTTt1.Text = Math.Round(T1, 1)
lblTTv.Text = Math.Round(V, 2)
Else
lblTTt1.Text = "-"
lblTTv.Text = "-"
End If
End If
'---END-- t1t2----
End Sub
'меняем обозначения и выбираем нужное решение
Private Sub rbT_CheckedChanged(sender As Object, e As EventArgs) Handles rbT.CheckedChanged
lblName.Text = "Найти общую температуру"
gbT.Visible = True
gbTT.Visible = False
gbV2.Visible = False
START()
End Sub
'меняем обозначения и выбираем нужное решение
Private Sub rbV2_CheckedChanged(sender As Object, e As EventArgs) Handles rbV2.CheckedChanged
lblName.Text = "Найти начальные объемы "
gbT.Visible = False
gbTT.Visible = False
gbV2.Visible = True
START()
End Sub
'меняем обозначения и выбираем нужное решение
Private Sub rbT1_CheckedChanged(sender As Object, e As EventArgs) Handles rbT1.CheckedChanged
lblName.Text = "Определить одну из температур"
gbT.Visible = False
gbTT.Visible = True
gbV2.Visible = False
START()
End Sub
'выполнение расчетов
'по нажатию на кнопку
Private Sub cmdOk_Click(sender As Object, e As EventArgs) Handles cmdOk.Click
START()
End Sub
'выполнение расчетов
'по нажатию на нумераторы
Private Sub numV1_ValueChanged(sender As Object, e As EventArgs) Handles numV1.ValueChanged
START()
End Sub
Private Sub numV2_ValueChanged(sender As Object, e As EventArgs) Handles numV2.ValueChanged
START()
End Sub
Private Sub numt1_ValueChanged(sender As Object, e As EventArgs) Handles numt1.ValueChanged
START()
End Sub
Private Sub numt2_ValueChanged(sender As Object, e As EventArgs) Handles numt2.ValueChanged
START()
End Sub
Private Sub numVVt1_ValueChanged(sender As Object, e As EventArgs) Handles numVVt1.ValueChanged
START()
End Sub
Private Sub numVVt2_ValueChanged(sender As Object, e As EventArgs) Handles numVVt2.ValueChanged
START()
End Sub
Private Sub numVVt_ValueChanged(sender As Object, e As EventArgs) Handles numVVt.ValueChanged
START()
End Sub
Private Sub numVVv_ValueChanged(sender As Object, e As EventArgs) Handles numVVv.ValueChanged
START()
End Sub
Private Sub numTTv1_ValueChanged(sender As Object, e As EventArgs) Handles numTTv1.ValueChanged
START()
End Sub
Private Sub numTTv2_ValueChanged(sender As Object, e As EventArgs) Handles numTTv2.ValueChanged
START()
End Sub
Private Sub numTTt_ValueChanged(sender As Object, e As EventArgs) Handles numTTt.ValueChanged
START()
End Sub
Private Sub numTTt2_ValueChanged(sender As Object, e As EventArgs) Handles numTTt2.ValueChanged
START()
End Sub
End Class
В начало
|