static void Main(string[] args) { try { Tariff.EnergyPrice = 0.15m; Tariff[] tariffs = { new TariffOrdinary(), new TariffLimit(250, 1 / 3d), new TariffPreferential(2 / 3d), new TariffForHeatingNeeds(1 / 15d) }; Client[] clients = { new ClientOrdinary("Ужиков Е.Е.", "Кирова 43", tariffs[0], 200d), new ClientOrdinary("Чижиков В.В.", "Советская 133/7", tariffs[0], 330d), new ClientOrdinary("Пыжиков В.Ф.", "Ватрушкина 2/4", tariffs[0], 150d), new ClientLimit("Иванов А.А.", "Юбилейная 8/56", tariffs[1], 250d), new ClientLimit("Петров Е.В.", "Советская 133/7", tariffs[1], 2000d), new ClientLimit("Сидоров А.А.", "Междугородняя 8/33", tariffs[1], 300d), new ClientPreferential("ОАО \"Химзавод\"", "Химзаводская 5", tariffs[2], 140000d), new ClientPreferential("КУП \"ГОРЭЛЕКТРОТРАНСПОРТ\"", "Троллейбусная 1", tariffs[2], 110000d), new ClientPreferential("ОАО \"Гомсельмаш\"", "Шоссейная 41", tariffs[2], 155000d), new ClientForHeatingNeeds("СОАО \"Гомелькабель\"", "Советская 151", tariffs[3], 40000d), new ClientForHeatingNeeds("УO \"ГГУ им. Ф.Скорины\"", "ул. Советская, 104", tariffs[3], 14000d), new ClientForHeatingNeeds("ОАО \"Электроаппаратура\"", "Советская 157", tariffs[3], 31000d), }; Table table = new ClientTable("Потребители электроэнергии:", new Table.Column("№", 3), new Table.Column("Имя клиента", 27), new Table.Column("Адрес клиента", 20), new Table.Column("Тип клиента", 23), new Table.Column("Потребленная энергия,кВт/ч", 15), new Table.Column("Стоимость", 13)); for (int i = 0; i < 4; i++) { switch (i) { case 0: { ((ClientTable)table).Print(clients); break; } case 1: { // 1. Отсортировать массив по количеству потреблённой клиентами энергии по убыванию. Array.Sort(clients, ClientComparer.CompareByEnergyVolumeBack); table.TableHeader = "Сортировка по количеству потреблённой клиентами энергии по убыванию"; ((ClientTable)table).Print(clients); break; } case 2: { // 2. Отсортировать массив по величине оплаты клиентами по возрастанию. Array.Sort(clients, ClientComparer.CompareByEnergyPayment); table.TableHeader = "Сортировка по величине оплаты клиентами по возрастанию"; ((ClientTable)table).Print(clients); break; } case 3: { // 3. Упорядочить массив по типу клиентов (первыми – обычные, затем – с лимитом, затем – льготные и последними – для нужд отопления) Array.Sort(clients, new ClientComparer().Compare); table.TableHeader = "Сортировка по типу клиентов (первыми – обычные, 2-ми - с лимитом, затем – льготные и последними – для нужд отопления)"; ((ClientTable)table).Print(clients); // 4. Вычислить общую сумму SUM оплаты всех клиентов за потреблённую энергию. Console.WriteLine("Общая сумма оплаты всех клиентов за потреблённую энергию: " + ClientCollection.SumPayment(clients).ToString("f2")); // 5. Вычислить общий размер льготы LG= SUM0–SUM. Где SUM0 – общая сумма оплаты всех клиентов за потребленную энергию, // если бы они все были обычными (без льгот и лимитов). decimal lg = ClientCollection.SumConcession(clients); if (lg <= 0) { Console.WriteLine("Льготы отсутствуют. Общий размер переплат составил: " + Math.Abs(lg).ToString("f2")); } else { Console.WriteLine("Общий размер льготы: " + lg.ToString("f2")); } break; } } PauseAndClearConsole(i); } } catch (ArgumentOutOfRangeException ex) { Console.WriteLine(ex.Message); } catch (IndexOutOfRangeException ex) { Console.WriteLine(ex.Message); } catch (FormatException ex) { Console.WriteLine(ex.Message); } catch (ArgumentNullException ex) { Console.WriteLine(ex.Message); } catch (ArgumentException ex) { Console.WriteLine(ex.Message); } catch (Exception ex) { Console.WriteLine(ex.Message); } }