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

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

Восстановить пароль Регистрация
 
Лапа
Сообщений: n/a
01.07.2014, 18:50     Разработать производный от абстрактного класса Figure класс и класс, производный от производного #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++ Создать производный класс ТРОИЧНЫЙ ВЕКТОР от класса Vector
Есть производный класс и базовый; при чём производный использует только ЧАСТЬ ресурсов базового, правильно ли это? C++
Создать производный класс complexExt от класса Complex C++
C++ Производный класс не видит перегруженную операцию базового класса
Указатели в базовом классе на базовый класс и производный класс C++
Создать класс линия и производный класс отрезок C++
Разработать класс и производный класс C++
C++ Написать класс строка и производный класс, ее шифрующий

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
03.07.2014, 11:46     Разработать производный от абстрактного класса Figure класс и класс, производный от производного #2
Лапа, и в чем проблема? Кроме того, что код просто ужасен.
Yandex
Объявления
03.07.2014, 11:46     Разработать производный от абстрактного класса Figure класс и класс, производный от производного
Ответ Создать тему
Опции темы

Текущее время: 05:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru