DmitrMakeev commited on
Commit
9b65f68
·
verified ·
1 Parent(s): 73faeec

Update calculate.html

Browse files
Files changed (1) hide show
  1. calculate.html +73 -60
calculate.html CHANGED
@@ -3,7 +3,7 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Расчёт удобрений с учётом составов</title>
7
  <style>
8
  body { font-family: Arial, sans-serif; margin: 20px; }
9
  input { padding: 8px; margin: 5px; width: 200px; }
@@ -12,7 +12,7 @@
12
  </style>
13
  </head>
14
  <body>
15
- <h1>Расчёт необходимого количества удобрений с учётом состава</h1>
16
 
17
  <div>
18
  <h3>Введите состав удобрений (%):</h3>
@@ -51,17 +51,17 @@
51
 
52
  <h3>Введите требуемые концентрации элементов (мг/л):</h3>
53
  <label for="ca">Кальций (Ca):</label>
54
- <input type="number" id="ca" placeholder="например, 115"><br>
55
  <label for="p">Фосфор (P):</label>
56
- <input type="number" id="p" placeholder="например, 60"><br>
57
  <label for="k">Калий (K):</label>
58
- <input type="number" id="k" placeholder="например, 149.5"><br>
59
  <label for="mg">Магний (Mg):</label>
60
- <input type="number" id="mg" placeholder="например, 42.71"><br>
61
  <label for="s">Сера (S):</label>
62
- <input type="number" id="s" placeholder="например, 74.691"><br>
63
  <label for="n">Азот (N):</label>
64
- <input type="number" id="n" placeholder="например, 110.74"><br>
65
 
66
  <button onclick="calculate()">Рассчитать количество удобрений</button>
67
  </div>
@@ -69,6 +69,29 @@
69
  <div class="result" id="result"></div>
70
 
