Написать программу, реализующую иерархию классов собирателей водорослей - 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
Листинг программы
    abstract class Collector
    {
        /// <summary>
        /// Имя
        /// </summary>
        public virtual string Name {get; set; }
 
        /// <summary>
        /// Текущая скорость сбора (кг/час)
        /// </summary>
        public abstract double Speed { get; }
 
        /// <summary>
        /// Плата (грн/час)
        /// </summary>
        public double Payment { get; private set; }
 
        /// <summary>
        /// Оплата (грн/час)
        /// </summary>
        public void Pay(double payment)
        {
            Payment = payment;
        }
 
        /// <summary>
        /// Текущее время (ч)
        /// </summary>
        public int Time { get; private set; }
 
        /// <summary>
        /// Работа (вызывается каждый час)
        /// </summary>
        /// <returns>Объем собранной рыбы (кг) за последний час</returns>
        public double Work()
        {
            var res = Speed;
            Time++;
            return res;
        }
    }
 
 
    class Dolphin : Collector
    {
        public override double Speed
        {
            get { return 15 * Math.Pow(0.9, Time); }
        }
    }
 
    class Diver : Collector
    {
        public override double Speed
        {
            get{ return 0.3 * Math.Min(120, Payment) * Math.Pow(0.7, Time); }
        }
    }
 
    class Volunteer : Collector
    {
        public override double Speed
        {
            get { return 10 * (1 - Math.Exp(-0.2 * Payment)) * Math.Pow(0.6, Time); }
        }
    }
 
    class Cyborg : Collector
    {
        public override double Speed
        {
            get { return Time > 3 ? 0 : 7 * Math.Pow(0.99, Time); }
        }
 
        public override string Name
        {
            get{ return "IС1000"; }
            set {}
        }
    }

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


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

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

13   голосов , оценка 3.923 из 5
Похожие ответы