Advertisement
Guest User

tariffCalc final

a guest
May 25th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.14 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace TestConsoleApplication
  7. {
  8.     class Program
  9.     {
  10.         public static string getPaymentAmount(double houseArea,
  11.         double[] firstTariffCoefficients,   // тарифные коэффициенты за 1.01-30.06
  12.         double[] secondTariffCoefficients,  // тарифные коэффициенты за 1.07-31.12
  13.         double[] elevatorCoefficients)      // тарифные коэффициенты для содержания и ремонта лифта
  14.         {
  15.             // Концепция годовой формулы: ans = houseArea * period * (tariff1 + tariff2)
  16.            
  17.             // Тарифная ставка меняется 1 июля каждого года: https://kvartplata.info/rates/index.php
  18.             // Коэффициенты тарифных планов (Содержание дома, Текущий ремонт, Услуги управления):
  19.             //   Управление: тариф 1 (в массивах тарифы будут начинаться с нуля, а не с 1);
  20.             //   Ремонт: тарифы 3, 6-8, 10-11;
  21.             //   Содержание: тарифы 2, 4-5, 9.1-9.3, 12.1-12.2, 12.3.1.1-12.3.1.2, 12.3.2.
  22.            
  23.             // На вход подаются все коэффициенты из тарифного плана. Если каких-то работ не проводилось,
  24.             // то коэффициент равен нулю. Коэффициенты подаются в том же порядке, что и в тарифном плане
  25.             // (всего 17 + 5 для лифта).
  26.  
  27.             const int period = 6;  // в месяцах, фиксированный
  28.            
  29.             double elevatorTariff = period * elevatorCoefficients[0] * (1 + elevatorCoefficients[1]) *
  30.                 elevatorCoefficients[2] / elevatorCoefficients[3] * elevatorCoefficients[4];  // за полгода
  31.            
  32.             double firstManagement = firstTariffCoefficients[0], secondManagement = secondTariffCoefficients[0];
  33.            
  34.             double firstRepair = firstTariffCoefficients[2] + firstTariffCoefficients[5] + firstTariffCoefficients[6] +
  35.                 firstTariffCoefficients[7] + firstTariffCoefficients[11] + elevatorTariff;
  36.             double secondRepair = secondTariffCoefficients[2] + secondTariffCoefficients[5] + secondTariffCoefficients[6] +
  37.                 secondTariffCoefficients[7] + secondTariffCoefficients[11] + elevatorTariff;
  38.            
  39.             double firstMaintenance = firstTariffCoefficients[1] + firstTariffCoefficients[3] +
  40.                 firstTariffCoefficients[4] + firstTariffCoefficients[8] + firstTariffCoefficients[9] +
  41.                 firstTariffCoefficients[10] + firstTariffCoefficients[12] + firstTariffCoefficients[13] +
  42.                 firstTariffCoefficients[14] + firstTariffCoefficients[15] + firstTariffCoefficients[16];
  43.             double secondMaintenance = secondTariffCoefficients[1] + secondTariffCoefficients[3] +
  44.                 secondTariffCoefficients[4] + secondTariffCoefficients[8] + secondTariffCoefficients[9] +
  45.                 secondTariffCoefficients[10] + secondTariffCoefficients[12] + secondTariffCoefficients[13] +
  46.                 secondTariffCoefficients[14] + secondTariffCoefficients[15] + secondTariffCoefficients[16];
  47.            
  48.             double firstSum = firstManagement, secondSum = secondManagement;
  49.             for (int i = 1; i < 12; ++i)
  50.             {
  51.                 firstSum += firstTariffCoefficients[i];
  52.             }
  53.             for (int i = 1; i < 12; ++i)
  54.             {
  55.                 secondSum += secondTariffCoefficients[i];
  56.             }
  57.            
  58.             double[] ans = new double[4];
  59.             ans[0] = period * houseArea * (firstManagement + secondManagement);    // управление
  60.             ans[1] = period * houseArea * (firstRepair + secondRepair);            // ремонт
  61.             ans[2] = period * houseArea * (firstMaintenance + secondMaintenance);  // содержание
  62.             ans[3] = period * houseArea * (firstSum + secondSum);                  // общая сумма
  63.            
  64.             return "{\n\t\"Repair\": \"" + ans[1] + "\",\n\t\"Management: \": \"" +
  65.                 ans[0] + "\",\n\t\"Maintenance: \": \"" + ans[2] +
  66.                 "\",\n\t\"Total: \": \"" + ans[3] + "\"\n}";
  67.         }
  68.  
  69.  
  70.         static void Main(string[] args)
  71.         {
  72.             // Тест с https://read.infometer.org/projects/calcgkh#podskazka (управление)
  73.             double area = 627.22;
  74.             double[] first = new double[17];
  75.             double[] second = new double[17];
  76.             double[] elevator = new double[5];
  77.             first[0] = 1.18;
  78.             for (int i = 1; i < 17; ++i) first[i] = 0;
  79.             second[0] = 2.29;
  80.             for (int i = 1; i < 17; ++i) second[i] = 0;
  81.             for (int i = 1; i < 5; ++i) elevator[i] = 0;
  82.             elevator[3] = 1;  // чтобы не было деления на 0
  83.            
  84.             System.Console.WriteLine(getPaymentAmount(area, first, second, elevator));
  85.         }
  86.  
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement