Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Лапа
Сообщений: n/a
#1

Разработать производный от абстрактного класса Figure класс и класс, производный от производного - C++

01.07.2014, 18:50. Просмотров 670. Ответов 1
Метки нет (Все метки)

Разработать базовый абстрактный класс Figure с пустым виртуальным методом print для вывода в дальнейшем полной информации об объекте: поля, площадь, периметр, и т.д. и могут быть другие виртуальные или пустые виртуальные методы.
Разработать производный от Figure класс и класс, производный от производного с полями и методами (указываются в варианте задания).
Создать класс треугольник, члены класса - длины 3-х сторон.
Предусмотреть в классе методы проверки существования треугольника,
вычисления и вывода сведений о фигуре – длины сторон, углы, периметр,
площадь. Создать производный класс – прямоугольный треугольник,
предусмотреть в классе проверку, является ли треугольник прямоугольным.
Написать программу, демонстрирующую работу с классом: дано M
треугольников и N прямоугольных треугольников, найти среднюю площадь
М треугольников и прямоугольный треугольник с наибольшей гипотенузой.

вот примерно что получилось:
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
182
183
184
185
186
187
#include <iostream>
#include <vector>
#include <cmath>
#include <stdexcept>
#include <cstdlib>
#include <ctime>
 
class Figure
{
virtual void print (void) = 0;
};
class Triangle : public Figure
{
protected:
double _a, _b, _c;
const static double pi = 3.14;
public:
//инициализация нулем
Triangle() : _a(0), _b(0), _c(0) {}
 
void Triangle::Print()
{printf("%lf %lf %lf\n", _a, _b, _c);
}
 
Triangle(double a, double b, double c) : _a(a), _b(b), _c(c) {}
Triangle(const Triangle& other) : _a(other._a), _b(other._b), _c(other._c) {}
// стороны
const double a() const 
{ 
return _a; 
}
const double b() const 
{ 
return _b; 
}
const double c() const 
{
return _c;
}
 
//периметр
const double perimeter() const 
{ 
return _a+_b+_c; 
}
 
//площадь треугольника(по формуле Герона)
const double area()const
{
double p;
p =(_a+_b+_c)/2;
return (sqrt(p*(p-(_a))*(p-(_b))*(p-(_c))));
}
//проверка на существование
const bool is_possible() const { return ((_a+_b)>_c) || ((_b+_c)>_a) || ((_a+_c)>_b); }
 
//проверка на то что треугольник прямоугольный
const bool is_right() const
{
return (((Ad()-90)<0.0001) || ((Bd()-90)<0.0001) || ((Cd()-90)<0.0001));
}
 
// углы, противолежащие соответствующим сторонам
const double A() const
{
double p = (_b*_b + _c*_c - _a*_a) / (2*_c*_b);
return acos(p-static_cast<int>(p));
}
const double B() const
{
double p = (-_b*_b + _c*_c + _a*_a) / (2.0*_a*_c);
return acos(p-static_cast<int>(p));
}
const double C() const
{
double p = (_b*_b - _c*_c + _a*_a) / (2.0*_a*_b);
return acos(p-static_cast<int>(p));
}
//переводит из радиан
const double Ad() const { return A()/(pi/180.); }
const double Bd() const { return B()/(pi/180.); }
const double Cd() const { return C()/(pi/180.); }
 
//вывод
friend std::ostream& operator« (std::ostream& out, const Triangle& z)
{
out « "a: " « z.a() « ", b: " « z.b() « ", c: " « z.c() « ". ";
if (z.is_possible())
out « "Area: " « z.area();
else
out « "Impossible triangle.";
return out;
}
};
 
class RightTriangle : public Triangle
{
public:
const double hypotenuse() const { return _c; }
RightTriangle(void) : Triangle(0, 0, 0) {}
RightTriangle(double a, double b) : Triangle(a, b, pow(a*a+b*b, .5)){}
 
//проверка, что треугольник прямоугольный
RightTriangle& operator= (const Triangle& other)
{
if (this!=&other)
{
if (other.is_right())
{
if (other.A()-90 < 0.0001)
{
_a = other.c();
_b = other.b();
_c = other.a();
} else
if (other.B()-90 < 0.0001)
{
_a = other.a();
_b = other.c();
_c = other.b();
} else
if (other.C()-90 < 0.0001)
{
_a = other.a();
_b = other.b();
_c = other.c();
}
}
else
throw (std::runtime_error("Not a right triangle."));
}
return *this;
}
 
//operator Triangle() const 
//{ 
// return Triangle(_a, _b, _c); 
//}
};
 
int main()
{
srand(static_cast<unsigned int>(time(0)));
int M = 10;
int N = 10;
std::vector<Triangle> z(M);
std::vector<RightTriangle> R(N);
 
std::cout « "Triangles: " « std::endl;
double max_of_areas = 0;
for (int i=0; i < z.size(); i++)
{
z[i] = Triangle((rand()%1000+500)/10., (rand()%1000+500)/10., (rand()%500+1)/10.);
std::cout « z[i] « std::endl;
if (z[i].Square() > z[max_of_areas].Square())
max_of_areas = 1;
}
std::cout«"Max of areas:"« max_of_areas«z[max_of_areas].Square « std::endl;
}
 
int index = 0;
cout « endl « "Right triangles: " « endl;
for (int i=0; i < R.size(); i++)
{
R[i] = RightTriangle((rand()%1000+500)/10., (rand()%1000+500)/10.);
std::cout « R[i] « std::endl;
if (R[i].hypotenuse() < R[index].hypotenuse())
index = i;
}
std::cout « "Min hypotenuse has triangle number " « index « ": " « R[index].hypotenuse() « std::endl;
 
}
 
[size="1"][color="grey"][I]Добавлено через 6 минут[/I][/color][/size]
вот еще ввод из файла. тоже беда!
 
File*Triangle;
int N=10;
int M=10;
vector<Triangle>z(N);
vector<RightTriangle>R(M);
if((Triangles=fopen("Tr.txt", "r"))==0)
{
cout<<"Error"<<endl;
return;
}
while (fscanf(Triangle "%lf %lf %lf", &a, &b, &c)!=EOF)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2014, 18:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разработать производный от абстрактного класса Figure класс и класс, производный от производного (C++):

Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты. - C++
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.

Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты - C++
Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты.

Есть производный класс и базовый; при чём производный использует только ЧАСТЬ ресурсов базового, правильно ли это? - C++
Ну то есть базовый класс A, с полями, допустим, a, b, c, d. И я проектирую производный класс B и я железно знаю, что он будет использовать...

Разработать класс и производный класс - C++
Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты.

Создать производный от класса Строка класс - C++
Описать производной от класса Строка класс Строка_Идентификатор. Строки данного класса строиться по правилам записи идентификатор в языке...

Создать производный класс complexExt от класса Complex - C++
задание: Создать производный класс complexExt от класса Complex, который должен - в разделе private содержать закрытые переменные-члены...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.07.2014, 11:46 #2
Лапа, и в чем проблема? Кроме того, что код просто ужасен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2014, 11:46
Привет! Вот еще темы с ответами:

Создать производный класс ТРОИЧНЫЙ ВЕКТОР от класса Vector - C++
Народ!!! Please help me! Задолбался уже!:wall: Вобщем такое задание: Создать производный класс ТРОИЧНЫЙ ВЕКТОР от класса Vector....

Производный класс не видит перегруженную операцию базового класса - C++
Подскажите пожалуйста, почему производный класс, а именно его объект не видит перегруженную операцию, в данном случае это префиксные...

Создать класс Point и производный класс ColoredPoint (цветная точка) - C++
Создайте класс Point (точка на плоскости), характеризующийся двумя координатами. Создайте производный класс ColoredPoint (цветная точка), в...

Создать класс EMPLOYEE, производный от класса PERSON и использовать их для вычисления зарплаты сотрудника - C++
Базовый класс: ЧЕЛОВЕК (PERSON) Имя (name) – string Возраст (age) – int Создать производный класс EMPLOYEE, имеющий поля: ...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru