Написать программу, реализующую иерархию классов собирателей водорослей - C#

Узнай цену своей работы

Формулировка задачи:

Помогите написать программу, реализующую иерархию классов собирателей водорослей (Collector). Задание дали в универе, а у меня глаза разбегаются, когда читаю условие. Как это все реализовать?

Задание:

Написать программу, реализующую иерархию классов собирателей водорослей (Collector).

Собиратели бывают следующих типов:

Дельфин (Dolphin)

Стартовая скорость не зависит от оплаты (её не платят) и составляет 15 кг/час. Коэффициент уставания – 0.1.

Водолаз (Diver)

Стартовая скорость кусочно-линейно зависит от оплаты: в диапазоне 0–120 грн пропорциональна оплате, коэффициент пропорциональности–0.3кг/грн. При дальнейшем росте оплаты стартовая скорость остаётся постоянной. Коэффициент уставания – 0.3.

Доброволец (Volunteer)

Стартовая скорость зависит от оплаты таким образом: v=10∙(1-exp(-0.2x) ), где v – скорость в кг/час, x – оплата в грн/час. Коэффициент уставания – 0.4.

Киборг (Cyborg)

Стартовая скорость не зависит от оплаты и составляет 7 кг/час. Коэффициент уставания – 0.01, но после 4 часов работы киборг выключается из-за истощения топливного элемента. Имя для всех киборгов одно (IС1000). В программе завести массив собирателей, заполнить конкретных собирателей разных типов. Для измерения добычи для каждого объекта по указателю вызывается функция work без аргументов, возвращающая искомый показатель. Перед работой каждый сборщик получает (или игнорирует) оплату с помощью функции pay. После каждого часа работы скорость падает пропорционально коэффициенту уставания. Например, при начальной скорости 10 кг/час и коэффициенте уставания 0.15 в первый час будет собрано 10 кг, во второй – 8.5 кг, в третий – 7.225 кг. и т.д. Вывести почасовую добычу всех созданных собирателей. Предоставить возможность определить для каждого типа количество собирателей и полное количество всех собирателей.

Заранее спасибо!

Решение задачи: «Написать программу, реализующую иерархию классов собирателей водорослей»

textual
Листинг программы
  1.     abstract class Collector
  2.     {
  3.         /// <summary>
  4.         /// Имя
  5.         /// </summary>
  6.         public virtual string Name {get; set; }
  7.  
  8.         /// <summary>
  9.         /// Текущая скорость сбора (кг/час)
  10.         /// </summary>
  11.         public abstract double Speed { get; }
  12.  
  13.         /// <summary>
  14.         /// Плата (грн/час)
  15.         /// </summary>
  16.         public double Payment { get; private set; }
  17.  
  18.         /// <summary>
  19.         /// Оплата (грн/час)
  20.         /// </summary>
  21.         public void Pay(double payment)
  22.         {
  23.             Payment = payment;
  24.         }
  25.  
  26.         /// <summary>
  27.         /// Текущее время (ч)
  28.         /// </summary>
  29.         public int Time { get; private set; }
  30.  
  31.         /// <summary>
  32.         /// Работа (вызывается каждый час)
  33.         /// </summary>
  34.         /// <returns>Объем собранной рыбы (кг) за последний час</returns>
  35.         public double Work()
  36.         {
  37.             var res = Speed;
  38.             Time++;
  39.             return res;
  40.         }
  41.     }
  42.  
  43.  
  44.     class Dolphin : Collector
  45.     {
  46.         public override double Speed
  47.         {
  48.             get { return 15 * Math.Pow(0.9, Time); }
  49.         }
  50.     }
  51.  
  52.     class Diver : Collector
  53.     {
  54.         public override double Speed
  55.         {
  56.             get{ return 0.3 * Math.Min(120, Payment) * Math.Pow(0.7, Time); }
  57.         }
  58.     }
  59.  
  60.     class Volunteer : Collector
  61.     {
  62.         public override double Speed
  63.         {
  64.             get { return 10 * (1 - Math.Exp(-0.2 * Payment)) * Math.Pow(0.6, Time); }
  65.         }
  66.     }
  67.  
  68.     class Cyborg : Collector
  69.     {
  70.         public override double Speed
  71.         {
  72.             get { return Time > 3 ? 0 : 7 * Math.Pow(0.99, Time); }
  73.         }
  74.  
  75.         public override string Name
  76.         {
  77.             get{ return "IС1000"; }
  78.             set {}
  79.         }
  80.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы