Написал программу на 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
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
| #include <iostream>
#include <cmath>
#include <string>
#define PI 3.14159265
class Triangle {
public:
double angle[3];
double side[3];
double square() {
if (angle[0] == 90) { return side[0] * side[2] / 2; }
else if (angle[2] == 90) { return side[1] * side[2] / 2; }
else return (((side[0] * side[2]) / 2) * sin(angle[0] * PI / 180));
}
double perimeter() {
return side[0] + side[1] + side[2];
}
double H() {
if (angle[0] == 90) { return square() * 2 / side[2]; }
else if (angle[2] == 90) { return side[1] * side[0] / 2; }
else return (square() * 2) / side[2];
}
void Type() {
if (angle[0] == angle[1] && angle[0] == angle[2]) {
std::cout << "Треугольник равностороний";
}
else if (angle[0] == angle[1] || angle[0] == angle[2] || angle[1] == angle[2]) {
std::cout << "Треугольник равнобедренный\n";
}
else if (angle[0] == 90 || angle[1] == 90 || angle[2] == 90) {
std::cout << "Прямоугольный треугольник\n";
}
else std::cout << "Обычный треугольник\n";
}
};
int main()
{
Triangle obj;
setlocale(0, "");
int repeat, i = 0;
std::string imposible = "yes";
do {
std::cout << "Эта программа находит : Площадь , периметр , высоту и определяет тип введенного вами треугольника\n Пометка - При вычислении S используется 1 и 3 сторона и 1 угол\n";
do {
do {
i = 0;
std::cout << "Введите стороны треугольника , 3 вводимая сторона - основание \n";
while (i != 3) {
if (i == 2) { std::cout << "Эта сторона является основанием \n"; }
std::cout << "Введите " << i + 1 << "-ю сторону вашего треугольника\n";
std::cin >> obj.side[i];
while (std::cin.get() != '\n') {
while (std::cin.fail()) {
std::cin.clear();
std::cin.ignore(1000, '\n');
std::cout << "Вы ввели не корректоне значение на " << i + 1 << "-ой стороне\n";
std::cin >> obj.side[i];
}
}
i++;
}
if (obj.side[0] > obj.side[1] + obj.side[2] || obj.side[2] > obj.side[1] + obj.side[0] || obj.side[1] > obj.side[0] + obj.side[2] || obj.side[0] == 0 || obj.side[1] == 0 || obj.side[0] == 0 )
{
std::cout << "Вы ввели не существующий треугольник , повторите ввод\n";
}
} while (obj.side[0] > obj.side[1] + obj.side[2] || obj.side[2] > obj.side[1] + obj.side[0] || obj.side[1] > obj.side[0] + obj.side[2] || obj.side[0] == 0 || obj.side[1] == 0 || obj.side[0] == 0 );
i = 0;
system("cls");
std::cout << "Введите углы треугольника , 1 и 3 вводимый угол - углы при основании\n";
do {
while (i != 3) {
if (i == 0 || i == 2) { std::cout << "Это угол при основании \n"; }
std::cout << "Введите " << i + 1 << "-ый угол вашего треугольника\n";
std::cin >> obj.angle[i];
while (std::cin.get() != '\n') {
while (std::cin.fail()) {
std::cin.clear();
std::cin.ignore(1000, '\n');
std::cout << "Вы ввели не корректоне значение на " << i + 1 << "-ом угле\n";
std::cin >> obj.angle[i];
}
}
i++;
}
i = 0;
if (obj.angle[0] + obj.angle[1] + obj.angle[2] > 180 || obj.angle[0] == 0 || obj.angle[1] == 0 || obj.angle[0] == 0) { std::cout << "Вы ввели не корректное значение углов , повторите ошибку.Возможно сумма больше 180"; }
} while (obj.angle[0] + obj.angle[1] + obj.angle[2] > 180 || obj.angle[0] == 0 || obj.angle[1] == 0 || obj.angle[0] == 0);
if (obj.angle[0] == obj.angle[1] && obj.side[1] == obj.side[2]) { imposible = "no"; }
else if (obj.angle[1] == obj.angle[2] && obj.side[0] == obj.side[2]) { imposible = "no"; }
else if (obj.angle[2] == obj.angle[0] && obj.side[0] == obj.side[1]) { imposible = "no"; }
if (obj.angle[0] == obj.angle[1] && obj.angle[1] == obj.angle[2] && obj.side[0] == obj.side[1] && obj.side[1] == obj.side[2]) { imposible = "no"; }
if (obj.side[0] / sin(obj.angle[2]) != obj.side[1] / sin(obj.angle[0]) || obj.side[0] / sin(obj.angle[2]) != obj.side[2] / sin(obj.angle[1]) || obj.side[2] / sin(obj.angle[1]) != obj.side[1] / sin(obj.angle[0]));
else imposible = "no";
if (imposible == "yes") {
std::cout << "Вы не правильно ввели данные или такого треугольника не существует\n ";
std::cout << "Повторить попытку ?\n 1-yes\n 2-no\n";
int chooice;
std::cin >> chooice;
while (std::cin.get() != '\n') {
while (std::cin.fail() || chooice < 1 || chooice > 2) {
std::cin.clear();
std::cin.ignore(1000, '\n');
std::cout << "Вы ввели не корректное значение ,Повторите ввод";
std::cin >> chooice;
}
}
if (chooice == 2) { return 0; }
}
else system("cls");
} while (imposible != "no");
std::cout << "Выберете через какой угол будет находиться площадь 1 - первый при основании 2 - второй при основании\n";
imposible = "yes";
system("cls");
std::cout << "Ваш треугольник\n";
while (i != 3) {
if (i == 3) { std::cout << "Основание = " << obj.side[i] << "\n"; }
else std::cout << i + 1 << "я сторона треугальника =" << obj.side[i] << "\n";
i++;
}
std::cout << "Углы при основании = " << obj.angle[0] << " " << obj.angle[2] << "\n";
std::cout << "Угол на против основания = " << obj.angle[1] << "\n";
std::cout << " S треуг = " << obj.square() << "\nP треуг = " << obj.perimeter() << "\nH треуг = " << obj.H() ;
std::cout << "\nВаш треугольник -";
obj.Type();
std::cout << "\n Хотите повторить программу ?\n1 - yes\n2 - no\n";
std::cin >> repeat;
while (std::cin.get() != '\n') {
while (std::cin.fail()) {
std::cin.clear();
std::cin.ignore(1000, '\n');
std::cout << "Вы ввели не корректоное значение повторите попытку \n";
std::cin >> repeat;
}
}
i = 0;
} while (repeat != 2);
} |
|
p.s простите ,файлом не смог прикрепить