Библиотека Диа-Клуба

Глава 3

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

       Как говорилось выше, формула расчета компенсационной дозы слишком сложна, чтобы изо дня в день рассчитывать ее вручную. Во-первых, это быстро надоест. Во-вторых, ошибки неизбежны. В-третьих, это долго. Надо доверить этот расчет тому, кто это делает лучше, быстрее и точнее. При этом освободить себя от всей рутинной работы. Определение дозы надо свести лишь к тому, чтобы сказать, что и сколько я собираюсь съесть и мгновенно получить нужную компенсационную дозу и рекомендации по ее распределению на БД и МД для тех, кто пользуется комплексом ультракороткий инсулин+короткий инсулин.

       Естественно, при выборе этого «расчетчика», взгляд останавливается сна персональном компьютере. Кому, как не ему заниматься этим делом. Но компьютеру нужна программа, в которой будет четко расписан алгоритм расчетах в программном коде. Впрочем, прит современном уровне развития языков программирования, это не проблема. Причем, эту программу можно написать на разных языках программирования. Будь-то С++, Delphi, Visual Basic и т.д.

       Эта программа должна иметь :
      -базу данных продуктов с указанием их характеристик (содержание углеводов, белков, жиров в 100 граммах продукта) и ГИ . Т.е. данные, которые пишутся на упаковках продуктах, в книгах по кулинарии и т.д.
      -программа должна уметь рассчитывать т.н. «сложные блюда», состоящие из различных компонентов согласно рецептов, определять их характеристики и хранить в базе данных
      -программа должна уметь делать предварительные расчеты, которые могут быть полезны для определения компенсационных доз в «полевых условиях»
      -программа должна иметь дополнительные функции по определению рациональности питания, суточного каллоража и другие функции
      -программа должна иметь дружеский интерфейс, позволяющий работать с ней и людям, не обремененным большими познаниями в компьютерной технике
      -программа должна быть адаптирована не только для настольных ПК, но и для «карманных» ПК и мобильных телефонов

       Программа, о которой пойдет речь в следующей главе, написана на объектно-ориентированном языке программирования высокого уровня Visual Basic.
      В основе программы лежит база данных продуктов с их характеристиками. По своей сути данная программа является системой управления базой данных (СУБД). По желанию пользователя он может выбрать соответствующие продукты из базы данных, составить меню своего завтрака, обеда или ужина и, на основе своих индивидуальных компенсационных коэффициентов и выбранной размерности ХЕ, рассчитать потребную компенсационную дозу. Эти расчеты ( как и другие) производятся с использованием математических и логических операторов, принятых в языке Visual Basic, и объединенных в программном коде. Вот фрагмент этого кода, иллюстрирующий принцип действия этого кода :
      Первое действие (ввод нужного продукта) из учетной таблицы в расчетную производится по такому фрагменту программного кода :

Private Sub DBGrid1_DblClick()
Data2.UpdateRecord
Data2.Recordset.AddNew
Data2.Recordset.Fields("Name") = Data1.Recordset.Fields("Name")
Data2.Recordset.Fields("K").Value = 0
Data2.Recordset.Fields("D").Value = 0
Data2.Recordset.Fields("KAL1").Value = 0
Data2.Recordset.Fields("WH") = Data1.Recordset.Fields("WH1")
Data2.Recordset.Fields("FAT") = Data1.Recordset.Fields("FAT1")
Data2.Recordset.Fields("UG") = Data1.Recordset.Fields("UG1")
Data2.Recordset.Fields("KAL") = Data1.Recordset.Fields("IND")
Data2.Recordset.Update
Data2.Refresh

       В переводе на нормальный язык, это означает, что по двойному клику мышки на выбранном продукте (DBGrid1_DblClick) он копируется в расчетную таблицу, где и выполняются необходимые действия. При этом алгоритм расчета (расчет формулы компенсационной дозы) идет по одному из путей в соответствии выбранным режимом учета ГИ. Эта выбор осуществляется с помощью логических операторов if … then… else

       Примером одного из путей дальнейшего расчета может быть другой фрагмент программного кода :

