LINUX.ORG.RU

История изменений

Исправление soomrack, (текущая версия) :

Код должен быть максимально простым, так проще недопускать ошибок.

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

Я бы написал так (проверку на неположительные значения я не сделал, т.к. в условии сказано, что значения положительны).

#include <iostream>


static void undefined() {
    std::cout << "UNDEFINED" << std::endl;
}


static void yes() {
    std::cout << "YES" << std::endl;
}


static void no() {
    std::cout << "NO" << std::endl;
}


void right_triangle_test() {
    int32_t length[3];
    for(int edge = 0; edge < 3; edge++) {
        std::cin >> length[edge];
    }

    if(length[0] >= length[1] + length[2]) return undefined();
    if(length[1] >= length[0] + length[2]) return undefined();
    if(length[2] >= length[0] + length[1]) return undefined();
    
    int32_t square[3];
    for(int edge = 0; edge < 3; edge++) {
        square[edge] = length[edge] * length[edge];
    }    

    if(square[0] == square[1] + square[2]) return yes();
    if(square[1] == square[0] + square[2]) return yes();
    if(square[2] == square[0] + square[1]) return yes();

    return no();
}


int main() {
    right_triangle_test();
    return 0;
}

Исправление soomrack, :

Код должен быть максимально простым, так проще недопускать ошибок.

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

Я бы написал так (проверку на неположительные значения я не сделал, т.к. в условии сказано, что значения положительны).

#include <iostream>


static void undefined() {
    std::cout << "UNDEFINED" << std::endl;
}


static void yes() {
    std::cout << "YES" << std::endl;
}


static void no() {
    std::cout << "NO" << std::endl;
}


void right_triangle_test() {
    int32_t length[3];
    for(int edge = 0; edge < 3; edge++) {
        std::cin >> length[edge];
    }

    if(length[0] > length[1] + length[2]) return undefined();
    if(length[1] > length[0] + length[2]) return undefined();
    if(length[2] > length[0] + length[1]) return undefined();
    
    int32_t square[3];
    for(int edge = 0; edge < 3; edge++) {
        square[edge] = length[edge] * length[edge];
    }    

    if(square[0] == square[1] + square[2]) return yes();
    if(square[1] == square[0] + square[2]) return yes();
    if(square[2] == square[0] + square[1]) return yes();

    return no();
}


int main() {
    right_triangle_test();
    return 0;
}

Исходная версия soomrack, :

Код должен быть максимально простым, так проще недопускать ошибок.

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

Я бы написал так (проверку на неположительные значения я не сделал, т.к. в условии сказано, что значения положительны).

#include <iostream>


static void undefined() {
    std::cout << "UNDEFINED" << std::endl;
}


static void yes() {
    std::cout << "YES" << std::endl;
}


static void no() {
    std::cout << "NO" << std::endl;
}


void right_triangle_test() {
    int32_t length[3];
    for(int edge = 0; edge < 3; edge++) {
        std::cin >> length[edge];
    }

    if(length[0] > length[1] + length[2]) return undefined();
    if(length[1] > length[0] + length[2]) return undefined();
    if(length[2] > length[0] + length[1]) return undefined();
    
    int32_t square[3];
    for(int edge = 0; edge < 3; edge++) {
        square[edge] *= square[edge];
    }    

    if(square[0] == square[1] + square[2]) return yes();
    if(square[1] == square[0] + square[2]) return yes();
    if(square[2] == square[0] + square[1]) return yes();

    return no();
}


int main() {
    right_triangle_test();
    return 0;
}