|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 (permalink) |
Новичок
Регистрация: 03.01.2018
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]() Создать абстрактный класс 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); } } } |
![]() |
![]() |
![]() |
|
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Рекомендую получше изучить данные топики, наверняка это будет полезного Для класса "Футболист" создать производный класс "Нападающий" и "Защитник" ООП С++ Создать класс в Лазарусе Класс не зарегистрирован. Запись-класс MP 3112 D класс |
![]() |
#2 (permalink) | |
Member
Регистрация: 10.01.2018
Сообщений: 36
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]() Цитата:
Код:
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; }; }; |
|
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
Опции темы | |
Опции просмотра | |
|
|