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

Узнай цену своей работы

Формулировка задачи:

здравствуйте. есть одна из задач, безусловно, легкая, но я совершенно забыл за несколько лет даже основы алгебры и геометрии. суть такова - нужно написать универсальную программу, просчитывающую возможность вычислений и вычисляющую

периметр, площадь и гипотенузу треугольника

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

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

textual
Листинг программы
#include <iostream>
#include <fstream>      // библиотека для работы с файловыми потоками
#include <math.h>       // библиотека для работы с математическими функциями
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian"); // функция локализации вызывается только один раз
    cout << "автор: ***" << endl;
 
    double 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 << "данные применимы к решению этой задачи)";
    double deg2 = deg + (min * 1) / 60;     // функция переведения значений угла в целые градусы
    rad = (deg2*3.141592358) / 180;     // переводим градусы в радианы
    double rad2 = (90 * 3.141592358) / 180; // перевели в радианы прямоугольный угол
    double cor2 = 180 - (deg2 + 90);            // находим третий угол
    double 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;

Объяснение кода листинга программы

  1. Ввод известных данных:
    • Значение известного катета: kat1
    • Значение градусов и минут: deg min
    • Перевод значений угла в целые градусы: deg2 = deg + (min * 1) / 60
    • Перевод градусов в радианы: rad = (deg2*3.141592358) / 180
    • Перевод градусов в радианы для прямого угла: rad2 = (90 * 3.141592358) / 180
    • Нахождение третьего угла: cor2 = 180 - (deg2 + 90)
    • Нахождение гипотенузы треугольника: hyp = kat1 / (sin(rad))
    • Нахождение второго катета: kat2 = sqrt((hyphyp) - (kat1kat1))
    • Нахождение площади треугольника: S = (kat1*kat2) / 2
    • Нахождение периметра треугольника: P = kat1 + kat2 + hyp
  2. Запись данных в файл:
    • Открытие файла для записи: f(****.txt, ios::out)
    • Запись значений катетов в файл: f << значение катетов << kat1 << ; << kat2 << endl;
    • Запись значений углов в файл: f << значение градусов в радианах << rad << ; << rad2 << ; << rad3 << ; << endl;
    • Запись значения гипотенузы в файл: f << значение гипотенузы << hyp << endl;
    • Запись значения площади треугольника в файл: f << площадь треугольника << S << endl;
    • Запись значения периметра треугольника в файл: f << периметр треугольника << P << endl;
  3. Чтение данных из файла:
    • Открытие файла для чтения: g(****.txt, ios::in)
    • Чтение значений из файла:
      • Чтение первого значения: g >> kat1;
      • Чтение второго значения: g >> kat2;
      • Чтение третьего значения: g >> deg;
      • Чтение четвертого значения: g >> deg2;
      • Чтение пятого значения: g >> min;
      • Чтение шестого значения: g >> cor2;
      • Чтение седьмого значения: g >> rad;
      • Чтение восьмого значения: g >> rad2;
      • Чтение девятого значения: g >> rad3;
      • Чтение десятого значения: g >> hyp;
      • Чтение одиннадцатого значения: g >> S;
      • Чтение двенадцатого значения: g >> P;
  4. Вывод сообщения об успешном завершении записи:
    • Вывод сообщения: cout << \n*****************************\n;
    • Вывод сообщения: cout << запись завершена << endl;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы