Вычислить периметр, площадь и гипотенузу треугольника, если задан катет и противолежащий угол - 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;
Объяснение кода листинга программы
- Ввод известных данных:
- Значение известного катета: 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
- Запись данных в файл:
- Открытие файла для записи: f(
****.txt
, ios::out) - Запись значений катетов в файл: f <<
значение катетов
<< kat1 <<;
<< kat2 << endl; - Запись значений углов в файл: f <<
значение градусов в радианах
<< rad <<;
<< rad2 <<;
<< rad3 <<;
<< endl; - Запись значения гипотенузы в файл: f <<
значение гипотенузы
<< hyp << endl; - Запись значения площади треугольника в файл: f <<
площадь треугольника
<< S << endl; - Запись значения периметра треугольника в файл: f <<
периметр треугольника
<< P << endl;
- Открытие файла для записи: f(
- Чтение данных из файла:
- Открытие файла для чтения: 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;
- Открытие файла для чтения: g(
- Вывод сообщения об успешном завершении записи:
- Вывод сообщения: cout <<
\n*****************************\n
; - Вывод сообщения: cout <<
запись завершена
<< endl;
- Вывод сообщения: cout <<
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д