Моделирование смешивания гидроксида хрома (III) и щелочи NaOH
Моделирование смешивания
гидроксида хрома (III) и щелочи NaOH
Введение
математический программа модель алгоритм
· Разработать математическую модель системы.
· Сформулировать дискретную задачу и
разработать алгоритм решения задачи.
· Написать и отладить программу
(предусмотреть табличное и графическое отображение результатов).
· Выполнить расчеты по программе.
· Составить пояснительную записку
1.
Математическая модель
Гидроксид Cr(OH) 3 - типичный амфолит, растворяется в щелочах с
образованием гидроксокомплексов Cr(OH) 4 (-).
Запишем уравнение реакции для данной задачи:
NaOH + Cr(OH) 3=Na [Cr(OH) 4]
Коэффиценты в уравнении одинаковы (равны единице).
Воспользуемся формулой нахождения количества (моль) вещества
из курса химии:
n=m/M,
где n - количество вещества в молях, m - масса данного вещества
в граммах, М - молярная масса вещества в г/моль (рассчитывается из молярных
масс элементов таблицы Менделеева)
Отсюда выражаем m:
m=n*M
2.
Алгоритм решения задачи
Рисунок 1. Блок-схема расчета Na [Cr(OH) 4]
Обозначения в блок схеме.
m1-масса Сr(OH) 3 (в граммах)
m2_end - конечная масса NaOH (г)
m2_step - шаг
M1 - молярная масса Cr(OH) 3 (г/моль)
M2 - молярная масса NaOH (г/моль)
M3 - молярная масса Na [Cr(OH) 4]
(г/моль)
m3_max - максимальное количество образовавшегося
Na [Cr(OH) 4] (г)
m3 - масса образовавшегося Na [Cr(OH) 4]
(г)
.
Описание интерфейса
Рисунок 2. Окно программы. Вывод графика и таблицы
Рисунок 3. Окно программы. Этапы анимации
Заключение
Данная программа позволяет проводить моделирование смешивания
двух веществ - гидроксида хрома (III) и щелочи NaOH. С помощью этой
программы вводили различные значения параметров (массы исходных веществ) и
наблюдали изменение количества (в данном случае масс, выраженных в граммах)
образующегося комплексного соединения Na [Cr(OH) 4] в первой пробирке (количество растет) и
щелочи NaOH во второй пробирке (количество уменьшается).
Код
программы
// -
#include <vcl.h>
#pragma hdrstop
#include «Unit1.h»
#include «math.h»
// -
#pragma resource «*.dfm»*Form1;m1,
m2, m3, m2_begin, m2_end, m2_step, m3_max,
a1, m3_end;M1 =103;M2 =40;M3 =143;
// -
__fastcall TForm1:TForm1 (TComponent*
Owner)
:TForm(Owner)
{
}
// -
__fastcall TForm1: Button1Click
(TObject*Sender)
{=StrToFloat (Edit1->Text);_begin =StrToFloat
(Edit2->Text);_end =StrToFloat (Edit3->Text);_step
=StrToFloat (Edit4->Text);_max = m1*M3/M1;->Cells[0]
[0]= «Iannauaei? eNaOH»;->Cells[1] [0]= «Ianna
Na [Cr(OH) 4]»;->RowCount=1000;=0;=0.00001;->Series[0]->Clear();
//Chart1->
for (float m2 = m2_begin; m2<m2_end+eps;
m2+=m2_step)
{= m2*M3/M2;
if (m3>m3_max)= m3_max;->Cells[0] [rowsCount+1]=FloatToStr(m2);->Cells[1]
[rowsCount+1]=FloatToStr(m3);->Series[0]->Add
(m3, "», clBlue);++;
}_end = m3;->RowCount= rowsCount+1;
}
// -
__fastcall TForm1: Timer1Timer
(TObject*Sender)
{* canvas = Image1->Canvas;->Brush->Color
=clWhite;width = Image1->Width;height =
Image1->Height;->FillRect (TRect(0,0,
width, height));xc = width/2;= height/2;
if (a1<1.57)
{+=0.1;= m2_end;
{
if (m3<m3_end)
{+=3;= m3*M2/M3;= m2_end-m2;(xc-10,
yc-50);(xc-10, yc-40);(xc, yc);->Canvas->MoveTo
(p1.x, p1.y);->Canvas->LineTo (p2.x,
p2.y);->Canvas->MoveTo (p2.x,
p2.y);->Canvas->LineTo (p3.x,
p3.y);->Canvas->MoveTo (p3.x,
p3.y);->Canvas->LineTo (p1.x,
p1.y);
}
}(xc, yc, 0, m3/200.0, clYellow);(xc-10,
yc-50, a1, m2/200.0, clBlue);
}
// -__fastcall TForm1: Button3Click
(TObject*Sender)
{=0;=0;->Enabled =true;
}
(TPoint p1, TPoint p2, float a)
{(p1.x-p2.x, p1.y-p2.y);V2;.x
= V1.x*cos(a) - V1.y*sin(a)+
p2.x;.y = V1.x*sin(a)+ V1.y*cos(a)+
p2.y;
return V2;
}
// -__fastcall TForm1: Probirka
(int x, int y, float angle, float level, TColor
color)
{h =90;_d=10;w =20;->Canvas->Pen->Color
=clBlack;->Canvas->Pen->Width =2;->Canvas->Brush->Color
=clWhite;p1 (x+w/2, y);p2 (x+w/2,
y+h);p3 (x-w/2, y+h);p4
(x-w/2, y);p5 (x+w/2,
y+(int) (h*(1-level)));p6 (x-w/2,
y+(int) (h*(1-level)));p7 (x, y+h
- (int) (level*h/2));pc (x, y);=rotate
(p1, pc, angle);=rotate (p2, pc,
angle);=rotate (p3, pc, angle);=rotate (p4,
pc, angle);=rotate (p5, pc, angle);=rotate
(p6, pc, angle);=rotate (p7, pc,
angle);->Canvas->MoveTo (p1.x, p1.y);->Canvas->LineTo
(p2.x, p2.y);->Canvas->MoveTo (p2.x,
p2.y);->Canvas->LineTo (p3.x,
p3.y);->Canvas->MoveTo (p3.x,
p3.y);->Canvas->LineTo (p4.x,
p4.y);->Canvas->MoveTo (p5.x,
p5.y);->Canvas->LineTo (p6.x,
p6.y);->Canvas->Brush->Color =
color;->Canvas->FloodFill (p7.x, p7.y,
clWhite, fsSurface);
}
// -__fastcall TForm1: Button2Click
(TObject*Sender)
{->Enabled=false;
}
// -