Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
1

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

07.10.2010, 16:12. Показов 3986. Ответов 42
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Составьте программу для выполнения следующих заданий:
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 минуты
Да уж ну тут и программисты(((( Вообще не кто не помог(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2010, 16:12
Ответы с готовыми решениями:

Используя датчик случайных чисел на интервале получить целочисленный массив, состоящий из 320 элементов
С помощью датчика случайных чисел на интервале (-250,100) получить целочисленный массив,состоящий...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел
Удалить элементы кратные 7. Добавить после каждого нечетного элемента массива элемент со значением...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел
1) Сформировать одномерный массив целых чисел, используя датчик случайных чи-сел. 2) Распечатать...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
Сформировать одномерный массив целых чисел, используя датчик случайных чисел. Удалить 5...

42
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.10.2010, 15:18 21
Author24 — интернет-сервис помощи студентам
Примерно так:

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;
}
1
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 15:29  [ТС] 22
А как найти площадь и медиану без формул герона и синуса косинуса?В С++ есть какие нибуть трюки для этого?
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.10.2010, 15:30 23
На счёт формулы Герона: вы же на математика учитесь! А запрет на Герона вас уже в ступор ввёл. Тут площадь как минимум двумя способами можно вычислить, исходя из известных данных:
1. S = 0.5 * c * hc (c - основание, hc - высота, на него проведённая)
2. S = 0.5 * a * b * sin(a^b).
Вы можете, имея координаты всех вершин, опустить перпендикуляр из одной вершины на прямую, проходящую через две других и узнать его длину. Вот вам и высота. Так же легко найти угол между двумя прямыми. Учебник по линейке в руки и вперёд.
0
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 15:33  [ТС] 24
Это то я знаю) Я думал может в Си есть какие нибуть приемчики)(команды специальные)
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.10.2010, 15:34 25
Си - язык программирования. Если бы в нём были приёмчики для нужд математиков, а ещё для физиков, про экономистов, биологов и химиков не забудем... Как думаете, сколько бы весил компилятор и сколько бы он стоил?
0
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 15:38  [ТС] 26
Тоже верно) Но надежда умирает последней)
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.10.2010, 15:41 27
Да у вас же всё просто, вычислили расстояние от точки до прямой - вот вам высота. Вычислили длину этой прямой - вот вам основание. Перемножили их да домножили на 0,5 - вот вам площадь.
Медианы - проще некуда! Нашли длины всех сторон. mc = sqrt((2a^2 + 2b^2 - c^2) / 4) - вот вам медиана на сторону c. Переставили длины сторон местами, получили две оставшиеся медианы... 10 строк кода, ничего сложного.
1
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 15:53  [ТС] 28
А как вычислить длины наибольшей и наименьшей сторон треугольника.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.10.2010, 16:02 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;
}
0
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 16:13  [ТС] 30
А как вывести на экран наибольшую и наименьшую стороны. Изходя из выше написанного.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.10.2010, 16:44 31
C
1
printf("max = %lf\nmin = %lf", max, min);
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
10.10.2010, 20:17 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();
    }
}
0
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
10.10.2010, 23:58  [ТС] 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.
И не правильно отображает.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.10.2010, 23:59 34
В начале функции main напишите double min, max;
0
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
11.10.2010, 18:48  [ТС] 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;
}
Получается так? Но макс и мин равны нулю о пишет(
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
11.10.2010, 20:17 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;
}
1
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
13.10.2010, 16:28  [ТС] 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;
}
0
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
13.10.2010, 16:59 38
Берете a,b,c поочередно. Если получится, что одна из этих сторон меньше max и больше min - тогда эта средняя сторона.
Далее просто выводите значение min, значение средней стороны, значение max.

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

Не по теме:

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

0
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 61
13.10.2010, 17:56  [ТС] 39
Лучше тектстом напишите) Я вообще то учусь на Физика) И С++ из личного интереса) Просто искал контр. задания из универов и техникумов и напал на эту задачу(там лаба лежит, ща эту решу и след буду делать))
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
13.10.2010, 18:00 40
alemor,
У вас наблюдается сильная несистематизированность знаний, а эта штука хуже незнания. Незнание можно искоренить, а вот такую кашу из знаний - очень сложно. Вы бы по книжке учились. И решали оттуда задания. Не надо чураться сначала написать кучу Хэллоу Ворлдов разными способами, в конечном итоге это намного лучше закрепится, чем обучение всему и сразу на большой программе.
0
13.10.2010, 18:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2010, 18:00
Помогаю со студенческими работами здесь

Сформировать одномерный массив целых чисел, используя датчик случайных чисел
1)Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2)Распечатать...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел
1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2) Распечатать...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел
Сформировать одномерный массив целых чисел, используя датчик случайных чисел.Распечатать полученный...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел
Условие такое 1.Сформировать одномерный массив целых чисел, используя датчик случайных чисел....

Задать массив из 10 вещественных чисел используя датчик случайных чисел
Подсчитать количество четных значений. Найти минимальный и максимальный элементы массива, указать...

Используя датчик случайных чисел (Random) сформировать массив A
Paskal..... С помощью датчика случайных чисел (Random) формулируйте массив A, состоящий из 5 чисел...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru