926. Формула Герона

 

Задано стороны a, b, c, d и диагональ f выпуклого четырехугольника. Определите площадь четырехугольника, используя вспомогательную функцию вычисления площади треугольника по формуле Герона.

 

Вход. В одной стоке задано 5 чисел a, b, c, d, f (0 < a, b, c, d, f ≤ 100), как показано на рисунке.

 

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

 

Пример входа

Пример выхода

3 4 4 2 5

9.7997

 

 

РЕШЕНИЕ

геометрия

 

Анализ алгоритма

Площадь треугольника вычисляется по формуле Герона

S =

где p – полупериметр.

Площадь четырехугольника вычисляем как сумму площадей двух треугольников со сторонами a, b, f и c, d, f.

 

Реализация алгоритма

Функция Heron вычисляет площадь треугольника по формуле Герона.

 

double Heron(double a,double b, double c)

{

  double p = (a + b + c) / 2;

  return sqrt(p * (p - a) * (p - b) * (p - c));

}

 

Основная часть программы. Читаем входные данные, вычисляем и выводим площадь четырехугольника.

 

scanf("%lf %lf %lf %lf %lf",&a,&b,&c,&d,&f);

res = Heron(a,b,f) + Heron(c,d,f);

printf("%.4lf\n",res);

 

Реализация при помощи iostream

 

#include <iostream>

#include <cmath>

#include <iomanip>

using namespace std;

 

double a, b, c, d, f, P1, P2, S1, S2, Sum;

 

int main(void)

{

  cin >> a >> b >> c >> d >> f;

  P1 = (a + b + f) / 2;

  P2 = (d + c + f) / 2;

  S1 = sqrt (P1 * (P1-a) * (P1-b) * (P1 - f));

  S2 = sqrt (P2 * (P2-d) * (P2-c) * (P2 - f));

  Sum = S1 + S2;

  cout << fixed << setprecision(4);

  cout << Sum <<endl;

  return 0;

}

 

Реализация – класс треугольник

 

#include <stdio.h>

#include <math.h>

 

class Triangle

{

public:

  double a, b, c;

  Triangle(double a, double b, double c)

  {

    this->a = a;

    this->b = b;

    this->c = c;

  }

 

  double Perimeter()

  {

    return a + b + c;

  }

 

  double Area()

  {

    double p = Perimeter() / 2;

    return sqrt(p * (p - a) * (p - b) * (p - c));

  }

};

 

int main(void)

{

  double a, b, c, d, f;

  scanf("%lf %lf %lf %lf %lf",&a,&b,&c,&d,&f);

 

  Triangle t1(a,b,f);

  Triangle t2(c,d,f);

 

  double res = t1.Area() +  t2.Area();

  printf("%.4lf\n",res);

  return 0;

}

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static double Heron(double a,double b, double c)

  {

    double p = (a + b + c) / 2.0;

    return Math.sqrt(p * (p - a) * (p - b) * (p - c));

  }

  public static void main(String []args)

  {

    Scanner con = new Scanner(System.in);

    double a = con.nextDouble();

    double b = con.nextDouble();

    double c = con.nextDouble();

    double d = con.nextDouble();

    double f = con.nextDouble();

   

    double res = Heron(a,b,f) + Heron(c,d,f);

    System.out.printf(Locale.US,"%.4f\n",res);

    con.close();

  }

}

 

Java реализация – класс треугольник

 

import java.util.*;

 

class Triangle

{

  double a, b, c;

  public Triangle(double a, double b, double c)

  {

    this.a = a;

    this.b = b;

    this.c = c;

  }

 

  public double Perimeter()

  {

    return a + b + c;

  }

 

  public double Area()

  {

    double p = Perimeter() / 2;

    return Math.sqrt(p * (p - a) * (p - b) * (p - c));

  }

}

 

public class Main

{

  public static void main(String []args)

  {

    Scanner con = new Scanner(System.in);

    double a = con.nextDouble();

    double b = con.nextDouble();

    double c = con.nextDouble();

    double d = con.nextDouble();

    double f = con.nextDouble();

   

    Triangle t1 = new Triangle(a,b,f);

    Triangle t2 = new Triangle(c,d,f);

    System.out.printf(Locale.US,"%.4f\n",t1.Area() + t2.Area());

    con.close();

  }

}