Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Nik789
1 / 1 / 0
Регистрация: 21.10.2014
Сообщений: 15
#1

Могут ли три числа представлять стороны прямоугольного треугольника? - C (СИ)

21.10.2014, 15:51. Просмотров 838. Ответов 19
Метки нет (Все метки)

Задача № 2 Составить программу, считывает три ненулевых целых числа, определяет и печатает, могут ли они представлять стороны прямоугольного треугольника.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2014, 15:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Могут ли три числа представлять стороны прямоугольного треугольника? (C (СИ)):

Найти стороны равнобедренного прямоугольного треугольника
В равнобедренном прямоугольном треугольнике известна высота h, опущенная на...

Определить, могут ли три точки с координатами являться вершинами треугольника
Добрый день. Помогите с программой. Определить, могут ли три точки с...

Вычислить площадь треугольника, если известны три его стороны
Вычислить площадь треугольника, если известны три его стороны Прошу написать...

Определить, могут ли числа быть сторонами треугольника
Заданы три числа:a ,b, c. Определить, могут ли они быть сторо- нами...

Проверить, могут ли числа быть сторонами треугольника
Даны три положительных числа a, b, c. Проверить будут ли они сторонами...

Ввести стороны равностороннего треугольника. Найти площадь этого треугольника и его высоту
В универе на первом курсе в первый день сразу задали лабораторную помогите...

19
Andrej
И целого heap'а мало
94 / 55 / 17
Регистрация: 31.07.2014
Сообщений: 291
21.10.2014, 21:39 #2
Nik789, математика: неравенство треугольника. Если большая сторона меньше суммы других, то это треугольник.
0
_Ivana
3233 / 1861 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
22.10.2014, 04:52 #3
А если она еще и прямо меньше суммы двух других - то он прямо угольный.
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
22.10.2014, 11:37 #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main()
{
    int a, b, c;
 
    printf("Input numbers\n");
    scanf("%i", &a);
    scanf("%i", &b);
    scanf("%i", &c);
 
    a *= a;
    b *= b;
    c *= c;
    if ((a == b + c) || (b == a + c) || (c == b + a))
        printf("Yes it is triangle");
    else
        printf("No");
    return 0;
 
 
}
1
ildwine
Супер-модератор
2978 / 1853 / 1223
Регистрация: 04.03.2013
Сообщений: 4,557
Записей в блоге: 1
22.10.2014, 19:08 #5
kiff20072008, наверное надо еще учесть что a, b, c не могут быть нулевыми:
C
1
if (((a == b + c) || (b == a + c) || (c == b + a)) && (a != 0) && (b != 0) && (c != 0))
Добавлено через 14 секунд
Иначе это не треугольник
1
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
22.10.2014, 19:10 #6
ildwine, ну тогда они не могут быть еще и отрицательными
C
1
if (((a == b + c) || (b == a + c) || (c == b + a)) && (a > 0) && (b > 0) && (c > 0))
1
ildwine
Супер-модератор
2978 / 1853 / 1223
Регистрация: 04.03.2013
Сообщений: 4,557
Записей в блоге: 1
22.10.2014, 19:17 #7
kiff20072008, предлагаю проверять при вводе:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main()
{
    int a, b, c; 
    do {
        printf("Input numbers\n");
        scanf("%d", &a);
        scanf("%d", &b);
        scanf("%d", &c);
        if ((a <= 0) || (b <= 0) || (c <= 0)) printf("\nIncorrect input...");
    } while ((a <= 0) || (b <= 0) || (c <= 0));
    a *= a;
    b *= b;
    c *= c;
    if ((a == b + c) || (b == a + c) || (c == b + a))
        printf("Yes, it's right-angled triangle");
    else
        printf("No");
    return 0; 
}
2
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
22.10.2014, 19:19 #8
Цитата Сообщение от Andrej Посмотреть сообщение
Nik789, математика: неравенство треугольника. Если большая сторона меньше суммы других, то это треугольник.
Нет. Треугольник прямой. Поэтому по теореме Пифагора: квадрат гипотенузы равен сумме квадратов катетов. Гипотенуза - это всегда самая длинная сторона. Значит выбрать из трёх чисел самое большое и сравнить его квадрат с суммой квадратов двух других сторон.

Добавлено через 45 секунд
Цитата Сообщение от kiff20072008 Посмотреть сообщение
if ((a == b + c) || (b == a + c) || (c == b + a)) printf("Yes it is triangle");
Нет. Вырожденный теругольник прямоугольным быть не может.
0
ildwine
Супер-модератор
2978 / 1853 / 1223
Регистрация: 04.03.2013
Сообщений: 4,557
Записей в блоге: 1
22.10.2014, 19:33 #9
Лучший ответ Сообщение было отмечено Eva Rosalene как решение

Решение

taras atavin, вот поэтому я предлагаю отсечь вариант вырожденности при вводе... а проверять только теорему Пифагора.

Добавлено через 5 минут
А вообще, если строго следовать условию:
Цитата Сообщение от Nik789 Посмотреть сообщение
Составить программу, считывает три ненулевых целых числа, определяет и печатает, могут ли они представлять стороны прямоугольного треугольника
нужно действовать так, имхо:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
int main()
{
    int a, b, c; 
    do {
        printf("Input numbers\n");
        scanf("%d", &a);
        scanf("%d", &b);
        scanf("%d", &c);
        if ((a == 0) || (b == 0) || (c == 0)) printf("\nIncorrect input...");
    } while ((a == 0) || (b == 0) || (c == 0));
    if ((a < 0) || (b < 0) || (c < 0)) printf("No");
    else {
        a *= a;
        b *= b;
        c *= c;
        if ((a == b + c) || (b == a + c) || (c == b + a))
            printf("Yes, it's right-angled triangle");
        else printf("No");
    }   
    return 0; 
}
1
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
22.10.2014, 19:39 #10
ildwine, да я думаю это идеально=)
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
22.10.2014, 20:41 #11
Цитата Сообщение от ildwine Посмотреть сообщение
taras atavin, вот поэтому я предлагаю отсечь вариант вырожденности при вводе... а проверять только теорему Пифагора.
Читай:
Цитата Сообщение от ildwine Посмотреть сообщение
if ((a == b + c) || (b == a + c) || (c == b + a)) printf("Yes, it's right-angled triangle");
. Так вот, если сторона равно сумме двух других, то треугольник вырожден, у него один угол 180 и два по нолю.
0
korvin_
2097 / 1588 / 308
Регистрация: 28.04.2012
Сообщений: 5,722
22.10.2014, 20:59 #12
Цитата Сообщение от ildwine Посмотреть сообщение
нужно действовать так, имхо
И зачем столько повторяющихся проверок? Тем более незачем проверять ((a < 0) || (b < 0) || (c < 0)) после выхода из цикла. Твой первый вариант был более правильный.

Кликните здесь для просмотра всего текста
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
#include <stdio.h>
 
int
main()
{
    int a, b, c, incorrect;
    do {
        printf("Input three numbers: ");
        scanf("%d %d %d", &a, &b, &c);
        incorrect = a <= 0 || b <= 0 || c <= 0;
        if (incorrect)
            printf("Incorrect input\n");
    } while (incorrect);
 
    a *= a;
    b *= b;
    c *= c;
    if (a == b+c || b == a+c || c == b+a)
        printf("Yes, it's right-angled triangle\n");
    else
        printf("No\n");
 
    return 0;
}
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
22.10.2014, 21:00 #13
Блин. Опять сторона его большая равна сумме двух других сторон.
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
22.10.2014, 21:10 #14
ildwine, да я думаю это идеально=)taras atavin,
там в квадрат возводится
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
22.10.2014, 21:12 #15
Где?
Цитата Сообщение от ildwine Посмотреть сообщение
if ((a == b + c) || (b == a + c) || (c == b + a))
. Простая сумма и просто сторона.
0
kiff20072008
57 / 57 / 23
Регистрация: 28.09.2012
Сообщений: 358
22.10.2014, 21:13 #16
taras atavin,
вы до этого код смотрите?
или просто смотрите кусками?
C
1
2
3
4
a *= a;
        b *= b;
        c *= c;
        if ((a == b + c) || (b == a + c) || (c == b + a))
1
ildwine
Супер-модератор
2978 / 1853 / 1223
Регистрация: 04.03.2013
Сообщений: 4,557
Записей в блоге: 1
22.10.2014, 21:23 #17
taras atavin, если требуется проверить на то что 3 числа могут или нет быть сторонами прямоугольного треугольника, то необходимо и достаточно, чтобы числа были > 0 и выполнялось условие "теорема Пифагора"... Если оно выполняется, то значит 3 стороны 100% образуют треугольник и нет смысла проверять треугольник на существование...

Добавлено через 5 минут
korvin_, ну я думал вывести результат правильно, а в цикле я проверяю корректность ввода не более...
В цикле важно не ввести число равное нулю, что запрещено условием. Отрицательные числа рассматриваются как аргументы... ибо не сказано что вводить надо положительные...
0
korvin_
2097 / 1588 / 308
Регистрация: 28.04.2012
Сообщений: 5,722
22.10.2014, 21:28 #18
Цитата Сообщение от ildwine Посмотреть сообщение
ибо не сказано что вводить надо положительные...
Это не значит, что нельзя думать самому о корректности ввода, а исключать некоторые проверки просто потому, что для какого-то алгоритма это не важно -- не очень хорошая практика.
1
ildwine
Супер-модератор
2978 / 1853 / 1223
Регистрация: 04.03.2013
Сообщений: 4,557
Записей в блоге: 1
22.10.2014, 21:30 #19
korvin_, ну если бы ТС был поактивнее, то наверное всей этой дискуссии могло и не быть...

Добавлено через 36 секунд
Давно бы сказал после первого поста с ответом "Спасибо, круто" и все забили...
0
Eva Rosalene
Male-to-Female
4049 / 1587 / 301
Регистрация: 06.01.2013
Сообщений: 4,176
Завершенные тесты: 2
22.10.2014, 21:47 #20
Лучший ответ Сообщение было отмечено ildwine как решение

Решение

Проверять на вырожденность нет никакого смысла, вырожденный не будет прямым. А вот на отрицательность - надо.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main ( ) {
  int a, b, c;
  scanf("%i %i %i", &a, &b, &c);
  if ( a <= 0 || b <= 0 || c <= 0 ) {
    printf("false");
    return 0;
  }
  if ( a*a == b*b + c*c || b*b == c*c + a*a || c*c == a*a + b*b ) {
    printf("true");
    return 0;
  }
  printf("false");
  return 0;
}
2
22.10.2014, 21:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2014, 21:47
Привет! Вот еще темы с решениями:

Найти, Значение катетов прямоугольного треугольника
Составить программу, в которой вводится значение катетов прямоугольного...

Код прямоугольного треугольника заменить на равнобедренный
#include &lt;stdio.h&gt; #include &lt;iostream.h&gt; #include &lt;conio.h&gt; void main(void)...

Проверка прямоугольного треугольника через логику
Всем привет) очередная проблема) Задачка такая даны 3 стороны нужно сказать...

Вычислить периметр и площадь прямоугольного треугольника с катетами a и b
Прохожу простые задачки ,помогите улучшить решение ,хотя бы совет :) // ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru