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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
alemor
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
07.10.2010, 16:12     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #1
Составьте программу для выполнения следующих заданий:
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. Напечатать длины сторон в порядке возрастания.

Начиная с 5 пункта не чего не получается. И не понимаю как сделать меню консольного вида(
Прошу не злится только начал изучать С++ самостоятельно и вот напал на такую задачу)

Добавлено через 21 час 29 минут
Что не кто не может помочь?

Добавлено через 6 часов 19 минут
Начал работать непосредственно в С и вот:

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
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "math.h"
int a,b,c;
int ha,hb,hc;
int ma,mb,mc;
int la,lb,lc;
int x1,x2,x3;
int z1,z2,z3;
double p, s;
int _tmain(int argc, _TCHAR* argv[])
{
    printf("Введите длину отрезка a\n");
    scanf("%d", &a);
    printf("Вы ввели число %d, спасибо!\n", a);
    printf("Введите длину отрезка b\n");
    scanf("%d", &b);
    printf("Вы ввели число %d, спасибо!\n", b);
    printf("Введите длину отрезка c\n");
    scanf("%d", &c);
    printf("Вы ввели число %d, спасибо!\n", c);
 {
    if (a+b<c) printf("Треугольник получился\n");
    else if (a+b>c) printf("Не треугольник попробуйте заново\n");
        p=a+b+c;
        printf("Периметр равен: %d\n", p);
    return 0;
    
 }
}
Во первых не складывает не целые числа(
Во вторых не ищет периметр(

Добавлено через 17 часов 33 минуты
Да уж ну тут и программисты(((( Вообще не кто не помог(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2010, 16:12     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5]
Посмотрите здесь:

C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел
C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
C++ Даны координаты вершин треугольника и координаты некоторой точки внутри него
Сформировать одномерный массив целых чисел, используя датчик случайных чисел, и распечатать массив. Удалить из массива все элементы, совпадающие с его C++
Сформировать одномерный массив целых чисел, используя датчик случайных чисел C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.10.2010, 15:18     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #21
Примерно так:

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
#include "StdAfx.h"
#include "stdio.h"
#include "ctype.h"
#include "math.h"
#include "cstdlib"
 
 
 
 
int main()
{
    while (1)
    {
          printf("Лаболаторная работа номер 1\n");
          begin:printf("Выберите действие:\n   1 - Часть 1;\n   2 - Часть 2;\n   X - Выход\n");
          char key;
          key=getc(stdin);
          fflush(stdin);
          key=toupper(key);
          switch (key)
          {
             case '1':
             {
                float a,b,c;
                printf("Введите A: ");
                a=getc(stdin);
                fflush(stdin);
                printf("Введите B: ");
                b=getc(stdin);
                fflush(stdin);
                printf("Введите C: ");
                c=getc(stdin);
                fflush(stdin);
                        if (a+b>=c || a+c>=b || b+c>=a) printf("Треугольник получился\n");
                else if (a+b<=c || a+c<=b || b+c<=a) printf("Не треугольник попробуйдете заново\n");
                        float p=a+b+c;
                printf("Периметр: %3.3f\n",p);
                p/=2;
                    float s=sqrt(p*(p-a)*(p-b)*(p-c));
                    printf("Площадь: %3.3f\n",s);
                        float h=2*s/a;
                        float asin=h/b;
                        float acos=sqrt(1-asin*asin);
                        float a2sin=sqrt(0.5*(1+acos));
                        float m=h/a2sin;
                        float bs=2*s/a2sin/(a+b);
                        printf("Высота, медиана, биссектрисса A: %3.3f, %3.3f, %3.3f\n",h,m,bs);
                        h=2*s/b;
                        asin=h/c;
                        acos=sqrt(1-asin*asin);
                        a2sin=sqrt(0.5*(1+acos));
                        m=h/a2sin;
                        bs=2*s/a2sin/(c+b);
                        printf("Высота, медиана, биссектрисса B: %3.3f, %3.3f, %3.3f\n",h,m,bs);
                        h=2*s/a;
                        asin=h/c;
                        acos=sqrt(1-asin*asin);
                        a2sin=sqrt(0.5*(1+acos));
                        m=h/a2sin;
                    bs=2*s/a2sin/(a+c);
                    printf("Высота, медиана, биссектрисса C: %3.3f, %3.3f, %3.3f\n",h,m,bs);
                break;
 
             }
             case '2':
                         {
                                 float x1=10*rand()/RAND_MAX-5;
                                 float x2=10*rand()/RAND_MAX-5;
                                 float x3=10*rand()/RAND_MAX-5;
                                 float y1=10*rand()/RAND_MAX-5;
                                 float y2=10*rand()/RAND_MAX-5;
                                 float y3=10*rand()/RAND_MAX-5;
                                 float a=sqrt(pow(x2-x1,2)+pow(y2-y1,2));
                                 float b=sqrt(pow(x3-x1,2)+pow(y3-y1,2));
                                 float c=sqrt(pow(x3-x2,2)+pow(y3-y2,2));
                                 float p=a+b+c;
                                 printf("Периметр: %3.3f\n",p);
 
                         break;
                         }
             case 'X':goto end;break;
                 default:goto begin;break;
          }
    }
  getc(stdin);
  end:return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alemor
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 15:29  [ТС]     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #22
А как найти площадь и медиану без формул герона и синуса косинуса?В С++ есть какие нибуть трюки для этого?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.10.2010, 15:30     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #23
На счёт формулы Герона: вы же на математика учитесь! А запрет на Герона вас уже в ступор ввёл. Тут площадь как минимум двумя способами можно вычислить, исходя из известных данных:
1. S = 0.5 * c * hc (c - основание, hc - высота, на него проведённая)
2. S = 0.5 * a * b * sin(a^b).
Вы можете, имея координаты всех вершин, опустить перпендикуляр из одной вершины на прямую, проходящую через две других и узнать его длину. Вот вам и высота. Так же легко найти угол между двумя прямыми. Учебник по линейке в руки и вперёд.
alemor
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 15:33  [ТС]     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #24
Это то я знаю) Я думал может в Си есть какие нибуть приемчики)(команды специальные)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.10.2010, 15:34     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #25
Си - язык программирования. Если бы в нём были приёмчики для нужд математиков, а ещё для физиков, про экономистов, биологов и химиков не забудем... Как думаете, сколько бы весил компилятор и сколько бы он стоил?
alemor
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 15:38  [ТС]     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #26
Тоже верно) Но надежда умирает последней)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.10.2010, 15:41     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #27
Да у вас же всё просто, вычислили расстояние от точки до прямой - вот вам высота. Вычислили длину этой прямой - вот вам основание. Перемножили их да домножили на 0,5 - вот вам площадь.
Медианы - проще некуда! Нашли длины всех сторон. mc = sqrt((2a^2 + 2b^2 - c^2) / 4) - вот вам медиана на сторону c. Переставили длины сторон местами, получили две оставшиеся медианы... 10 строк кода, ничего сложного.
alemor
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 15:53  [ТС]     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #28
А как вычислить длины наибольшей и наименьшей сторон треугольника.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.10.2010, 16:02     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #29
Вычисляете всё длины (они вам дальше, для вычисления площади и медианы, всё равно понадобятся) и среди них ищете наибольшую и наименьшую.
Примерно так (решение в лоб, скорее всего можно упростить):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if (a >= b && a >= c)
    max = a;
else
{
    if (b >= a && b >= c)
        max = b;
    else
        max = c;
}
 
if (a <= b && a <= c)
    min = a;
else
{
    if (b <= a && b <= c)
        min = b;
    else
        min = c;
}
alemor
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 16:13  [ТС]     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #30
А как вывести на экран наибольшую и наименьшую стороны. Изходя из выше написанного.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.10.2010, 16:44     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #31
C
1
printf("max = %lf\nmin = %lf", max, min);
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
10.10.2010, 20:17     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #32
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();
    }
}
alemor
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 23:58  [ТС]     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #33
C++
1
printf("max = %lf\nmin = %lf", max, min);
Пишет что max и min не определены( Я уже тоже это пытался писать.
А когда вписываю float min,max; то при выдает
The variable 'min' is being used without being initialized.
The variable 'max' is being used without being initialized.
И не правильно отображает.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.10.2010, 23:59     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #34
В начале функции main напишите double min, max;
alemor
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
11.10.2010, 18:48  [ТС]     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #35
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
#include "StdAfx.h"
#include "stdio.h"
#include "ctype.h"
#include "math.h"
#include "cstdlib"
 
 
 
double min, max;
int main()
{
 while (1)
 {
  printf("Лаболаторная работа номер 1\n");
  begin:printf("Выберите действие:\n   1 - Часть 1;\n   2 - Часть 2;\n   X - Выход\n");
  char key;
  key=getc(stdin);
  fflush(stdin);
  key=toupper(key);
  switch (key)
  {
     case '1':
     {
        float a,b,c;
        printf("Введите длину отрезка a\n");
        scanf("%f", &a);
        printf("Введите длину отрезка b\n");
        scanf("%f", &b);
        printf("Введите длину отрезка c\n");
        scanf("%f", &c);
        if (a+b>=c || a+c>=b || b+c>=a) printf("Треугольник получился\n");
        else if (a+b<=c || a+c<=b || b+c<=a) printf("Не треугольник попробуйдете заново\n");
        float p=a+b+c;
        printf("Периметр: %3.3f\n",p);
        p/=2;
        float s=sqrt(p*(p-a)*(p-b)*(p-c));
        printf("Площадь: %3.3f\n",s);
        float h=2*s/a; 
        float asin=h/b;
        float acos=sqrt(1-asin*asin);
        float a2sin=sqrt(0.5*(1+acos));
        float m=h/a2sin;
        float bs=2*s/a2sin/(a+b);
        printf("Высота, медиана, биссектрисса A: %3.3f, %3.3f, %3.3f\n",h,m,bs);
        h=2*s/b;
        asin=h/c;
        acos=sqrt(1-asin*asin);
        a2sin=sqrt(0.5*(1+acos));
        m=h/a2sin;
        bs=2*s/a2sin/(c+b);
        printf("Высота, медиана, биссектрисса B: %3.3f, %3.3f, %3.3f\n",h,m,bs);
        h=2*s/a;
        asin=h/c;
        acos=sqrt(1-asin*asin);
        a2sin=sqrt(0.5*(1+acos));
        m=h/a2sin;
        bs=2*s/a2sin/(a+c);
        printf("Высота, медиана, биссектрисса C: %3.3f, %3.3f, %3.3f\n\n\n",h,m,bs);
        break; 
     }
     case '2':
         {  
             float x1=10*rand()/RAND_MAX-5;
             float x2=10*rand()/RAND_MAX-5;
             float x3=10*rand()/RAND_MAX-5;
             float y1=10*rand()/RAND_MAX-5;
             float y2=10*rand()/RAND_MAX-5;
             float y3=10*rand()/RAND_MAX-5;
             float a=sqrt(pow(x2-x1,2)+pow(y2-y1,2));
             float b=sqrt(pow(x3-x1,2)+pow(y3-y1,2));
             float c=sqrt(pow(x3-x2,2)+pow(y3-y2,2));
             float p=a+b+c;
             printf("Периметр: %3.3f\n",p);
             p/=2;
             float h=2*(sqrt(p*(p-a)*(p-b)*(p-c)))/2;
             float s=0.5*c*h;
             printf("Площадь: %3.3f\n",s);
             float mc=sqrt((2*(a*a) + 2*(b*b) - c*c) / 4);
             float ma=sqrt((2*(c*c) + 2*(b*b) - c*a) / 4);
             float mb=sqrt((2*(a*a) + 2*(c*c) - b*b) / 4);
             printf("Медиана а: %3.3f\n",ma);
             printf("Медиана b: %3.3f\n",mb);
             printf("Медиана c: %3.3f\n\n\n",mc);
                         if (a >= b && a >= c)
             float max = a;
             else
                {
                     if (b >= a && b >= c)
                     float max = b;
                     else
                     float max = c;
                }
 
                    if (a <= b && a <= c)
                    float min = a;
                {
                    if (b <= a && b <= c)
                    float min = b;
                    else
                    float min = c;
                }
                    
 
              printf("max = %lf\nmin = %lf", max, min);
              break;
         }
     case 'X':goto end;break;
     default:goto begin;break;
   }
  }
  getc(stdin);
  end:return 0;
}
Получается так? Но макс и мин равны нулю о пишет(
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
11.10.2010, 20:17     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #36
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
#include "StdAfx.h"
#include "stdio.h"
#include "ctype.h"
#include "math.h"
#include "cstdlib"
 
 
 
int main()
{
    float min, max;
 while (1)
 {
  printf("Лаболаторная работа номер 1\n");
  begin:printf("Выберите действие:\n   1 - Часть 1;\n   2 - Часть 2;\n   X - Выход\n");
  char key;
  key=getc(stdin);
  fflush(stdin);
  key=toupper(key);
  switch (key)
  {
     case '1':
     {
        float a,b,c;
        printf("Введите длину отрезка a\n");
                scanf("%f", &a);
                printf("Введите длину отрезка b\n");
                scanf("%f", &b);
                printf("Введите длину отрезка c\n");
                scanf("%f", &c);
                if (a+b>=c || a+c>=b || b+c>=a) printf("Треугольник получился\n");
        else if (a+b<=c || a+c<=b || b+c<=a) printf("Не треугольник попробуйдете заново\n");
                float p=a+b+c;
        printf("Периметр: %3.3f\n",p);
        p/=2;
            float s=sqrt(p*(p-a)*(p-b)*(p-c));
            printf("Площадь: %3.3f\n",s);
                float h=2*s/a;
                float asin=h/b;
                float acos=sqrt(1-asin*asin);
                float a2sin=sqrt(0.5*(1+acos));
                float m=h/a2sin;
                float bs=2*s/a2sin/(a+b);
                printf("Высота, медиана, биссектрисса A: %3.3f, %3.3f, %3.3f\n",h,m,bs);
                h=2*s/b;
                asin=h/c;
                acos=sqrt(1-asin*asin);
                a2sin=sqrt(0.5*(1+acos));
                m=h/a2sin;
                bs=2*s/a2sin/(c+b);
                printf("Высота, медиана, биссектрисса B: %3.3f, %3.3f, %3.3f\n",h,m,bs);
                h=2*s/a;
                asin=h/c;
                acos=sqrt(1-asin*asin);
                a2sin=sqrt(0.5*(1+acos));
                m=h/a2sin;
            bs=2*s/a2sin/(a+c);
            printf("Высота, медиана, биссектрисса C: %3.3f, %3.3f, %3.3f\n\n\n",h,m,bs);
        break;
     }
     case '2':
                 {
                         float x1=10*rand()/RAND_MAX-5;
                         float x2=10*rand()/RAND_MAX-5;
                         float x3=10*rand()/RAND_MAX-5;
                         float y1=10*rand()/RAND_MAX-5;
                         float y2=10*rand()/RAND_MAX-5;
                         float y3=10*rand()/RAND_MAX-5;
                         float a=sqrt(pow(x2-x1,2)+pow(y2-y1,2));
                         float b=sqrt(pow(x3-x1,2)+pow(y3-y1,2));
                         float c=sqrt(pow(x3-x2,2)+pow(y3-y2,2));
                         float p=a+b+c;
                         printf("Периметр: %3.3f\n",p);
                         p/=2;
                         float h=2*(sqrt(p*(p-a)*(p-b)*(p-c)))/2;
                         float s=0.5*c*h;
                         printf("Площадь: %3.3f\n",s);
                         float mc=sqrt((2*(a*a) + 2*(b*b) - c*c) / 4);
                         float ma=sqrt((2*(c*c) + 2*(b*b) - c*a) / 4);
                         float mb=sqrt((2*(a*a) + 2*(c*c) - b*b) / 4);
                         printf("Медиана а: %3.3f\n",ma);
                         printf("Медиана b: %3.3f\n",mb);
                         printf("Медиана c: %3.3f\n\n\n",mc);
 
                         if (a >= b && a >= c)
                            max = a;
                         else
                                {
                                         if (b >= a && b >= c)
                                         max = b;
                                         else
                                     max = c;
                                }
 
                                        if (a <= b && a <= c)
                                        min = a;
                                {
                                    if (b <= a && b <= c)
                                    min = b;
                                    else
                                    min = c;
                                }
 
 
                          printf("max = %lf\nmin = %lf", max, min);
                          break;
                 }
     case 'X':goto end;break;
         default:goto begin;break;
   }
  }
  getc(stdin);
  end:return 0;
}
alemor
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
13.10.2010, 16:28  [ТС]     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #37
А как еще вывести на экран длины сторон в порядке возрастания во второй части?

Вот немного оптимизированный текст)
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
#include "StdAfx.h"
#include "stdio.h"
#include "ctype.h"
#include "math.h"
#include "cstdlib"
 
 
 
int main()
{
    float min, max;
 while (1)
 {
  printf("Лаболаторная работа номер 1\n");
  begin:printf("Выберите действие:\n   1 - Часть 1;\n   2 - Часть 2;\n   X - Выход\n");
  char key;
  key=getc(stdin);
  fflush(stdin);
  key=toupper(key);
  switch (key)
  {
     case '1':
     {
        float a,b,c;
        printf("Введите длину отрезка a\n");
                scanf("%f", &a);
                printf("Введите длину отрезка b\n");
                scanf("%f", &b);
                printf("Введите длину отрезка c\n");
                scanf("%f", &c);
                if (a+b>=c || a+c>=b || b+c>=a) printf("Треугольник получился\n");
        else if (a+b<=c || a+c<=b || b+c<=a) printf("Не треугольник попробуйдете заново\n");
                float p=a+b+c;
        printf("Периметр: %3.3f\n",p);
        p/=2;
            float s=sqrt(p*(p-a)*(p-b)*(p-c));
            printf("Площадь: %3.3f\n",s);
                float h=2*s/a;
                float asin=h/b;
                float acos=sqrt(1-asin*asin);
                float a2sin=sqrt(0.5*(1+acos));
                float m=h/a2sin;
                float bs=2*s/a2sin/(a+b);
                printf("Высота, медиана, биссектрисса A: %3.3f, %3.3f, %3.3f\n",h,m,bs);
                h=2*s/b;
                asin=h/c;
                acos=sqrt(1-asin*asin);
                a2sin=sqrt(0.5*(1+acos));
                m=h/a2sin;
                bs=2*s/a2sin/(c+b);
                printf("Высота, медиана, биссектрисса B: %3.3f, %3.3f, %3.3f\n",h,m,bs);
                h=2*s/a;
                asin=h/c;
                acos=sqrt(1-asin*asin);
                a2sin=sqrt(0.5*(1+acos));
                m=h/a2sin;
            bs=2*s/a2sin/(a+c);
            printf("Высота, медиана, биссектрисса C: %3.3f, %3.3f, %3.3f\n\n\n",h,m,bs);
        break;
     }
     case '2':
                 {
                         float x1=10*rand()/RAND_MAX-5;
                         float x2=10*rand()/RAND_MAX-5;
                         float x3=10*rand()/RAND_MAX-5;
                         float y1=10*rand()/RAND_MAX-5;
                         float y2=10*rand()/RAND_MAX-5;
                         float y3=10*rand()/RAND_MAX-5;
                         float a=sqrt(pow(x2-x1,2)+pow(y2-y1,2));
                         float b=sqrt(pow(x3-x1,2)+pow(y3-y1,2));
                         float c=sqrt(pow(x3-x2,2)+pow(y3-y2,2));
                         float p=a+b+c;
                         printf("Периметр: %3.3f\n",p);
                         p/=2;
                         float h=2*(sqrt(p*(p-a)*(p-b)*(p-c)))/2;
                         float s=0.5*c*h;
                         printf("Площадь: %3.3f\n",s);
                         float mc=sqrt((2*(a*a) + 2*(b*b) - c*c) / 4);
                         float ma=sqrt((2*(c*c) + 2*(b*b) - c*a) / 4);
                         float mb=sqrt((2*(a*a) + 2*(c*c) - b*b) / 4);
                         printf("Медиана а: %3.3f\n",ma);
                         printf("Медиана b: %3.3f\n",mb);
                         printf("Медиана c: %3.3f\n\n\n",mc); 
                         max=(a>b)?a:b;
                         max=(max>c)?max:c;
                         min=(a<b)?a:b;
                         min=(min<c)?min:c; 
                         printf("max = %lf\nmin = %lf", max, min);
                         break;
                 }
     case 'X':goto end;break;
         default:goto begin;break;
   }
  }
  getc(stdin);
  end:return 0;
}
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
13.10.2010, 16:59     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #38
Берете a,b,c поочередно. Если получится, что одна из этих сторон меньше max и больше min - тогда эта средняя сторона.
Далее просто выводите значение min, значение средней стороны, значение max.

Добавлено через 35 секунд

Не по теме:

По какой специальности учитесь? Прикладная математика?

alemor
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
13.10.2010, 17:56  [ТС]     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #39
Лучше тектстом напишите) Я вообще то учусь на Физика) И С++ из личного интереса) Просто искал контр. задания из универов и техникумов и напал на эту задачу(там лаба лежит, ща эту решу и след буду делать))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2010, 18:00     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5]
Еще ссылки по теме:

Используя датчик случайных чисел, запол*нить массив из двадцати -элементов неповторяющи*мися числами C++
C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел
C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.10.2010, 18:00     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5] #40
alemor,
У вас наблюдается сильная несистематизированность знаний, а эта штука хуже незнания. Незнание можно искоренить, а вот такую кашу из знаний - очень сложно. Вы бы по книжке учились. И решали оттуда задания. Не надо чураться сначала написать кучу Хэллоу Ворлдов разными способами, в конечном итоге это намного лучше закрепится, чем обучение всему и сразу на большой программе.
Yandex
Объявления
13.10.2010, 18:00     Используя датчик случайных чисел, получить координаты вершин треугольника x1, y1, x2, y2, x3, y3, принадлежащие отрезку [-5,5]
Ответ Создать тему
Опции темы

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