private void GiveInitialMandatesOnNationalLevel(int mirsCount, int partiesCountTable1, int[,] votesTable2, Party[] partiesTable2, int partiesCountInTable2, int partiesCountTable2, int allMandatesAfterStep0, int allVotesTable2, out List <PartyCalcInfo> partiesWithCalcInfo, out List <MirCalcInfo> mirsWithCalcInfo, out int mandatesLeft) { Logger.Info("\r\n==Разпределяне на мандатите на национално ниво=="); decimal globalHareQuote = (decimal)allVotesTable2 / allMandatesAfterStep0; Logger.logger.InfoFormat("Квота на Хеър = {0} = {1}/{2}", globalHareQuote, allVotesTable2, allMandatesAfterStep0); //parties with calc info partiesWithCalcInfo = new List <PartyCalcInfo>(); for (int i = 0; i < partiesCountInTable2; i++) { var partyWithCalcInfo = new PartyCalcInfo() { Index = i, PartyId = partiesTable2[i].Id, }; partiesWithCalcInfo.Add(partyWithCalcInfo); } //calculate party mir mandates mirsWithCalcInfo = new List <MirCalcInfo>(); for (int i = 0; i < mirsCount; i++) { var mirCalcInfo = new MirCalcInfo() { MirId = _mirsAll[i].Id, MirIndex = i, }; mirsWithCalcInfo.Add(mirCalcInfo); } //calculate mir and partyVotes votes int[] mirVotesCountTable2 = new int[mirsCount]; int[] partyVotesCountTable2 = new int[partiesCountTable1]; for (int i = 0; i < mirsCount; i++) { for (int j = 0; j < partiesCountTable2; j++) { //mir votes mirVotesCountTable2[i] += votesTable2[i, j]; mirsWithCalcInfo[i].Votes = mirVotesCountTable2[i]; mirsWithCalcInfo[i].MandatesLimit = _mirMandatesAvailable[i]; mirsWithCalcInfo[i].MandateHareQuote = _mirMandatesAvailable[i] != 0 ? decimal.Divide(mirVotesCountTable2[i], _mirMandatesAvailable[i]) : 0; //party votes partyVotesCountTable2[j] += votesTable2[i, j]; partiesWithCalcInfo[j].Votes = partyVotesCountTable2[j]; } } //mandates that every party should have for (int i = 0; i < partiesCountTable2; i++) { decimal mandateCoefHare = decimal.Divide(partyVotesCountTable2[i], globalHareQuote); int mandatesInit = (int)mandateCoefHare; partiesWithCalcInfo[i].MandatesGivenInit = mandatesInit; decimal mandateCoefHareR = mandateCoefHare - mandatesInit; partiesWithCalcInfo[i].MandateCoefHareR = mandateCoefHareR; } //summary init mandates given int mandatesInitGiven = partiesWithCalcInfo.Sum(p => p.MandatesGivenInit); mandatesLeft = allMandatesAfterStep0 - mandatesInitGiven; Logger.logger.Info("Начални мандати по партии:"); LogNationalMandatesByParties(partiesWithCalcInfo); }
private void GiveInitialMandatesOnNationalLevel(int mirsCount, int partiesCountTable1, int[,] votesTable2, Party[] partiesTable2, int partiesCountInTable2, int partiesCountTable2, int allMandatesAfterStep0, int allVotesTable2, out List<PartyCalcInfo> partiesWithCalcInfo, out List<MirCalcInfo> mirsWithCalcInfo, out int mandatesLeft) { Logger.Info("\r\n==Разпределяне на мандатите на национално ниво=="); decimal globalHareQuote = (decimal)allVotesTable2 / allMandatesAfterStep0; Logger.logger.InfoFormat("Квота на Хеър = {0} = {1}/{2}", globalHareQuote, allVotesTable2, allMandatesAfterStep0); //parties with calc info partiesWithCalcInfo = new List<PartyCalcInfo>(); for (int i = 0; i < partiesCountInTable2; i++) { var partyWithCalcInfo = new PartyCalcInfo() { Index = i, PartyId = partiesTable2[i].Id, }; partiesWithCalcInfo.Add(partyWithCalcInfo); } //calculate party mir mandates mirsWithCalcInfo = new List<MirCalcInfo>(); for (int i = 0; i < mirsCount; i++) { var mirCalcInfo = new MirCalcInfo() { MirId = _mirsAll[i].Id, MirIndex = i, }; mirsWithCalcInfo.Add(mirCalcInfo); } //calculate mir and partyVotes votes int[] mirVotesCountTable2 = new int[mirsCount]; int[] partyVotesCountTable2 = new int[partiesCountTable1]; for (int i = 0; i < mirsCount; i++) { for (int j = 0; j < partiesCountTable2; j++) { //mir votes mirVotesCountTable2[i] += votesTable2[i, j]; mirsWithCalcInfo[i].Votes = mirVotesCountTable2[i]; mirsWithCalcInfo[i].MandatesLimit = _mirMandatesAvailable[i]; mirsWithCalcInfo[i].MandateHareQuote = _mirMandatesAvailable[i] != 0 ? decimal.Divide(mirVotesCountTable2[i], _mirMandatesAvailable[i]) : 0; //party votes partyVotesCountTable2[j] += votesTable2[i, j]; partiesWithCalcInfo[j].Votes = partyVotesCountTable2[j]; } } //mandates that every party should have for (int i = 0; i < partiesCountTable2; i++) { decimal mandateCoefHare = decimal.Divide(partyVotesCountTable2[i], globalHareQuote); int mandatesInit = (int)mandateCoefHare; partiesWithCalcInfo[i].MandatesGivenInit = mandatesInit; decimal mandateCoefHareR = mandateCoefHare - mandatesInit; partiesWithCalcInfo[i].MandateCoefHareR = mandateCoefHareR; } //summary init mandates given int mandatesInitGiven = partiesWithCalcInfo.Sum(p => p.MandatesGivenInit); mandatesLeft = allMandatesAfterStep0 - mandatesInitGiven; Logger.logger.Info("Начални мандати по партии:"); LogNationalMandatesByParties(partiesWithCalcInfo); }