экзамен / gayd_dlya_nubov
.pdf
std::cout << “введите сторону b: ”; std::cin >> b;
std::cout << “введите сторону c: ”; std::cin >> c;
}
Кстати, напомню, что двумя слешами “//” в плюсах(и не только) отделяются комментарии к коду, т.е. то, что в строке написано после волшебных символов – программа игнорирует. Это нужно, чтоб другой человек смог понять, что происходит на той или иной строке.
Теперь нам надо посчитать биссектрисы для каждого угла, вызвав функцию 3
раза, но т.к. углы разные, в первый параметр функции запишем разные углы.
В каком порядке записывать остальные углы – нас не ебёт, т.к. по формуле они либо умножаются, либо складываются. Также надо не забыть создать переменные бля биссектрис. Итого пока получаем:
int main()
{
setlocale(LC_ALL, "rus"); double a, b, c;
std::cout << “введите сторону a: ”; std::cin >> a;
std::cout << “введите сторону b: ”; std::cin >> b;
std::cout << “введите сторону c: ”; std::cin >> c;
double biss_a, biss_b, biss_c; biss(a, b, c, biss_a); biss(b, a, c, biss_b); biss(c, a, b, biss_c);
}
Ну и заебись, у нас есть 3 биссектрисы, замурованные в соответствующих переменных, осталось лишь их вывести:
int main()
{
setlocale(LC_ALL, "rus"); double a, b, c;
std::cout << “введите сторону a: ”; std::cin >> a;
std::cout << “введите сторону b: ”; std::cin >> b;
std::cout << “введите сторону c: ”; std::cin >> c;
double biss_a, biss_b, biss_c; biss(a, b, c, biss_a); biss(b, a, c, biss_b); biss(c, a, b, biss_c);
std::cout << “биссектриса против стороны a = ” << biss_a << std::endl; std::cout << “биссектриса против стороны b = ” << biss_b << std::endl; std::cout << “биссектриса против стороны c = ” << biss_c << std::endl; return 0;
}
На бумаге код вроде работает, но на всякий случай запихну его в компилятор, и подтвержу этот факт.
Ну оно вроде 4ё-то показывает, и заебись. Учтём, что я ввёл несуществующий треугольник, и следовательно биссектриса одного угла реально равняется 0.
Разберём ещё один пример.
Из тех букав что я тут разобрал, надо написать функцию с типом double,
чтобы та вычисляла площадь трапеции по основаниям и углу. Затем пихнуть её в мейн, и прогнать с двумя трапециями и выдать результат.
Для начала можем преобразовать 2 формулы в одну, у нас есть:
( ) |
и |
|
Т.к. у нас переменные одинаковые, то оба выражения можно преобразовать в:
( ) ( )
А если вы не прогуливали математику в школе, то знаете, что:
( ) ( )
Из этого получаем:
( )
Ну и заебись, перепишем это в функцию, у нас 3 входных параметра:
основание a, основание b, и угол при основании. Не ебу в какой системе измерения нас просят вводить угол, но будем ебашить в градусах. Тк c++
считает всё в радианах, необходимо будет преобразовать градусы в радианы.
Для того, чтобы преобразовать градусы в радианы – надо градусы умножить на пи, и поделить на 180, что я и сделал в коде. Так как по условиям у функции с тип возвращаемого значения должен быть double, то тут можно просто после функции return расписать необходимую функцию.
double ploshad(double a, double b, double ugol)
{
return ((pow(a, 2) - pow(b, 2))* cos(ugol*3.14/180))/4;
}
Функция есть, теперь переходим ко 2-й части, создавать функцию мейна мы уже умеем, по сему сразу начнём прописывать вывод и ввод данных, а также создадим переменные.
int main()
{
setlocale(LC_ALL, "rus"); double d1, d2, f1, f2, y1, y2;
std::cout << “Введите большее из оснований первой трапеции: ”; std::cin >> d1;
std::cout << “Введите меньшее из оснований первой трапеции: ”; std::cin >> d2;
std::cout << “Введите угол при большем основании первой трапеции: ”; std::cin >> y1;
std::cout << “Введите большее из оснований воторой трапеции: ”; std::cin >> f1;
std::cout << “Введите меньшее из оснований воторой трапеции: ”; std::cin >> f2;
std::cout << “Введите угол при большем основании второй трапеции: ”; std::cin >> y2;
}
Ну вот мы и получили дохуя вводов и выводов. Защиту от дэбила добавлять не просили, по сему её нет, но лучше в графу меньшего основание большее не вписывать. Дело за простейшим. Так как функция у нас со значением double, т.е. при её вызове она превратится в какое-то значение, мы можем её просто вызвать с необходимыми значениями. Получаем примерно такое:
int main()
{
setlocale(LC_ALL, "rus"); double d1, d2, f1, f2, y1, y2;
std::cout << “Введите большее из оснований первой трапеции: ”; std::cin >> d1;
std::cout << “Введите меньшее из оснований первой трапеции: ”; std::cin >> d2;
std::cout << “Введите угол при большем основании первой трапеции: ”; std::cin >> y1;
std::cout << “Введите большее из оснований воторой трапеции: ”; std::cin >> f1;
std::cout << “Введите меньшее из оснований воторой трапеции: ”; std::cin >> f2;
std::cout << “Введите угол при большем основании второй трапеции: ”; std::cin >> y2;
std::cout << “Площадь первой трапеции равна: ” << ploshad(d1, d2, y1) << std::endl;
std::cout << “Площадь второй трапеции равна: ” << ploshad(f1, f2, y2);
}
Пробуем проверить, и консоль показывает буквы, успех. Значения +- схожи с жизнью (попробовал построить эти трапеции в тетради), возможна погрешность из-за неточного числа пи, но нам похуй.
В целом, думаю понятно, как эту залупину решать, итог: просто не проебитесь с записью формулы, на всякий случай лучше использовать по больше скобок. Действия в целом все простые, также стоит не проебаться с требованиями к названиям переменных и типом функции.
Донаты принимаю через: https://www.donationalerts.com/r/presfy
На карту сбер: 4276380152017556
На карту тиньк: 5536914053979864
На eth кошелёк: 0x6bd1c95bf741f53844357487802cc61d9e750bce
Задание №3)
Так, что от нас требуют, нихуя ведь не понятно?
Ну в первую очередь необходима схема алгоритма вычисления. Это та самая блок схема, которую от нас требовали почти на каждой лабе. Напомню как её оформлять:
Это начало/конец функции. Внутри пишется начало это, или конец функции,
затем название функции.
Ввод/вывод данных. Внутри пишется то, вводятся, или выводятся данные,
затем идёт переменная, с которой происходит операция.
Операции над данными. Внутри пишется действие, которое производится.
Если что, ГОСТ не запрещает в одном блоке писать несколько действий сразу.
Условие. Внутри пишем само условие, из него выходит несколько путей
(стрелочек), результаты подписываются рядом с самими путями.
Вызов внешней функции. Внутри пишется операция, содержащая внешнюю функцию.
Начало/конец цикла. Внутри сначала идёт название цикла, затем условия прерывания цикла. Начало цикла – с обрубленными углами сверху, конец – снизу.
Комментарий. Выписывается справа от действия, соединяется с линией.
Перейдём к оформлению блок-схемы для нашей задачи, напомню условия:
Так как необходимо использовать вложенные разветвления, то будем их использовать, хуле. Напомню, что это тупо несколько if’ов.
С помощью прорывной 5D визуализации я нарисовал первый кусок функции по вычислению d, тут алгоритм просто узнаёт, к какому промежутку относится x. Также перед этим создал временную переменную temp_d,
которой мы присвоим подходящее значение, и выведем функцией return.
Далее нас просят с помощью базового алгоритма поиска максимального и минимального значения найти необходимые результаты выражений. Если что, это функции min() и max(), в которые пихается 2 значения. Чтобы сравнить 3 значения, просто используем max(1_значение,(max(2_значение, 3
значение))). Таким образом, находится максимальное значение между 2 и 3,
затем оно сравнивается с 1. Продемонстрирую это в блок-схеме с нашими условиями:
Это итоговый результат блок-схемы, поскольку мы в пятой ступени (там где temp_d присваиваем значение) блок-схемы используем сторонние функции,
такие как min, max, cos, sin, pow, то и блоки с этими действиями нарисованы с отступами по бокам. Затем это присвоенное значение переменной temp_d
выводим с помощью функции return.
Теперь эту функцию необходимо отобразить в коде. Действуем по старой схеме, для начала её объявляем, и создаём там временную переменную.
double vich_d(double x)
{
double temp_d;
}