71
  <script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  function calculate() {
73
  // Состав удобрений (% → доли)
74
  const caContentCa = parseFloat(document.getElementById("ca_content_ca").value) / 100;
@@ -93,85 +116,75 @@
93
  const s = parseFloat(document.getElementById("s").value) || 0;
94
  const n = parseFloat(document.getElementById("n").value) || 0;
95
 
96
- // Проверка ввода
97
  if ([ca, p, k, mg, s, n].some(v => isNaN(v))) {
98
  document.getElementById("result").innerHTML = "Введите все значения!";
99
  return;
100
  }
101
 
102
- // 1. Ca(NO₃)₂·4H₂O от Ca
103
  let caNO3 = ca / caContentCa;
104
  let nFromCaNO3 = caNO3 * caContentN;
105
 
106
- // 2. KH₂PO₄ от P
107
  let kh2po4 = p / pContent;
108
  let kFromKH2PO4 = kh2po4 * kContentKH2PO4;
109
 
110
- // 3. MgSO₄·7H₂O и Mg(NO₃)₂ для Mg и S
111
- let mgso4 = s / sContentMgSO4; // Сначала максимум S
112
- let mgFromMgSO4 = mgso4 * mgContentMgSO4;
113
  let sFromMgSO4 = mgso4 * sContentMgSO4;
 
 
114
 
115
- let mgRemaining = mg - mgFromMgSO4;
116
- let mgno3 = mgRemaining > 0 ? mgRemaining / mgContentMgNO3 : 0;
117
- let nFromMgNO3 = mgno3 * nContentMgNO3;
118
-
119
- if (mgFromMgSO4 > mg) {
120
- mgso4 = mg / mgContentMgSO4;
121
- sFromMgSO4 = mgso4 * sContentMgSO4;
122
- mgno3 = 0;
123
- nFromMgNO3 = 0;
124
- }
125
-
126
- // 4. KNO₃ для остатка N
127
- let nRemaining = n - nFromCaNO3 - nFromMgNO3;
128
- let kno3FromN = nRemaining > 0 ? nRemaining / nContentKNO3 : 0;
129
- let kFromKNO3FromN = kno3FromN * kContentKNO3;
130
-
131
- let kRemaining = k - kFromKH2PO4;
132
- let kno3FromK = kRemaining > 0 ? kRemaining / kContentKNO3 : 0;
133
- let nFromKNO3FromK = kno3FromK * nContentKNO3;
134
-
135
- let kno3 = Math.min(kno3FromN, kno3FromK);
136
- let nFromKNO3 = kno3 * nContentKNO3;
137
  let kFromKNO3 = kno3 * kContentKNO3;
 
138
 
139
- // 5. NHNO₃ для остатка N
140
- nRemaining = n - nFromCaNO3 - nFromMgNO3 - nFromKNO3;
141
- let nh4no3 = nRemaining > 0 ? nRemaining / nContentNH4NO3 : 0;
142
-
143
- // 6. K₂SO₄ для остатка S и K
144
  let sRemaining = s - sFromMgSO4;
145
- let k2so4FromS = sRemaining > 0 ? sRemaining / sContentK2SO4 : 0;
146
- let kFromK2SO4FromS = k2so4FromS * kContentK2SO4;
147
-
148
- kRemaining = k - kFromKH2PO4 - kFromKNO3;
149
  let k2so4FromK = kRemaining > 0 ? kRemaining / kContentK2SO4 : 0;
150
-
151
- let k2so4 = Math.min(k2so4FromS, k2so4FromK);
152
  let sFromK2SO4 = k2so4 * sContentK2SO4;
153
  let kFromK2SO4 = k2so4 * kContentK2SO4;
154
 
155
- // Итоговые концентрации
156
- let totalN = (nFromCaNO3 + nFromKNO3 + nFromMgNO3 + nh4no3 * nContentNH4NO3).toFixed(2);
157
- let totalP = (kh2po4 * pContent).toFixed(2);
158
- let totalK = (kFromKH2PO4 + kFromKNO3 + kFromK2SO4).toFixed(2);
159
- let totalCa = (caNO3 * caContentCa).toFixed(2);
160
- let totalMg = (mgso4 * mgContentMgSO4 + mgno3 * mgContentMgNO3).toFixed(2);
161
- let totalS = (sFromMgSO4 + sFromK2SO4).toFixed(2);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
 
163
- // Результаты
164
  let resultText = `
165
  <h3>Результаты расчёта (г/1000 л):</h3>
166
- <p>Ca(NO₃)₂·4H₂O: ${caNO3.toFixed(2)} (Ca: ${totalCa}, N: ${nFromCaNO3.toFixed(2)})</p>
167
- <p>KH₂PO₄: ${kh2po4.toFixed(2)} (P: ${totalP}, K: ${kFromKH2PO4.toFixed(2)})</p>
168
  <p>KNO₃: ${kno3.toFixed(2)} (K: ${kFromKNO3.toFixed(2)}, N: ${nFromKNO3.toFixed(2)})</p>
169
- <p>MgSO₄·7H₂O: ${mgso4.toFixed(2)} (Mg: ${(mgso4 * mgContentMgSO4).toFixed(2)}, S: ${sFromMgSO4.toFixed(2)})</p>
170
  <p>Mg(NO₃)₂: ${mgno3.toFixed(2)} (Mg: ${(mgno3 * mgContentMgNO3).toFixed(2)}, N: ${nFromMgNO3.toFixed(2)})</p>
171
  <p>K₂SO₄: ${k2so4.toFixed(2)} (S: ${sFromK2SO4.toFixed(2)}, K: ${kFromK2SO4.toFixed(2)})</p>
172
  <p>NH₄NO₃: ${nh4no3.toFixed(2)} (N: ${(nh4no3 * nContentNH4NO3).toFixed(2)})</p>
173
- <h3>Итоговые концентрации (мг/л):</h3>
174
- <p>N: ${totalN}, P: ${totalP}, K: ${totalK}, Ca: ${totalCa}, Mg: ${totalMg}, S: ${totalS}</p>
175
  `;
176
  document.getElementById("result").innerHTML = resultText;
177
  }
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Расчёт удобрений с учётом плотности</title>
7
  <style>
8
  body { font-family: Arial, sans-serif; margin: 20px; }
9
  input { padding: 8px; margin: 5px; width: 200px; }
 
12
  </style>
13
  </head>
14
  <body>
15
+ <h1>Расчёт удобрений с учётом состава и плотности</h1>
16
 
