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

Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ матрица инцидентности http://www.cyberforum.ru/cpp-beginners/thread172819.html
матрица инцидентности задано множество пар вершин, построить матрицу инцидентности как вывести матрицу инцидентности?? cout<<"\nvvedite kilkist vershin: "; cin>>n; int kr; //введення cout<<"\n"<<"vvedite pochergovo rebra (po zavershenu vvedite '0'):"<<"\n";
C++ Нужно Составить алгоритм расчета по двум формулам Всем привет! Нужно написать код что бы пользователь мог ввести число переменной и программа всё должна посчитать и выдать результат Z1 и Z2 (Ответ должен получиться одинаковый) http://www.cyberforum.ru/cpp-beginners/thread172813.html
C++ Добавление элем в список
Помогите написать программу для добавление нового элемента в однонаправленный список перед минимальным ключом списка. Добавление элем реализую в "void los::dobavlenie()" Пока получилось только вставлять элемент в конец списка. А как вставить элемент перед нужным нам элементом, то есть перед минимальным. #include<iostream.h> #include<conio.h> #include<stdio.h> #include<iomanip.h> class los...
Златопольский Д М C++
Есть отличнейший задачник Златопольский Д. М. "Сборник задач по программированию " но решений в нём нет((( и найти их что-то не получаеться, может у кого есть, а то задачи решаю и очень хотелось бы свериться!
C++ В строке символов поменять местами символы на четных и нечетных позициях http://www.cyberforum.ru/cpp-beginners/thread172805.html
В строке символов поменять местами символы на четных и нечетных позициях.
C++ Множители Дано количество способов разложить число на множители. Нужно узнать это число (наименьшее из них). Я использовал перебор чисел, для каждого узнавал количество делителей и сравнивал с нужным нам. (Число способов меньше 50). Но для чисел 31, 27, 43, 46, 47 ответ найти не удалось. Пример: Ввод: 4 Перебор..... 24=1*24=2*12=3*8=4*6 - всего 4 способа (2*12 и 12*2 считаются одним способом) Вывод: 24... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2799 / 1575 / 246
Регистрация: 03.05.2010
Сообщений: 3,656
10.10.2010, 20:17     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5]
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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
////////////////////////////////////////////////////////////////////////////////////////////
/*
Составьте программу для выполнения следующих заданий:
    1. Ввести с клавиатуры длины отрезков a, b и c.
    2. Проверить, могут ли быть эти отрезки сторонами треугольника, 
и вывести соответствующее сообщение.
    3. Используя формулу Герона и теоремы синусов и косинусов, 
вычислить периметр и площадь треугольника, высоты ha, hb и hc, медианы ma, mb и mc 
и биссектрисы la, lb и lc треугольника.
    4. Вывести результаты вычислений с комментариями на экран дисплея.
    5. Используя датчик случайных чисел, получить координаты вершин 
треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5].
    6. Не используя формулы Герона и теоремы косинусов, вычислить периметр, 
площадь и медианы треугольника.
    7. Вычислить длины наибольшей и наименьшей сторон треугольника.
    8. Вывести с комментариями результаты вычислений (координаты вершин, периметр, 
площадь и медианы, длины наименьшей и наибольшей сторон треугольника) на экран дисплея.
    9. Напечатать длины сторон в порядке возрастания.
*/
////////////////////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <complex>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <set>
#include <string>
////////////////////////////////////////////////////////////////////////////////////////////
typedef double                 T_coord;
typedef std::complex<T_coord>  T_point;
typedef std::string            T_str;
////////////////////////////////////////////////////////////////////////////////////////////
T_point  vect(T_point  A, T_point  B)
{
    return  B - A;
}
////////////////////////////////////////////////////////////////////////////////////////////
T_coord  triangle_area
    (
        const T_point& A, 
        const T_point& B,
        const T_point& C
    )
{
    T_point AB = vect(A, B);    
    T_point AC = vect(A, C);    
    return abs(AB.real() * AC.imag() - AC.real() * AB.imag()) / 2;
}
////////////////////////////////////////////////////////////////////////////////////////////
bool  are_triangle_sided
    (
        T_coord  a, 
        T_coord  b, 
        T_coord  c
    )
{
    return a < b + c
           && b < a + c
           && c < a + b;
}
////////////////////////////////////////////////////////////////////////////////////////////
T_coord  get_rand_coord_between(T_coord  min, T_coord  max)
{
    return  min + static_cast<T_coord>(rand()) / RAND_MAX * (max - min);
}
////////////////////////////////////////////////////////////////////////////////////////////
T_point  get_rand_point_between(T_coord  min, T_coord  max)
{
    return  T_point(get_rand_coord_between(min, max), get_rand_coord_between(min, max));
}
////////////////////////////////////////////////////////////////////////////////////////////
void  get_rand_triangle_vertices
    (
        T_point&  A, 
        T_point&  B, 
        T_point&  C
    )
{
    T_coord  min = -5;
    T_coord  max = 5;
 
    A = get_rand_point_between(min, max);
    B = get_rand_point_between(min, max);
 
    do
    {
        C = get_rand_point_between(min, max);
    }while(triangle_area(A, B, C) == 0);    
}
////////////////////////////////////////////////////////////////////////////////////////////
T_coord  get_triangle_bisector_c 
    (
        T_coord  a, 
        T_coord  b, 
        T_coord  c
    )
{
    return  sqrt(a * b * (a + b + c) * (a + b - c)) / (a + b);
}
////////////////////////////////////////////////////////////////////////////////////////////
T_coord  get_triangle_median_c
    (
        T_coord  a, 
        T_coord  b, 
        T_coord  c
    )
{
    return sqrt(2 * (a * a + b * b) - c * c) / 2.0;
}
////////////////////////////////////////////////////////////////////////////////////////////
T_coord  get_triangle_median_for_vertex
    (
        T_point  A, 
        T_point  B, 
        T_point  C
    )
{
    T_point  MA = (vect(A, B) + vect(A, C));
    return  abs(MA) / 2;
}
////////////////////////////////////////////////////////////////////////////////////////////
T_coord  get_triangle_perimeter
    (
        T_coord  a, 
        T_coord  b, 
        T_coord  c
    )
{
    return a + b + c;
}
////////////////////////////////////////////////////////////////////////////////////////////
T_coord  get_triangle_perimeter
    (
        T_point  A, 
        T_point  B, 
        T_point  C
    )
{   
    T_coord a = abs(vect(B, C));
    T_coord b = abs(vect(A, C));
    T_coord c = abs(vect(A, B));
    return a + b + c;
}
////////////////////////////////////////////////////////////////////////////////////////////
T_coord  get_triangle_Heron_area
    (
        T_coord  a, 
        T_coord  b, 
        T_coord  c
    )
{
    T_coord p = get_triangle_perimeter(a, b, c) / 2.0;
    return  sqrt(p * (p - a) * (p - b) * (p - c)); 
}
////////////////////////////////////////////////////////////////////////////////////////////
void print_triangle_data()
{
    std::cout << "Введите стороны треугольника:"
              << std::endl;
    T_coord a = 0;
    do
    {
        std::cout << "a = ";
        std::cin >> a;
    }while(a <= 0);
    
    T_coord b = 0;
    do
    {
        std::cout << "b = ";
        std::cin >> b;
    }while(b <= 0);
 
    T_coord c = 0;
    do
    {
        std::cout << "c = ";
        std::cin >> c;
    }while(c <= 0);
 
    bool is_triangle = are_triangle_sided(a, b, c);
    std::cout << "Эти отрезки "
              << (!is_triangle ? "НЕ " : "")
              << "могут быть сторонами треугольника."
              << std::endl;
 
    if(is_triangle)
    {
        std::cout << "Периметр треугольника равен "
            << get_triangle_perimeter(a, b, c)            
            << "."
            << std::endl;
 
        T_coord  S = get_triangle_Heron_area(a, b, c);
        std::cout << "Площадь треугольника равна  "
            << S
            << "."
            << std::endl;
 
        std::cout << std::endl
                  << "Высоты треугольника равны:"
                  << std::endl;
 
        std::cout << "ha = "
                  << 2 * S / a
                  << std::endl;
 
        std::cout << "hb = "
                  << 2 * S / b
                  << std::endl;
 
        std::cout << "hc = "
                  << 2 * S / c
                  << std::endl;
 
        std::cout << std::endl
                  << "Медианы треугольника равны:"
                  << std::endl;
 
        std::cout << "ma = "
                  << get_triangle_median_c(b, c, a)
                  << std::endl;
 
        std::cout << "mb = "
                  << get_triangle_median_c(a, c, b)
                  << std::endl;
 
        std::cout << "mc = "
                  << get_triangle_median_c(a, b, c)
                  << std::endl;
 
        std::cout << std::endl
                  << "Биссектрисы треугольника равны:"
                  << std::endl;
 
        std::cout << "la = "
                  << get_triangle_bisector_c(b, c, a)
                  << std::endl;
 
        std::cout << "lb = "
                  << get_triangle_bisector_c(a, c, b)
                  << std::endl;
 
        std::cout << "lc = "
                  << get_triangle_bisector_c(a, b, c)
                  << std::endl;     
    }
}
////////////////////////////////////////////////////////////////////////////////////////////
void print_rand_triangle_data()
{
    T_point  A;
    T_point  B;
    T_point  C;
    get_rand_triangle_vertices(A, B, C);
    std::cout << "Треугольник со случайно выбранными вершинами:"
              << std::endl
 
              << "A: "
              << A
              << std::endl
              
              << "B: "
              << B
              << std::endl
              
              << "C: "
              << C
              << std::endl
 
              << "Площадь треугольника равна:  "
              << triangle_area(A, B, C)
              << std::endl
 
              << "Периметр треугольника равен: "
              << get_triangle_perimeter(A, B, C)
              << std::endl
              << std::endl
 
              << "Медианы треугольника равны:"
              << std::endl
 
              << "ma = "
              << get_triangle_median_for_vertex(A, B, C)
              << std::endl
 
              << "mb = "
              << get_triangle_median_for_vertex(B, A, C)
              << std::endl
 
              << "mc = "
              << get_triangle_median_for_vertex(C, A, B)
              << std::endl
              << std::endl;
            
    T_coord a = abs(vect(B, C));
    T_coord b = abs(vect(A, C));
    T_coord c = abs(vect(A, B));
    typedef std::set<T_coord>  T_triangle_sides;
    T_triangle_sides  triangle_sides;
    triangle_sides.insert(a);
    triangle_sides.insert(b);
    triangle_sides.insert(c);
    std::cout << "Длина наибольшей стороны треугольника: "               
              << *triangle_sides.rbegin()
              << std::endl
              << "Длина наименьшей стороны треугольника: "               
              << *triangle_sides.begin()
              << std::endl
              << "Длины сторон треугольника в порядке возрастания: "
              << std::endl;
    for(T_triangle_sides::const_iterator  side_it = triangle_sides.begin();
      side_it != triangle_sides.end(); ++side_it)
    {
        std::cout << *side_it
                  << std::endl;
    }
}
////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    srand(static_cast<unsigned>(time(0)));
    const T_str  line 
        = "===============================================================================\n";
    for(;;)
    {
        std::cout << std::endl
                  << std::endl
                  << std::endl 
                  << std::endl 
                  << std::endl 
                  << line
                  << line;
 
        print_triangle_data();
 
        std::cout << std::endl                  
                  << line;
        print_rand_triangle_data();
    }
}
 
Текущее время: 08:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru