Наследование. Дополнить программу. - 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(); } ... }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д