Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Задачи по информатике


Автор: lomkaaa 16.6.2017, 02:36
Даны отрезки a,b,c и d. Для каждой тройки этих отрезков, из которых можно построить треугольник, напечатать площадь данного треугольника. Определить процедуру Plo(x,y,z), печатающую площадь треугольника со сторонами x,y и z, если такой треугольник существует. (С++)

Автор: SpeedFighter 4.7.2017, 16:53
Код

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

float CalcArea(float x, float y, float z); // Функция для расчета площади
bool ExistRectangle(float x, float y, float z); // Определение сущепствования треугольника

int main(int argc, char *argv[])
{
    setlocale(0,""); // Включаем кириллицу
    float a, b, c, d; // Заданные параметры (отрезки)
    int i = 0; // Счетчик
    cout << "Введите параметр a: "; 
    cin >> a; 
    cout << endl << "Введите параметр b: ";
    cin >> b;
    cout << endl << "Введите параметр c: ";
    cin >> c;
    cout << endl << "Введите параметр d: ";
    cin >> d; 
    
    /*Из четырех отрезков можно получить 4 комбинации для треугольника, 
    исходя из базовых знаний комбинаторики (число сочетаний из 4 по 3). 
    Эти сочетания:
    a, b, c
    a, b, d
    a, d, c
    b, d, c.
    Перестановка в данном случае не играет роли (на нахождение пложащи никак не влияет).
    */
    
    // Алгоритм поиска возможных вариантов:
    
    cout << endl << "Возможные вариаенты треугольников:" << endl << endl;    
    
    if(ExistRectangle(a, b, c))
        cout << "Вариант №" << ++i << ": a(" << a << "), b(" << b << "), c(" << c << ");" << endl << "Площадь: " << CalcArea(a, b, c) << endl << endl; 
    if(ExistRectangle(a, b, d))
        cout << "Вариант №" << ++i << ": a(" << a << "), b(" << b << "), d(" << d << ");" << endl << "Площадь: " << CalcArea(a, b, d) << endl << endl;          
    if(ExistRectangle(a, d, c))
        cout << "Вариант №" << ++i << ": a(" << a << "), d(" << d << "), c(" << c << ");" << endl << "Площадь: " << CalcArea(a, d, c) << endl << endl;         
    if(ExistRectangle(b, d, c))
        cout << "Вариант №" << ++i << ": b(" << b << "), d(" << d << "), c(" << c << ");" << endl << "Площадь: " << CalcArea(b, d, c) << endl << endl;  
    if(i == 0)
        cout << "Из данных параметров невозможно составить треугольник!" << endl << endl; 

    system("pause");
    return 0;
}

bool ExistRectangle(float x, float y, float z)
{
    // Условие существование треугольника - сумма любых двух сторо больше третьей.
    if((x + y > z) && (z + x > y) && (y + z > x))
        return true;
    else
        return false;
}

float CalcArea(float x, float y, float z) // Расчет площади - по формуле Герона
{
    float p = (x + y + z)/2;
    float S = sqrt(p*(p-x)*(p-y)*(p-z));
    return S;
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)