Вычислить периметр, площадь и гипотенузу треугольника, если задан катет и противолежащий угол

spirit_infernal

здравствуйте, уважаемые форумчане. есть одна из задач, безусловно, легкая, но я совершенно забыл за несколько лет даже основы алгебры и геометрии. суть такова - нужно написать универсальную программу, просчитывающую возможность вычислений и вычисляющую периметр, площадь и гипотенузу треугольника, при условии, что известны только катет и противолежащий к нему угол. Катет - 2,8 м, угол 68°20'. угол нужно переводить в радианную меру, проверка на допустимость вычислений может быть реализована как несколькими вложенными операторами ветвления, так и одним оператором ветвления с использованием составного логического высказывания. погуглив я пришел к выводу, что гипотенузу можно найти по формуле c=a/sinA. больше пока идей нет. заранее спасибо, если кто сможет помочь
2 ответа

spirit_infernal

И какие же дальнейшие глубокие теоретические изыскания вы собираетесь проводить, чтобы решить эту задачу?


spirit_infernal

#include <iostream>
#include <fstream>      // библиотека для работы с файловыми потоками
#include <math.h>       // библиотека для работы с математическими функциями
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian"); // функция локализации вызывается только один раз
    cout << "автор: ***" << endl;
 
    ****** kat1, kat2, hyp, S, P, rad;
    int deg, min;
 
    cout << "введите значение известного катета:"; cin >> kat1;         //ввод значения катета треугольника
    cout << "Введите значение градусов и минут: "; cin >> deg >> min;            //ввод значения градусов угла, при ведении данных с точкой - минуты запрашиваются снова
    if (deg = 0 || deg = 90) cout << "данные введены некорректно/ неприменимы для решения этой задачи. введите данные повторно: \n "; && cout << "Введите значение градусов и минут: "; cin >> deg >> min; else cout << "данные применимы к решению этой задачи)";
    ****** deg2 = deg + (min * 1) / 60;     // функция переведения значений угла в целые градусы
    rad = (deg2*3.141592358) / 180;     // переводим градусы в радианы
    ****** rad2 = (90 * 3.141592358) / 180; // перевели в радианы прямоугольный угол
    ****** cor2 = 180 - (deg2 + 90);            // находим третий угол
    ****** rad3 = (cor2*3.141592358) / 180; // перевели в радианы третий угол
    hyp = kat1 / (sin(rad));            // находим гипотенузу
    kat2 = sqrt((hyp*hyp) - (kat1*kat1));   // находим второй катет
    S = (kat1*kat2) / 2;                    // находим площадь треугольника
    P = kat1 + kat2 + hyp;                  // находим периметр треугольника
 
    cout << "в радианной мере известный угол будет равен  " << rad << endl;
    cout << "в радианной мере прямой угол будет равен  " << rad2 << endl;
    cout << "и неизвестный угол будет равен  " << rad3 << endl;
    cout << "гипотенуза треугольника равна  " << hyp << endl;
    cout << "неизвестный катет треугольника  " << kat2 << endl;
    cout << "площадь треугольника равна  " << S << endl;
    cout << "и периметр треугольника равен  " << P << endl;
 
 
    int n;
 
    fstream f("****.txt", ios::out); // двунаправленный файловый поток f,
    // файл *filename*.txt открыт на запись, если его не было, он будет создан
    // в текущем каталоге – в папке проекта, содержащей исходный код
    // Можно указать полный путь к файлу, например: "C:/My_file.txt"
    // файл пишется на диск D: ввиду особенностей поведения Windows 8.1 и прав доступа к диску C:
    cout << "\n*****************************\n";
    cout << "записать в файл? y/n" << endl;
    cin >> n;
    f << "значение катетов " << kat1 << " ; " << kat2 << endl;      // фоном (без отображения для конечного пользователя) пишем в файл значение катетов для проверки вычислений
    f << "значение углов " << deg << "," << min << " ; " << cor2 << " ; " << "90" << endl;      // фоном (без отображения для конечного пользователя) пишем в файл значение углов для проверки вычислений
    f << "значение градусов в радианах " << rad << " ; " << rad2 << " ; " << rad3 << " ; " << endl;     // фоном (без отображения для конечного пользователя) пишем в файл значение уголв в радианной мере для проверки вычислений
    f << "значение гипотенузы " << hyp << endl;     // фоном (без отображения для конечного пользователя) пишем в файл значение гипотенузы
    f << "площадь треугольника " << S << endl;      // фоном (без отображения для конечного пользователя) пишем в файл значение площади треугольника
    f << "периметр треугольника " << P << endl;     // фоном (без отображения для конечного пользователя) пишем в файл значение периметра треугольника
    f.close();          //закрыли файловый поток f и файл My_file.txt
 
    fstream g("****.txt", ios::in);//двунаправленный файловый поток
    // файл с именем *filename*.txt открыт на чтение; он должен находиться
    // по указанному пути, в случае отсутствия в переменную n ничего 
    // не будет записано, там останется или старое значение, или "мусор"
 
    g >> kat1;          // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> kat2;          // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> deg;           // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> deg2;          // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> deg;           // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> min;           // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> cor2;          // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> rad;           // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> rad2;          // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> rad3;          // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> hyp;           // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> S;         // прочли в поток первый компонент файла и присвоили переменной a новое значение
    g >> P;         // прочли в поток первый компонент файла и присвоили переменной a новое значение
    cout << "\n*****************************\n";
    cout << "запись завершена" << endl;
    g.close();      //закрыли файловый поток g и файл *filename*.txt
    system("pause");
    return 0;
накодилось. осталось только одно решить - куда и как тут запихать операторы if/else. использованные в программе выдают ошибку. а для корректного исполнения требуется исполнение внутрипрограммных тестов. подскажите, пожалуйста, как это реализовать?