Уральская Государственная Горно-Геологическая Академия
Расчет массы фосфорита для получения заданной массы фосфора
Белорусова Е.И.
Группа ОПИ-09
Проверила:
Соликамск 2013
Содержание
Постановка задачи
Создание математической модели
Введение переменных
Программирование
Описание основных элементов программы
Программа на языке Паскаль
Приложение
Постановка задачи
1. Рассчитать массу фосфорита, с массовой долей примесей 12%, необходимую для получения фосфора, массой: 200, 120, 150, 170, 230, 250, 140, 260, 270 кг.
2. Полученный массив отсортировать по возрастанию, вывести содержимое массива в табличном виде до и после сортировки.
3. Привести расчетную программу на языке программирования Паскаль.
Создание математической модели
фосфорит масса химический программирование
Составим уравнение реакции получения фосфора из фосфорита:
из 1 моли фосфорита получаем 2 моли фосфора. Найдем молярные массы фосфора и фосфорита:
M(P) = 31 кг/моль
М(Ca) = 40,
M(O) = 16.
M(Ca3(PO4)2) = M(Ca)*3+(M(P)+M(O)*4)*2 = 40*3+31*2+16*8 = 310 кг/моль
Найдем количество фосфора, соответствующее массе m(P) = 200 кг.
n(P) = m(P)/M(P) = 200/31 = 6.45;
,
n(Ca3(PO4)2)=x
Теперь, зная молярную массу фосфата и количество вещества, необходимого для реакции, найдем необходимую массу фосфорита:
m(Ca3(PO4)2)=M(Ca3(PO4)2)*n(Ca3(PO4)2)
При 12% примеси, чистый фосфат в фосфорите составит 88%, следовательно, чтобы найти, сколько для реакции требуется фосфорита, необходимо массу фосфата разделить на 88 и умножить на 100.
m(Фосфорит)= m(Ca3(PO4)2)/(1-0,12)
Введение переменных
Для решения данной задачи определим идентификаторы и типы переменных и констант.
Идентификатор |
Тип / Значение |
Пояснение |
|
Константы |
|||
Mm_Ca |
40 |
Атомная масса кальция |
|
Mm_P |
31 |
Атомная масса фосфора |
|
Mm_O |
16 |
Атомная масса кислорода |
|
MDP |
0,12 |
Коэффициент содержания примесей |
|
nP0 |
2 |
Количество полученного фосфора в исходном уравнении реакции (в молях) |
|
Переменные |
|||
m_P |
Real |
Масса фосфора |
|
n_P |
Real |
Количество фосфора |
|
m_Ca3PO42 |
Real |
Масса фосфата |
|
Mm_Ca3PO42 |
Real |
Молярная масса фосфата |
|
n_Ca3PO42 |
Real |
Количество фосфата в молях |
|
x_P[1..10] |
Массив из Real |
Исходный массив масс фосфора, который нужно получить |
|
x_Ph[1..10] |
Массив из Real |
Массив масс фосфорита, необходимого для получения фосфора с заданной массой |
|
i, j |
Byte |
Флаги циклов (используются в качестве индексов для элементов массивов) |
Программирование
Описание основных элементов программы
Расчет масс фосфорита, необходимых для производства соответствующих масс фосфора производится в цикле, флаг цикла является индексом элементов массива. Расчеты производятся по приведенным выше формулам с учетом введенных идентификаторов.
Вывод на экран массивов оформлен в виде процедуры с циклом перебора номера строк. При организации вывода использованы только команды, входящие в состав стандартного паскаля (без использования библиотеки CRT).
Сортировка массива производится по алгоритму «пузырька»: находим минимальный элемент массива, ставим его на первое место. Из оставшихся элементов выбираем наименьший и ставим его на второе место… и так до предпоследнего элемента. Фактически перебор вариантов сравнений осуществляется двумя вложенными циклами, первый из которых, с флагом «i» перебирает искомые минимальные элементы (от 1 до предпоследнего), а второй цикл перебирает элементы, находящиеся «справа» от искомого «j» перебирает значения от i+1 до последнего. Каждый набор элементов массива сравнивается, если i-й элемент оказывается больше j-го, то их надо поменять местами. Обмен значениями производится через временную переменную m_P, которая должна быть того же типа, что и элементы массива, который мы сортируем. В нашем случае, чтобы не нарушать соответствие между массами фосфора и фосфорита, в момент, когда необходимо поменять значения элементов массива масс фосфорита местами, мы должны параллельно менять местами и соответствующие элементы массива масс фосфора.
Программа на языке Паскаль
Program task1;
Const Mm_Ca = 40;
Mm_P = 31;
Mm_O = 16;
MDP = 0.12;
nP0 = 2;
Var m_P, m_Ca3PO42, Mm_Ca3PO42 : Real;
n_P, n_Ca3PO42 : Real;
x_P : Array [1..10] of real;
x_Ph : Array [1..10] of real;
i,j : Byte;
Procedure Report;
Var i : byte;
Begin
Writeln;
Writeln('--------------------------');
Writeln(' No | m(P) | m(Ca3(PO4)2) ');
Writeln('--------------------------');
For i := 1 To 10 Do Begin
Writeln(' ',i:2,' | ',x_P[i]:4,' | ',x_Ph[i]);
End;
Writeln('--------------------------');
End;
Begin
x_P[1] := 200;
x_P[2] := 100;
x_P[3] := 120;
x_P[4] := 150;
x_P[5] := 170;
x_P[6] := 230;
x_P[7] := 250;
x_P[8] := 140;
x_P[9] := 260;
x_P[10] := 270;
Mm_Ca3PO42 := Mm_Ca*3+Mm_P*2+Mm_O*4*2;
For i := 1 To 10 Do Begin
n_P := x_P[i] / Mm_P;
n_Ca3PO42 := n_P / nP0;
m_Ca3PO42 := Mm_Ca3PO42 * n_Ca3PO42;
x_Ph[i] := m_Ca3PO42 / (1-MDP);
End;
Report;
For i:=1 To 9 Do
For j:=i+1 to 10 Do
If x_Ph[i] > x_Ph[j] Then Begin
m_P := x_P[i];
x_P[i] := x_P[j];
x_P[j] := m_P;
m_P := x_Ph[i];
x_Ph[i] := x_Ph[j];
x_Ph[j] := m_p;
End;
Report;
End.
Приложение
Таблица результатов выполнения программы на контрольном примере и соответствующий график.
№ |
Масса Фосфора |
n(P) |
n(Ph) |
m(Ph) |
Масса фосфорита |
Отсортированный |
|
1 |
200 |
6,452 |
3,226 |
1000 |
1136,4 |
568,2 |
|
2 |
100 |
3,226 |
1,613 |
500 |
568,2 |
681,8 |
|
3 |
120 |
3,871 |
1,935 |
600 |
681,8 |
795,5 |
|
4 |
150 |
4,839 |
2,419 |
750 |
852,3 |
852,3 |
|
5 |
170 |
5,484 |
2,742 |
850 |
965,9 |
965,9 |
|
6 |
230 |
7,419 |
3,71 |
1150 |
1306,8 |
1136,4 |
|
7 |
250 |
8,065 |
4,032 |
1250 |
1420,5 |
1306,8 |
|
8 |
140 |
4,516 |
2,258 |
700 |
795,5 |
1420,5 |
|
9 |
260 |
8,387 |
4,194 |
1300 |
1477,3 |
1477,3 |
|
10 |
270 |
8,71 |
4,355 |
1350 |
1534,1 |
1534,1 |
|
Ca |
40 |
Ca3PO42 |
310 |
||||
P |
31 |
||||||
O |
16 |
||||||
MDP |
0,12 |
||||||
nP0 |
2 |