Лапа
1

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

01.07.2014, 18:50. Показов 1572. Ответов 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)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2014, 18:50
Ответы с готовыми решениями:

Определить на основе абстрактного класса производный класс
1. Определить произвольный базовый класс, содержащий конструктор, деструктор, данные (поля) и два...

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

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

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

1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
03.07.2014, 11:46 2
Лапа, и в чем проблема? Кроме того, что код просто ужасен.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.07.2014, 11:46
Помогаю со студенческими работами здесь

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

Производный класс от класса из библиотеки
Приветствую. Как использовать приватные методы класса наследованного от абстрактного класса из...

Класс строка,производный от класса Битовая_Строка
Помогите,пож,написать программу!!!!!!!!!!!!!!!!!! Описать базовый класс Строка. Обязательные поля...

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

Разработать базовый класс "прямоугольник", производный класс "Окно" и класс-контейнер "Список окон"
Реализовать все задачи в С # WPF 1. Разработать класс прямоугольник, имеющий координаты верхнего...

Создать производный от класса «Человек» класс «Путешественник»
Создать производный от класса «Человек» класс «Путешественник», содержащий следующие данные: •...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru