Begin 21. Даны координаты трех вершин треугольника: \((x_1, y_1)\), \((x_2, y_2)\), \((x_3, y_3)\).
Найти его периметр и площадь, используя формулу для расстояния между двумя точками на плоскости (см. задание Begin20). Для нахождения площади треугольника со сторонами \(a, b, c\) использовать формулу Герона:

\(S = \sqrt{p \cdot (p - a) \cdot (p - b) \cdot (p - c)},\)

где \(p = (a + b + c)/2\) — полупериметр.

Решение на Python 3

import numpy as np
import math

def Distance(A,B):
return math.sqrt((A[0] - B[0])**2 + (A[1] - B[1])**2)

x1,x2,x3,y1,y2,y3 = list(np.random.choice(range(-10, 11), 6))
#x1,x2,x3,y1,y2,y3 = [0,3,0,0,0,4]
while (x3-x1)*(y2-y1) == (y3-y1)*(x2-x1):
x1,x2,x3,y1,y2,y3 = list(np.random.choice(range(-10, 11), 6))

print("Вершина A (x1, y1): ({0},{1})".format(x1, y1))
print("Вершина B (x2, y2): ({0},{1})".format(x2, y2))
print("Вершина C (x3, y3): ({0},{1})".format(x3, y3))

d_AB = Distance([x1,y1],[x2,y2])
print("Длина AB: ", d_AB)

d_AC = Distance([x1,y1],[x3,y3])
print("Длина AC: ", d_AC)

d_BC = Distance([x2,y2],[x3,y3])
print("Длина BC: ", d_BC)

p = (d_AB + d_AC + d_BC)/2
print("Полупериметр: ", p)

S = math.sqrt(p*(p-d_AB)*(p-d_AC)*(p-d_BC))
print("Площадь: ", S)

Решение на C++

#include <iostream>
#include <cmath>
using namespace std;
int main(){
double x1,y1,x2,y2,x3,y3,a,b,c,P,p,S;
cout << "Vvedit koordinati pervoy vershini (x1, y1): ";
cin >> x1 >> y1;
cout << "Vvedit koordinati vtoroy vershini (x2, y2): ";
cin >> x2 >> y2;
cout << "Vvedit koordinati tretey vershini (x3, y3): ";
cin >> x3 >> y3;
a = sqrt(pow((x1-x2),2)+pow((y1-y2),2));
b = sqrt(pow((x1-x3),2)+pow((y1-y3),2));
c = sqrt(pow((x2-x3),2)+pow((y2-y3),2));
P = a+b+c;
p = P/2;
S = sqrt(p*(p-a)*(p-b)*(p-c));
cout << "Perimetr: " << P << "." << endl;
cout << "Ploshyad': " << S << "." << endl;
return 0;
}