Вопрос задан 11.03.2025 в 18:45. Предмет Информатика. Спрашивает Лымарь Даша.

C++
Очень срочно!!!!!!!!!!!

Напишите функцию triangle_area, которая возвращает вещественное число — площадь треугольника.
Функции должны даваться различные наборы параметров:
double triangle_area (double a, double b, double c) — длины трёх сторон;
double triangle_area (double x1, double y1, double x2, double y2, double x3, double y3) — координаты трёх точек.
При проверке задачи с клавиатуры будет вводиться список параметров, которые нужно передать в функцию.

Формат входных данных

В первой строке вводится целое число p (p=3 или p=6) — количество параметров, которые следует передать в функцию.
В следующей строке вводятся p вещественных чисел, не превышающих по модулю 10, и заданных с точностью не более одного знака после десятичной точки.

Формат выходных данных

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

Примеры

Ввод- 3
3.0 4.0 5.0
Вывод- 6.0000

Ввод- 6
0.0 0.0 3.0 0.0 0.0 4.0
Ввывод- 6.0000

Перейти к ответам

Ответы на вопрос

Отвечает Абдракова Рината.

Для решения задачи напишем две функции:

  1. Функция для вычисления площади треугольника по длинам сторон (формула Герона).
  2. Функция для вычисления площади треугольника по координатам вершин (формула через определитель).

Также разработаем основную программу для обработки ввода и вызова соответствующей функции.

Реализация на C++

cpp
#include #include #include using namespace std;

// Функция вычисления площади треугольника по длинам сторон double triangle_area(double a, double b, double c) { double s = (a + b + c) / 2.0; // Полупериметр return sqrt(s * (s - a) * (s - b) * (s - c)); // Формула Герона }

// Функция вычисления площади треугольника по координатам вершин double triangle_area(double x1, double y1, double x2, double y2, double x3, double y3) { return fabs((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2.0); }

int main() { int p; // Количество параметров cin >> p;

if (p == 3) { // Если введены длины сторон double a, b, c; cin >> a >> b >> c; cout << fixed << setprecision(4) << triangle_area(a, b, c) << endl; } else if (p == 6) { // Если введены координаты точек double x1, y1, x2, y2, x3, y3; cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3; cout << fixed << setprecision(4) << triangle_area(x1, y1, x2, y2, x3, y3) << endl; } else { cout << "Invalid input" << endl; // Неверный ввод }

return 0; }


Пояснение кода

  1. Функция triangle_area для длины сторон:

    • Используется формула Герона: s=a+b+c2s = \frac{a + b + c}{2} S=s(sa)(sb)(sc)S = \sqrt{s \cdot (s - a) \cdot (s - b) \cdot (s - c)}
    • Проверка корректности сторон (например, a+b>ca + b > c) в задаче не требуется, так как входные данные корректны.
  2. Функция triangle_area для координат:

    • Площадь вычисляется через определитель: S=12x1(y2y3)+x2(y3y1)+x3(y1y2)S = \frac{1}{2} \left| x_1(y_2-y_3) + x_2(y_3-y_1) + x_3(y_1-y_2) \right|
    • Используется fabs для абсолютного значения.
  3. Обработка входных данных:

    • Если p = 3, читаются длины сторон и вызывается соответствующая функция.
    • Если p = 6, читаются координаты точек и вызывается вторая функция.
  4. Формат вывода:

    • Используется setprecision(4) для вывода площади с точностью до 4 знаков после запятой.

Примеры выполнения

Ввод 1:

3 3.0 4.0 5.0

Вывод:

6.0000

Ввод 2:

6 0.0 0.0 3.0 0.0 0.0 4.0

Вывод:

6.0000

Ввод 3:

diff
6 -1.0 -1.0 2.0 -1.0 -1.0 2.0

Вывод:

4.5000

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос