/// <summary> /// конверитрую освещение в формат для рассчёта коефициента участия в максимуме /// </summary> public void ConvertTotalLigtningToAbstractBuildings() { AbstractBuildings.Clear(); AbstractBuilding ab = new AbstractBuilding(); ab.ActivePower = DistrictTotalLightning; ab.FullPower = ab.ActivePower; ab.Type = "Освітлення мікрорайону"; AbstractBuildings.Insert(0, ab); }
public void DetermineCoefficientsOfParticipanceInMaximumLoad() { ConvertTotalLigtningToAbstractBuildings(); // Создаю коллекцию специальніх обїектов для определения коеффициентов участия в максимуме // Создаю объекты и напоолняю их информацией соответсвтуюего жилого здания foreach (var cb in Building.CommercialBuildings) { AbstractBuilding abstractBuilding = new AbstractBuilding(); AbstractBuildings.Insert(0, abstractBuilding); AbstractBuildings[0].Id = cb.Id; AbstractBuildings[0].Type = cb.TypeOfCommercial;// AbstractBuildings[0].SideNote = cb.TypeSideNote; AbstractBuildings[0].ActivePower = cb.ActiveLoad; AbstractBuildings[0].ReactivePower = cb.ReactiveLoad; AbstractBuildings[0].FullPower = cb.FullLoad; } // Также добавляю туда обьекты соответствующие жилым зданиям AbstractBuildings = GetUnitedApartmentBuildings(3, AbstractBuildings); AbstractBuildings = GetUnitedApartmentBuildings(1, AbstractBuildings); // Нахожу максимальную нагрузку double maxLoad = AbstractBuildings.Max(ab => ab.FullPower); // Создаю объект который будет содержать информацию о здании с максимальной нагрузкой AbstractBuilding buildingWithMaxLoad = new AbstractBuilding(); // Наполняю его информацией foreach (var ab in AbstractBuildings) { if (ab.FullPower == maxLoad) { buildingWithMaxLoad = ab; break; } } Console.WriteLine(buildingWithMaxLoad.FullPower); // Определяю нужный ряд в таблице коеффициентов участия в максимуме int row = 0; // Создаю таблицу CoefficientsOfMembershipInMaximum DbnTable = new CoefficientsOfMembershipInMaximum(); // Сопоставляю значение в Заметке о типе с номером ряда в таблице // Если в здании с макс нагрузкой заметка о типе имеет такое же значение как номер строки , окончить цикл // Ограничиваю пользователя от невозможного события(потому что если вдруг такой потребитель поадёт сюда, он нарушит логику процессов if (buildingWithMaxLoad.SideNote != "Особливий") { // Перечисляю случаи когда получен нужный ряд и пора остановиться. if (buildingWithMaxLoad.SideNote == "0") { row = 0; } else if (buildingWithMaxLoad.SideNote == "1") { row = 1; } else if (buildingWithMaxLoad.SideNote == "Їдальня" || buildingWithMaxLoad.SideNote == "Ресторани, кафе") { row = 2; } // Школы и ПТУ else if (buildingWithMaxLoad.SideNote == "4" || buildingWithMaxLoad.SideNote == "5" || buildingWithMaxLoad.SideNote == "11") { row = 3; } else if (buildingWithMaxLoad.SideNote == "Установи адміністративного управління, фінансові, проектно-конструкторські організації") { row = 4; } else if (buildingWithMaxLoad.SideNote == "7" || buildingWithMaxLoad.SideNote == "8") { row = 5; } else if (buildingWithMaxLoad.SideNote == "9") { row = 6; } else if (buildingWithMaxLoad.SideNote == "10" || buildingWithMaxLoad.SideNote == "13") { row = 8; } else if (buildingWithMaxLoad.SideNote == "Культові споруди") { row = 9; } else if (buildingWithMaxLoad.SideNote == "12") { row = 7; } // Ни одно здание не подходит пока что под определение комунального обслуживания else if (buildingWithMaxLoad.SideNote == "14") { // Здания комунального обслуживания } else if (buildingWithMaxLoad.SideNote == "15") { row = 9; } // Становится известен ряд Console.WriteLine(row); // Создаю условия выбора колонки в соответствии с примечанием // Создаю переменную содержащую номер колонки int column = 0; // Перебираю всю коллекцию foreach (var e in AbstractBuildings) { if (e.SideNote == "Житлові будинки з електроплитами") { column = 0; } else if (e.SideNote == "Житлові будинки з газовими плитами або на твердому паливі") { column = 1; } else if (e.SideNote == "Їдальня") { column = 2; } else if (e.SideNote == "Ресторани, кафе") { column = 3; } else if (e.SideNote == "Установи адміністративного управління, фінансові, проектно-конструкторські організації") { column = 6; } else if ( e.SideNote == "4" || e.SideNote == "5" || e.SideNote == "7" || e.SideNote == "8" || e.SideNote == "9" || e.SideNote == "10" || e.SideNote == "11" || e.SideNote == "12" || e.SideNote == "13" // Для комунальніх потребителей если они будут добавлені в будущем || e.SideNote == "14") { column = Convert.ToInt32(e.SideNote); } else if (e.SideNote == "Культові споруди") { column = 15; } // Присваиваем значение коффициента участия в имаксимуме e.CoefficientOfMax = DbnTable.CoefficientsOfMaximum[row, column]; if (e.SideNote == "Особливий") { e.CoefficientOfMax = 0.77; } else if (e.Type == "Освітлення мікрорайону") { e.CoefficientOfMax = 1; } } } }