Private Sub CALC1()
If Data2.Recordset.EOF Then
MsgBox "Расчетная таблица пуста и считать нечего"
Else
Data2.Recordset.MoveFirst
Do Until Data2.Recordset.EOF
If Data2.Recordset.Fields("K").Value = 0 Then
MsgBox "Имеются записи с нулевым количеством продуктов"
Else
End If
Data2.Recordset.MoveNext
Loop
End If
Data2.Recordset.MoveFirst
Do Until Data2.Recordset.EOF
Data2.Recordset.Edit
Data2.Recordset.Fields("WH2") = Data2.Recordset.Fields("WH") / 100 * Data2.Recordset.Fields("K")
Data2.Recordset.Fields("FAT2") = Data2.Recordset.Fields("FAT") / 100 * Data2.Recordset.Fields("K")
Data2.Recordset.Fields("UG2") = Data2.Recordset.Fields("UG") / 100 * Data2.Recordset.Fields("K")
If Data2.Recordset.Fields("KAL").Value = 100 Then
Data2.Recordset.Fields("F") = Data2.Recordset.Fields("UG2")
Else
Data2.Recordset.Fields("F") = Data2.Recordset.Fields("UG2") / 100 * Data2.Recordset.Fields("KAL")
End If
If Data2.Recordset.Fields("KAL").Value = 0 Then
Data2.Recordset.Fields("C1").Value = 0
Else Data2.Recordset.Fields("C1") = Data2.Recordset.Fields("UG2") / 100 * (100 - Data2.Recordset.Fields("KAL").Value)
End If
Data2.Recordset.Update
Data2.Recordset.MoveNext
Loop
Data2.Refresh
Data2.Recordset.MoveFirst
Do Until Data2.Recordset.EOF
Data2.Recordset.Edit
Data2.Recordset.Fields("D") = Round((Data2.Recordset.Fields("WH2") * 4.1 / 100 * Text5), 1) + Round((Data2.Recordset.Fields("FAT2") * 9.3 / 100 * Text5), 1) + Round((Data2.Recordset.Fields("F") / Text36 * Text4), 1) + Round((Data2.Recordset.Fields("C1") / Text36 * Text4), 1)
Data2.Recordset.Fields("KAL1") = Round((Data2.Recordset.Fields("WH2") * 4.1 + Data2.Recordset.Fields("FAT2") * 9.3 + Data2.Recordset.Fields("UG2") * 4.1), 0)
Data2.Recordset.Update
Data2.Recordset.MoveNext
Loop
Data2.Refresh
Data2.Recordset.MoveFirst
Do Until Data2.Recordset.EOF
Data2.Recordset.Edit
Dim F1 As Single
F1 = F1 + Data2.Recordset.Fields("WH2")
Dim F2 As Single
F2 = F2 + Data2.Recordset.Fields("FAT2")
Dim F3 As Single
F3 = F3 + Data2.Recordset.Fields("UG2")
Dim F4 As Single
F4 = F4 + Data2.Recordset.Fields("K")
Dim F5 As Single
F5 = F5 + Data2.Recordset.Fields("KAL1")
Dim F6 As Single
F6 = F6 + Round((Data2.Recordset.Fields("F") / Text36 * Text4), 1)
Dim F7 As Single
F7 = F7 + Round((Data2.Recordset.Fields("C1") / Text36 * Text4), 1) + Round((Data2.Recordset.Fields("WH2") * 4.1 / 100 * Text5), 1) + Round((Data2.Recordset.Fields("FAT2") * 9.3 / 100 * Text5), 1)
Dim F8 As Single
F8 = F8 + Round((Data2.Recordset.Fields("C1") / Text36 * Text4), 1) + Round((Data2.Recordset.Fields("WH2") * 4.1 / 100 * Text5), 1) + Round((Data2.Recordset.Fields("FAT2") * 9.3 / 100 * Text5), 1) + Round((Data2.Recordset.Fields("F") / Text36 * Text4), 1)
Data2.Recordset.Update
Data2.Recordset.MoveNext
Loop
Data2.Refresh
Label77.Caption = Round(F1, 0)
Label80.Caption = Round(F2, 0)
Label83.Caption = Round(F3, 0)
Label78.Caption = Round(F1 * 100 / (F1 + F2 + F3), 0)
Label81.Caption = Round(F2 * 100 / (F1 + F2 + F3), 0)
Label84.Caption = Round(F3 * 100 / (F1 + F2 + F3), 0)
Label79.Caption = Round(F1 * 4.1 * 100 / F5, 0)
Label82.Caption = Round(F2 * 9.3 * 100 / F5, 0)
Label85.Caption = Round(F3 * 4.1 * 100 / F5, 0)
Text19 = Round(F5, 0)
Text42 = Round(F3 / Text36, 1)
Text33 = F6
Text34 = F7
Text6 = F8
Command3.Visible = True
Frame3.Visible = True
End Sub

       В переводе на нормальный язык эта «абракадабра» означает следующее:
      Для начала пресекаются попытки пользователя рассчитать пустое меню или продукты с не введенным их количеством. Затем производится определение реального количества составляющих пищи, лежащих в тарелке на основе характеристик продуктов и их взвешенного количества, т.е. решаются пропорции. Затем по этим реальным количествам компонентов на основе приведенной формулы определяются компенсационные дозы. Затем эти дозы округляются (Round ) до заданной степени точности ( в нашем случае до одного знака после запятой) и отображаются в соответствующих элементах на экране, которые становятся видимыми (.Visible = True ) Заодно определяется общее количество белков, жиров и углеводов в выбранном меню, их процентное распределение, калорийность меню и распределение калорийности по составляющим. Любителям ХЕ рассчитывается их точное количество в выбранном меню. Это лишь небольшие фрагменты программного кода, иллюстрирующий выбранный подход реализации поставленных задач.

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

      1.Отказ от ХЕ, как меры определения количества углеводов, подлежащих компенсации. Эти количества должны определяться не с помощью кусочков, кучек, ложек, кружек и т.д., а с помощью весов и в общепризнанных единицах системы мер и весов (в граммах)

      2. Расчет компенсационной дозы производится не на основе каких-то 1-2 единицы инсулина на ХЕ, а на основе индивидуальных компенсационных коэффициентов, отражающих индивидуальность и степень тяжести конкретного диабета.

      3.Компенсации подлежат не только углеводы, но и белки и жиры.

      4.Использование комбинированной инсулинотерапии (короткие + ультракороткие инсулины ) как средства оптимизации инсулинового профиля и максимального его приближения к профилю роста СК. Зачем ?

       Затем, чтобы :

      1.Добиться максимальной точности инсулинотерапии и приведение диабета в долговременно стабильное состояние, при котором он становится совсем иным, чем его декомпенсированный или недокомпенсированный собрат.

      2.Быть свободным в выборе своего меню, не деля продукты на «вредлные» или «невредные». Составлять свое меню исходя из своих гастрономических пристрастий, а не по указке какого-то диабета

      3.Быть свободным в своем образе жизни.