Наследование. Дополнить программу. - C#

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

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

Создать абстрактный класс Function (функция) с виртуальными методами вычисления значения функции y = f(x) в заданной точке х и вывода результата на экран. На его основе реализовать классы Ellipse, Hiperbola и Parabola. Создать класс Series (набор), содержащий массив/параметризованную коллекцию объектов этих классов в динамической памяти. Предусмотреть возможность вывода характеристик объектов списка. Написать демонстрационную программу, в которой будут использоваться все методы классов. Дополнить класс методами сортировки по некоторому критерию, вывода в файл и считывания из файла.
using System;
using System.Collections.Generic;
 
namespace laba10
{
    abstract class Function
    {
        abstract public void ShowResult(double arg);
        abstract public double Result(double arg);
    }
 
    sealed class Parabola : Function
    {
        public Parabola(double a, double b, double c)
        {
            this.a = a;
            this.b = b;
            this.c = c;
        }
 
        public override void ShowResult(double arg)
        {
            Console.WriteLine("Parabola({0:0.0}, {1:0.0}, {2:0.0}, {3:0.0}) = {4:0.00}", a, b, c, arg, Result(arg));
        }
 
        public override double Result(double arg)
        {
            return a * arg * arg + b * arg + c;
        }
 
        public double a;
        public double b;
        public double c;
    }
 
    sealed class Hiperbole : Function
    {
        public Hiperbole(double a, double b)
        {
            this.a = a;
            this.b = b;
        }
 
        public override void ShowResult(double arg)
        {
            Console.WriteLine("Hiperbole({0:0.0}, {1:0.0}, {2:0.0}) = {3:0.00}", a, b, arg, Result(arg));
        }
 
        public override double Result(double arg)
        {
            if (arg * arg - a * a < 0)
                throw new InvalidOperationException("Неверно заданы полуоси");
            return b / a * Math.Sqrt(arg * arg - a * a);
        }
 
        public double a; // большая и малая полуоси
        public double b;
    }
 
    sealed class Ellipse : Function
    {
        public Ellipse(double a, double b)
        {
            this.a = a;
            this.b = b;
        }
 
        public override void ShowResult(double arg)
        {
            Console.WriteLine("Ellipse({0:0.0}, {1:0.0}, {2:0.0}) = {3:0.00}", a, b, arg, Result(arg));
        }
 
        public override double Result(double arg)
        {
            if (Math.Abs(a) < 1e-8)
                throw new DivideByZeroException("Произошло деление на 0.");
            if (1 - arg * arg / a / a < 0)
                throw new InvalidOperationException("Неверно заданы полуоси.");
            return b * Math.Sqrt(1 - arg * arg / a / a);
        }
 
        public double a; // большая и малая полуоси
        public double b;
    }
 
    class Program
    {
        static void Main()
        {
            var f = new List<Function>();
 
            f.Add(new Parabola(5, -2, 0));
            f.Add(new Hiperbole(1, 2));
            f.Add(new Ellipse(10, 8));
 
            try
            {
                foreach (var i in f)
                    i.ShowResult(2);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

Решение задачи: «Наследование. Дополнить программу.»

textual
Листинг программы
class Series
{
   ...
   public void Sort()
   {
       _functions.Sort();
   }
   ...
}

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


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

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

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