Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 78
1

Класс Picture, содержащий параметризованную коллекцию объектов Rectangle, Circle и Trapezium

01.01.2018, 15:00. Показов 3518. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите пожалуйста с заданием
Создать абстрактный класс Figure. На его основе реализовать классы Rectangle (прямоугольник), Circle (круг) и Trapezium (трапеция) с возможностью вычисления площади, центра тяжести и периметра.
Создать класс Picture, содержащий параметризованную коллекцию объектов этих классов в динамической памяти. Предусмотреть возможность вывода характеристик объектов списка. Написать демонстрационную программу, в которой будут использоваться все методы классов.
Дополнительное задание: дополнить класс методами сортировки по некоторому критерию, вывода в файл и считывания из файла.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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].Per());
                Console.WriteLine();
            }
            Console.Read();
        }
    }
 
    public abstract class Figure
    {
        protected Exception OutOfMaxBorder = new Exception("Исключение, превышена максимальная граница");
        protected Exception NonBellowZero = new Exception("Исключение, введенное значение не может быть отрицательным!");
 
        double a, b, c, d, r,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) C = value; }
        }
 
        public double D
        {
            get { return d; }
            set { if (value > 0) d = value; }
        }
 
        public double R
        {
            get { return r; }
            set { if (value > 0) r = value; }
        }
 
        public double H
        {
            get { return h; }
            set { if (value > 0) h = value; }
        }
 
        public Figure(double r) //Конструктор для круга, квадрата и равностороннего треугольника
        {
            this.r = r;
        }
        public Figure(double a, double b) //Конструктор для круга, квадрата и равностороннего треугольника
        {
            this.a = a;
            this.b = b;
        }
 
 
        public Figure(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 abstract double Pl();
         public abstract double CT();
         public abstract double Per();
    }
 
    class Rectangle : Figure // Треугольник
    {
        public Rectangle(double a, double b) : base(a, 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 // Треугольник
    {
        public Circle(double r) : base(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 // Треугольник
    {
        public Trapezium(double a, double b, double c, double d, double h) : base(a, b, c, d, 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);
        }
    }
    
    
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.01.2018, 15:00
Ответы с готовыми решениями:

Создать абстрактный базовый класс Figure и производные классы Rectangle, Circle
Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра....

Создать класс Рoint (Точка), а также классы Rectangle (Прямоугольник) и Circle (Окружность)
Пожалуйста помогите написать программу в С# Создать класс Рoint (Точка), а также классы...

Создать класс Rectangle, содержащий следующие члены класса
VS 2010. Компилятор выдает ошибки, Предложение using должно предшествовать любым другим элементам...

Создать параметризованную коллекцию (List<object>) для хранения описанного класса
Реализовать классы к программе представленной ниже. Создать параметризованную...

3
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
01.01.2018, 21:00 2
конструкторы и свойства из абстрактного класса убрать: здесь они не применимы, потому что ты ограничиваешь наследников. Они сами должны определять свои конструкторы и свойства. Площадь, периметр и центр тяжести правильно сделал.

Добавлено через 17 минут
Хотя не совсем правильно. Поскольку тебе нужно расчитывать центр тяжести, то фигуры нужно задавать координатами
0
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 78
02.01.2018, 11:11  [ТС] 3
то есть код должен выглядеть так?
и как сделать, чтобы правильно вычислить центр тяжести?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
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);
        }
    }
    
    
}
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
02.01.2018, 22:15 4
Цитата Сообщение от Антон1990 Посмотреть сообщение
как сделать, чтобы правильно вычислить центр тяжести?
Вершины нужно задавать координатами:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public abstract class Figure
{
    protected Exception OutOfMaxBorder = new Exception("Исключение, превышена максимальная граница");
    protected Exception NonBellowZero = new Exception("Исключение, введенное значение не может быть отрицательным!");
    /// <summary>
    /// Площадь фигуры
    /// </summary>
    public abstract double Square();
    /// <summary>
    /// Центр тяжести
    /// </summary>
    public abstract Point Grav();
    /// <summary>
    /// Периметр
    /// </summary>
    public abstract double Per();
    /// <summary>
    /// Расстояние между точками
    /// </summary>
    /// <param name="pt1">Первая точка</param>
    /// <param name="pt2">Вторая точка</param>
    protected double Distance(Point pt1, Point pt2)
    {
        return Math.Sqrt(Math.Pow(pt2.X - pt1.X, 2) + Math.Pow(pt2.Y - pt1.Y, 2));
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Circle : Figure
{
    public double Radius { get; set; }
    public Point Center { get; set; }
 
    public Circle(Point center, double radius)
    {
        Radius = radius;
        Center = center;
    }
 
    public override Point Grav()
    {
        return Center;
    }
 
    public override double Per()
    {
        return Math.PI * 2 * Radius;
    }
 
    public override double Square()
    {
        return Math.PI * Radius * Radius;
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class Trapezoid : Figure
{
    private Point _lb1;
    private Point _lb2;
    private Point _sb1;
    private Point _sb2;
    private double _h;//высота трапеции
    /// <summary>
    /// Конструктор трапеции
    /// </summary>
    /// <param name="lb1">Начало большего основания трапеции.</param>
    /// <param name="lb2">Конец большего основания трапеции.</param>
    /// <param name="sb1">Начало меньшего основания трапеции.</param>
    /// <param name="sb2">Конец меньшего основания трапеции.</param>
    public Trapezoid(Point lb1, Point lb2, Point sb1, Point sb2)
    {
        _lb1 = lb1;
        _lb2 = lb2;
        _sb1 = sb1;
        _sb2 = sb2;
        //Вычисление высоты. Расстояние от точки до прямой.
        var p1 = _lb2.X - _lb1.X;
        var p2 = _lb2.Y - _lb1.Y;
        var a = p2;
        var b = -p1;
        var c = p1 * _lb1.Y - p2 * _lb1.X;
        _h = Math.Abs(a * _sb1.X + b * _sb1.Y + c) / Math.Sqrt(a * a + b * b);
    }
 
    public override Point Grav()
    {
        var t1 = new Triangle(_lb1, _sb1, _lb2);
        var t2 = new Triangle(_sb1, _sb2, _lb2);
        var tg1 = t1.Grav();
        var tg2 = t1.Grav();
        var x = (t1.Square() * tg1.X + t2.Square() * tg2.X) / Square();
        var y = (t1.Square() * tg1.Y + t2.Square() * tg2.Y) / Square();
        return new Point(x, y);
    }
 
    public override double Per()
    {
        var a = Distance(_lb1, _sb1);
        var b = Distance(_sb1, _sb2);
        var c = Distance(_sb2, _lb2);
        var d = Distance(_lb1, _lb2);
        return a + b + c + d;
    }
 
    public override double Square()
    {
        return _h / 2 * (Distance(_lb1, _lb2) + Distance(_sb1, _sb2));
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Triangle : Figure
{
    private Point _va;
    private Point _vb;
    private Point _vc;
 
    public Triangle(Point vA, Point vB, Point vC)
    {
        _va = vA;
        _vb = vB;
        _vc = vC;
    }
 
    public override Point Grav()
    {
        var x = (_va.X + _vb.X + _vc.X) / 3;
        var y = (_va.Y + _vb.Y + _vc.Y) / 3;
        //Центр тяжести лежит на пересечении медиан
        return new Point(x, y);
    }
 
    public override double Per()
    {
        return Distance(_va, _vb) + Distance(_vb, _vc) + Distance(_vc, _va);
    }
 
    public override double Square()
    {
        var a = Distance(_vb, _vc);
        var b = Distance(_va, _vc);
        var c = Distance(_va, _vb);
        var p = Per() / 2;
        return Math.Sqrt(p * (p - a) * (p - b) * (p - c));
    }
}

Ну и коллекция с тремя методами сортировки:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Picture : List<Figure>
{
    /// <summary>
    /// Сортировка по площади
    /// </summary>
    /// <returns></returns>
    public List<Figure> SortBySquare()
    {
        var result = new List<Figure>(this);
        result.Sort(delegate (Figure f1, Figure f2)
        {
            return f1.Square().CompareTo(f2.Square());
        });
        return result;
    }
    /// <summary>
    /// Сортировка по периметру
    /// </summary>
    public List<Figure> SortByPerimeter()
    {
        var result = new List<Figure>(this);
        result.Sort(delegate (Figure f1, Figure f2)
        {
            return f1.Per().CompareTo(f2.Per());
        });
        return result;
    }
    /// <summary>
    /// Сортировка по центру тяжести (расстояние до начала координат)
    /// </summary>
    public List<Figure> SortByGravity()
    {
        var result = new List<Figure>(this);
        result.Sort(delegate (Figure f1, Figure f2)
        {
            var pt1 = f1.Grav();
            var pt2 = f2.Grav();
            var d1 = Math.Sqrt(pt1.X * pt1.X + pt1.Y * pt1.Y);
            var d2 = Math.Sqrt(pt2.X * pt2.X + pt2.Y * pt2.Y);
            return d1.CompareTo(d2);
        });
        return result;
    }
}
1
02.01.2018, 22:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2018, 22:15
Помогаю со студенческими работами здесь

Определить класс Rectangle и класс Point. Объявить массив из n объектов класса Point. Написать функцию, определяющ
Определить класс Rectangle и класс Point. Объявить массив из n объектов класса Point. Написать ...

Описать класс, содержащий коллекцию комплексных чисел
Ребят, подскажите, как реализовать в С# класс, содержащий коллекцию комплексных чисел,и как с ним...

Рисование на Image (Rectangle, Circle)
Всем доброго времени суток. Мне немного стыдно что пишу сюда столь глупый вопрос, но обстоятельства...

Задача в Java (Span,Circle,Rectangle)
Не знаю в правилном отделе форума открил тему или нет,если нет то извиняюсь. Нужни 3 класса: класс...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru