Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 03.01.2018, 01:18   #1 (permalink)
Anton1990
Новичок
 
Регистрация: 03.01.2018
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Создать абстрактный класс 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);         }     }           }
Anton1990 вне форума   Ответить с цитированием

Старый 03.01.2018, 01:18
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Рекомендую получше изучить данные топики, наверняка это будет полезного

Для класса "Футболист" создать производный класс "Нападающий" и "Защитник" ООП С++
Создать класс в Лазарусе
Класс не зарегистрирован.
Запись-класс
MP 3112 D класс

Старый 15.01.2018, 15:34   #2 (permalink)
Olej
Member
 
Аватар для Olej
 
Регистрация: 10.01.2018
Сообщений: 38
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Anton1990 Посмотреть сообщение
Создать абстрактный класс 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; };
};
Вот где-то так... А всё остальное - по аналогии, просто.
Olej вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.