17
  <div>
18
  <h3>Введите состав удобрений (%):</h3>
 
51
 
52
  <h3>Введите требуемые концентрации элементов (мг/л):</h3>
53
  <label for="ca">Кальций (Ca):</label>
54
+ <input type="number" id="ca" value="115"><br>
55
  <label for="p">Фосфор (P):</label>
56
+ <input type="number" id="p" value="60"><br>
57
  <label for="k">Калий (K):</label>
58
+ <input type="number" id="k" value="149.5"><br>
59
  <label for="mg">Магний (Mg):</label>
60
+ <input type="number" id="mg" value="42.71"><br>
61
  <label for="s">Сера (S):</label>
62
+ <input type="number" id="s" value="74.691"><br>
63
  <label for="n">Азот (N):</label>
64
+ <input type="number" id="n" value="110.74"><br>
65
 
66
  <button onclick="calculate()">Рассчитать количество удобрений</button>
67
  </div>
 
69
  <div class="result" id="result"></div>
70
 
71
  <script>
72
+ const DENSITY_DATA = {
73
+ "Ca(NO3)2*4H2O": [[5, 1.0015], [10, 1.0041], /* ... */ [605, 1.2868], /* ... */],
74
+ "KH2PO4": [[5, 1.0016], [10, 1.0051], /* ... */ [110, 1.0719]],
75
+ "KNO3": [[5, 1.0011], [10, 1.0042], /* ... */ [280, 1.1627]],
76
+ "MgSO4*7H2O": [[5, 1.0014], [10, 1.0037], /* ... */ [695, 1.2974]],
77
+ "Mg(NO3)2*6H2O": [[5, 1.0001], [10, 1.0023], /* ... */ [500, 1.2007]],
78
+ "K2SO4": [[5, 1.002], [10, 1.006], /* ... */ [110, 1.0825]],
79
+ "NH4NO3": [[5, 1.001], [10, 1.003], /* ... */ [690, 1.2528]]
80
+ };
81
+
82
+ function getDensity(fertilizer, mass) {
83
+ const data = DENSITY_DATA[fertilizer];
84
+ if (!data || mass <= 0) return 1;
85
+ for (let i = 0; i < data.length - 1; i++) {
86
+ if (mass >= data[i][0] && mass <= data[i + 1][0]) {
87
+ const [x1, y1] = data[i];
88
+ const [x2, y2] = data[i + 1];
89
+ return y1 + (mass - x1) * (y2 - y1) / (x2 - x1);
90
+ }
91
+ }
92
+ return data[data.length - 1][1]; // Последнее значение
93
+ }
94
+
95
  function calculate() {
96
  // Состав удобрений (% → доли)
97
  const caContentCa = parseFloat(document.getElementById("ca_content_ca").value) / 100;
 
116
  const s = parseFloat(document.getElementById("s").value) || 0;
117
  const n = parseFloat(document.getElementById("n").value) || 0;
118
 
 
119
  if ([ca, p, k, mg, s, n].some(v => isNaN(v))) {
120
  document.getElementById("result").innerHTML = "Введите все значения!";
121
  return;
122
  }
123
 
124
+ // 1. Ca(NO₃)₂·4H₂O
125
  let caNO3 = ca / caContentCa;
126
  let nFromCaNO3 = caNO3 * caContentN;
127
 
128
+ // 2. KH₂PO₄
129
  let kh2po4 = p / pContent;
130
  let kFromKH2PO4 = kh2po4 * kContentKH2PO4;
131
 
132
+ // 3. MgSO₄·7H₂O и Mg(NO₃)₂
133
+ let mgso4 = mg / mgContentMgSO4;
 
134
  let sFromMgSO4 = mgso4 * sContentMgSO4;
135
+ let mgno3 = 0;
136
+ let nFromMgNO3 = 0;
137
 
138
+ // 4. KNO₃
139
+ let nRemaining = n - nFromCaNO3;
140
+ let kno3 = nRemaining > 0 ? nRemaining / nContentKNO3 : 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  let kFromKNO3 = kno3 * kContentKNO3;
142
+ let nFromKNO3 = kno3 * nContentKNO3;
143
 
144
+ // 5. K₂SO
145
+ let kRemaining = k - kFromKH2PO4 - kFromKNO3;
 
 
 
146
  let sRemaining = s - sFromMgSO4;
 
 
 
 
147
  let k2so4FromK = kRemaining > 0 ? kRemaining / kContentK2SO4 : 0;
148
+ let k2so4FromS = sRemaining > 0 ? sRemaining / sContentK2SO4 : 0;
149
+ let k2so4 = Math.min(k2so4FromK, k2so4FromS);
150
  let sFromK2SO4 = k2so4 * sContentK2SO4;
151
  let kFromK2SO4 = k2so4 * kContentK2SO4;
152
 
153
+ // 6. NH₄NO₃
154
+ nRemaining = n - nFromCaNO3 - nFromKNO3 - nFromMgNO3;
155
+ let nh4no3 = nRemaining > 0 ? nRemaining / nContentNH4NO3 : 0;
156
+
157
+ // Учёт плотности (итеративно)
158
+ let totalMass = caNO3 + kh2po4 + kno3 + mgso4 + k2so4 + nh4no3;
159
+ let density = (
160
+ getDensity("Ca(NO3)2*4H2O", caNO3) +
161
+ getDensity("KH2PO4", kh2po4) +
162
+ getDensity("KNO3", kno3) +
163
+ getDensity("MgSO4*7H2O", mgso4) +
164
+ getDensity("K2SO4", k2so4) +
165
+ getDensity("NH4NO3", nh4no3)
166
+ ) / 6; // Средняя плотность
167
+ let volume = 1000 * density; // Реальный объём
168
+
169
+ // Корректировка концентраций
170
+ let totalN = (nFromCaNO3 + nFromKNO3 + nh4no3 * nContentNH4NO3) / density;
171
+ let totalP = (kh2po4 * pContent) / density;
172
+ let totalK = (kFromKH2PO4 + kFromKNO3 + kFromK2SO4) / density;
173
+ let totalCa = (caNO3 * caContentCa) / density;
174
+ let totalMg = (mgso4 * mgContentMgSO4) / density;
175
+ let totalS = (sFromMgSO4 + sFromK2SO4) / density;
176
 
 
177
  let resultText = `
178
  <h3>Результаты расчёта (г/1000 л):</h3>
179
+ <p>Ca(NO₃)₂·4H₂O: ${caNO3.toFixed(2)} (Ca: ${totalCa.toFixed(2)}, N: ${nFromCaNO3.toFixed(2)})</p>
180
+ <p>KH₂PO₄: ${kh2po4.toFixed(2)} (P: ${totalP.toFixed(2)}, K: ${kFromKH2PO4.toFixed(2)})</p>
181
  <p>KNO₃: ${kno3.toFixed(2)} (K: ${kFromKNO3.toFixed(2)}, N: ${nFromKNO3.toFixed(2)})</p>
182
+ <p>MgSO₄·7H₂O: ${mgso4.toFixed(2)} (Mg: ${totalMg.toFixed(2)}, S: ${sFromMgSO4.toFixed(2)})</p>
183
  <p>Mg(NO₃)₂: ${mgno3.toFixed(2)} (Mg: ${(mgno3 * mgContentMgNO3).toFixed(2)}, N: ${nFromMgNO3.toFixed(2)})</p>
184
  <p>K₂SO₄: ${k2so4.toFixed(2)} (S: ${sFromK2SO4.toFixed(2)}, K: ${kFromK2SO4.toFixed(2)})</p>
185
  <p>NH₄NO₃: ${nh4no3.toFixed(2)} (N: ${(nh4no3 * nContentNH4NO3).toFixed(2)})</p>
186
+ <h3>Итоговые концентрации (мг/л, с учётом плотности ${density.toFixed(4)}):</h3>
187
+ <p>N: ${totalN.toFixed(2)}, P: ${totalP.toFixed(2)}, K: ${totalK.toFixed(2)}, Ca: ${totalCa.toFixed(2)}, Mg: ${totalMg.toFixed(2)}, S: ${totalS.toFixed(2)}</p>
188
  `;
189
  document.getElementById("result").innerHTML = resultText;
190
  }