Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class FormulaElementWithoutAgeView
- {
- public short OrdinalNumber { get; set; }
- public string Stock { get; set; }
- public short Value { get; set; }
- public double Delta { get; set; }
- }
- public class Utils
- {
- /// <summary>
- /// Получение формула состава на делянку
- /// </summary>
- /// <param name="pineVolume">Объем сосны.</param>
- /// <param name="firVolume">Объем ели.</param>
- /// <param name="silverFirVolume">Объем пихты.</param>
- /// <param name="larchVolume">Объем лиственницы.</param>
- /// <param name="birchVolume">Объем березы.</param>
- /// <param name="aspenVolume">Объем осины.</param>
- /// <returns></returns>
- public string GetCompositionFormula(double pineVolume, double firVolume, double silverFirVolume, double larchVolume, double birchVolume, double aspenVolume)
- {
- double totalVolume = pineVolume + firVolume + silverFirVolume + larchVolume + birchVolume + aspenVolume;
- if (totalVolume == 0) return "---";
- double pinePercent = pineVolume / totalVolume * 10;
- double firPercent = firVolume / totalVolume * 10;
- double silverFirPercent = silverFirVolume / totalVolume * 10;
- double larchPercent = larchVolume / totalVolume * 10;
- double birchPercent = birchVolume / totalVolume * 10;
- double aspenPercent = aspenVolume / totalVolume * 10;
- string compositionFormula = String.Empty;
- string compositionFormulaEnd = String.Empty;
- List<FormulaElementWithoutAgeView> formula = new List<FormulaElementWithoutAgeView>();
- #region Сосна
- FormulaElementWithoutAgeView pElement = new FormulaElementWithoutAgeView();
- pElement.OrdinalNumber = 1;
- pElement.Stock = "С";
- pElement.Value = Convert.ToInt16(Math.Round(pinePercent, 0));
- pElement.Delta = pElement.Value - pinePercent;
- formula.Add(pElement);
- #endregion
- #region Ель
- FormulaElementWithoutAgeView fElement = new FormulaElementWithoutAgeView();
- fElement.OrdinalNumber = 2;
- fElement.Stock = "Е";
- fElement.Value = Convert.ToInt16(Math.Round(firPercent, 0));
- fElement.Delta = fElement.Value - firPercent;
- formula.Add(fElement);
- #endregion
- #region Пихта
- FormulaElementWithoutAgeView sfElement = new FormulaElementWithoutAgeView();
- sfElement.OrdinalNumber = 3;
- sfElement.Stock = "П";
- sfElement.Value = Convert.ToInt16(Math.Round(silverFirPercent, 0));
- sfElement.Delta = sfElement.Value - silverFirPercent;
- formula.Add(sfElement);
- #endregion
- #region Лиственница
- FormulaElementWithoutAgeView lElement = new FormulaElementWithoutAgeView();
- lElement.OrdinalNumber = 4;
- lElement.Stock = "Л";
- lElement.Value = Convert.ToInt16(Math.Round(larchPercent, 0));
- lElement.Delta = lElement.Value - larchPercent;
- formula.Add(lElement);
- #endregion
- #region Береза
- FormulaElementWithoutAgeView bElement = new FormulaElementWithoutAgeView();
- bElement.OrdinalNumber = 5;
- bElement.Stock = "Б";
- bElement.Value = Convert.ToInt16(Math.Round(birchPercent, 0));
- bElement.Delta = bElement.Value - birchPercent;
- formula.Add(bElement);
- #endregion
- #region Осина
- FormulaElementWithoutAgeView aElement = new FormulaElementWithoutAgeView();
- aElement.OrdinalNumber = 6;
- aElement.Stock = "Ос";
- aElement.Value = Convert.ToInt16(Math.Round(aspenPercent, 0));
- aElement.Delta = aElement.Value - aspenPercent;
- formula.Add(aElement);
- #endregion
- //Балансировка значений
- if (formula.Sum(x => x.Value) != 10)
- {
- switch (formula.Sum(x => x.Value))
- {
- case 11:
- formula = formula.Where(x => x.Value != 0).ToList();
- formula.OrderBy(x => x.Delta);
- formula[formula.Count - 1].Value -= 1;
- break;
- case 9:
- formula.OrderBy(x => x.Delta);
- formula[0].Value += 1;
- break;
- }
- }
- //Составление формулы
- for (int i = 1; i <= 6; i++)
- {
- FormulaElementWithoutAgeView fe = formula.Where(x => x.OrdinalNumber == i).FirstOrDefault();
- if (fe == null) continue;
- if (fe.Value != 0) compositionFormula += String.Format("{0}{1}", fe.Value, fe.Stock);
- else
- {
- if (fe.Delta < 0 && fe.Delta >= -0.3) compositionFormulaEnd += String.Format("+ед.{0}", fe.Stock);
- else if (fe.Delta != 0) compositionFormulaEnd += String.Format("+{0}", fe.Stock);
- }
- }
- return compositionFormula + compositionFormulaEnd;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement