0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 3
1

Тест программы на уязвимость и недоработки

20.11.2019, 21:51. Показов 427. Ответов 1
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Написал программу на 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 простите ,файлом не смог прикрепить
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2019, 21:51
Ответы с готовыми решениями:

Доработка программы - недоработки исходного кода
Приветствую всех форумчан (начинающих программистов и очень продвинутых). Моя проблема в следующем:...

исправить недоработки
Срочно надо исправить несколько недоработок в простейшем калькуляторе. Вот что надо сделать: 1....

Недоработки в программе
Здравствуйте. Написал программу, но работает она не так как пишет в условиях, к примеру если...

Сортировка выбором с подсчётом (недоработки)
Необходимо осуществить сортировку выбором с подсчётом(у меня в коде другой реализован другой метод...

1
фрилансер
5225 / 4764 / 1001
Регистрация: 11.10.2019
Сообщений: 12,499
20.11.2019, 22:23 2
Цитата Сообщение от no_name777 Посмотреть сообщение
Главное правило не редактировать код
а что так. А то запросто

C++
1
2
Triangle t;
t.angle[100000000]=0;
1
20.11.2019, 22:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2019, 22:23
Помогаю со студенческими работами здесь

Indy и SSL. есть еще недоработки?
Добрый день. Есть, в общем, стандартный код загрузки https страницы procedure LoadUrl(const...

Генетическое программирование (найти недоработки в проекте)
Доброго времени суток! Очень нужна ваша помощь... Я сам не очень разбираюсь в программировании на...

Баги, ошибки, дыры, недоработки phpBB
если вам известны баги в пхпББ форумах, расскажите о них здесь, плиз! Спасибо!

Исправить ошибки и доработать недоработки SEO
Друзья, я в полном ступоре! Не знаю даже какой запрос прописать в поисковиках, для решения своей...


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

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

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