Технический форум

Технический форум (http://www.tehnari.ru/)
-   C/C++/С# (http://www.tehnari.ru/f42/)
-   -   Создать абстрактный класс Figure (http://www.tehnari.ru/f42/t257379/)

Anton1990 03.01.2018 01:18

Создать абстрактный класс Figure
 
помогите доработать программу
Создать абстрактный класс Figure. На его основе реализовать классы Rectangle (прямоугольник), Circle (круг) и Trapezium (трапеция) с возможностью вычисления площади, центра тяжести и периметра.
Создать класс Picture, содержащий параметризованную коллекцию объектов этих классов в динамической памяти. Предусмотреть возможность вывода характеристик объектов списка. Написать демонстрационную программу, в которой будут использоваться все методы классов.
Дополнительное задание: дополнить класс методами сортировки по некоторому критерию, вывода в файл и считывания из файла.

Код:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace ConsoleApp7 {    class Program    {        static void Main(string[] args)        {            Figure[] Фигуры = new Figure[6];            Фигуры[0] = new Circle(3.0);            Фигуры[1] = new Rectangle(4.0, 5.0);            Фигуры[2] = new Trapezium(3.0, 4.0, 5.0,6.0,7.0);            Фигуры[3] = new Rectangle(3.0,5.0);            Фигуры[4] = new Rectangle(3.0, 4.0);            Фигуры[5] = new Circle(3.0);              for (int i = 0; i < Фигуры.Length; i++)            {                Console.WriteLine("Площадь равна: " + Фигуры[i].Pl());                Console.WriteLine("Центр тяжести равен: " + Фигуры[i].CT());                Console.WriteLine("Периметр равен: " + Фигуры[i].Per());                Console.WriteLine();            }            Console.Read();        }    }      // абстрактный класс фигуры    abstract class Figure    {        // исключения для классов наследников        protected Exception OutOfMaxBorder = new Exception("Исключение, превышена максимальная граница");        protected Exception NonBellowZero = new Exception("Исключение, введенное значение не может быть отрицательным!");            // абстрактный метод для получения площади          public abstract double Pl();          // абстрактный метод для получения центра тяжести          public abstract double CT();          // абстрактный метод для получения периметра          public abstract double Per();    }      class Rectangle : Figure // производный класс прямоугольника    {        double a,b;                  public double A        {            get { return a; }            set { if (value > 0) a = value; }        }          public double B        {            get { return b; }            set { if (value > 0) b = value; }        }                  public Rectangle(double a, double b)          {            this.A=a;            this.B=b;        }                  // переопределение получения площади        public override double Pl()        {            return A * B;        }          // переопределение получения центра тяжести        public override double CT()        {            return B / 2.0;        }        // переопределение получения периметра        public override double Per()        {            return 2 * (A + B);        }    }      class Circle : Figure //производный класс круга    {        double r;                  public double R        {            get { return r; }            set { if (value > 0) r = value; }        }                  public Circle(double r)        {              this.R=r;        }                  // переопределение получения площади        public override double Pl()        {            return Math.PI*R*R;        }          // переопределение получения центра тяжести        public override double CT()        {            return R;        }                  // переопределение получения периметра        public override double Per()        {            return 2 * Math.PI*R;        }    }      class Trapezium : Figure //  производный класс трапеции    {        double a,b,c,d,h;                  public double A        {            get { return a; }            set { if (value > 0) a = value; }        }          public double B        {            get { return b; }            set { if (value > 0) b = value; }        }                  public double C        {            get { return c; }            set { if (value > 0) d = value; }        }          public double D        {            get { return d; }            set { if (value > 0) d = value; }        }                  public double H        {            get { return h; }            set { if (value > 0) h = value; }        }                          public Trapezium(double a, double b, double c, double d, double h)          {              this.A=a;            this.B=b;            this.C=c;            this.D=d;            this.H=h;        }                  public override double Pl()        {            return ((A + B)/2.0)*H;        }          public override double CT()        {            return (H/3.0)*(2*B+A)/(A+B);        }        public override double Per()        {            return (A+B+C+D);        }    }          }

Olej 15.01.2018 15:34

Цитата:

Сообщение от Anton1990 (Сообщение 2545206)
Создать абстрактный класс Figure. На его основе реализовать классы Rectangle (прямоугольник), Circle (круг) и Trapezium (трапеция) с возможностью вычисления площади, центра тяжести и периметра.

Код:

class figure : protected complex<double> {      // абстрактный класс произвольной фигуры
protected:                                      // центр в точке: [real,imag]
  double r;                                    // масштаб (радиус описанной окружности)
public:
  figure( double radius ) : complex<double>( 0.0, 0.0 ), r( radius ) {}
  figure& move( double x, double y ) {
      *(complex<double>*)this = complex<double>( x, y );
      return *this;
  }
  friend inline ostream& operator << ( ostream& stream, figure& obj ) {
      return stream << "фигура " << obj.title()
            << " [" <<  obj.real() << "," << obj.imag()
            << "]: площадь=" << obj.area() << ", периметр=" << obj.perimeter();
  };
  virtual const char *title( void ) const = 0; // 3 чистые (пустые) виртуальные функции
  virtual double area( void ) = 0;
  virtual double perimeter( void ) = 0;
};

Код:

class circle : public figure {                  // класс всех окружностей
public:
  circle( double r = 1. ) : figure( r ) {};
  const char *title( void ) const { return "круг"; };
  virtual double area( void ) { return M_PI * r * r; };
  virtual double perimeter( void ) { return 2. * M_PI * r; };
};

Вот где-то так... А всё остальное - по аналогии, просто.


Часовой пояс GMT +4, время: 08:32.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.