М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
eldardadashov
eldardadashov
31.12.2020 04:43 •  Информатика

Из текста даны 3 точки, нужно найти окружность, которая охватывает все точки к примеру три точки с координатами: a(100 100) b(300 300) c(100 300) а вывести координаты центра и на котором лежат все точки. какой код будет на pascal?

👇
Ответ:
Alenadobro97
Alenadobro97
31.12.2020
Точки A, B, C, заданные на плоскости координатами, соединяем между собой и получаем треугольник. Задача сводится к нахождению радиуса и координат центра окружности, описанной вокруг треугольника.
Направим вдоль сторон треугольника ABC векторы:
a от В к С, b от А к С, с от А к В.
Радиус описанной окружности можно найти по формуле:
R= \frac{\bar{a}}{2*sin\alpha}; \quad cos\alpha=(|\bar{a}|*|\bar{b}|)/(\bar{a}*\bar{b})
В числителе последней дроби стоит скалярное произведение векторов, в знаменателе - произведение их модулей.
Координаты центра вычисляются по формулам:
O_x= \frac{1}{4S} *\left| \begin {matrix} {x_a^2+y_a^2 \quad y_a \quad 1 \\ x_b^2+y_b^2 \quad y_b \quad 1 \\ x_c^2+y_c^2 \quad y_c \quad 1} \end {matrix} \right|; \quad O_y= -\frac{1}{4S} *\left| \begin {matrix} {x_a^2+y_a^2 \quad x_a \quad 1 \\ x_b^2+y_b^2 \quad x_b \quad 1 \\ x_c^2+y_c^2 \quad x_c \quad 1} \end {matrix} \right|;
В приведенных формулах используются координаты точек, а не векторов.
Площадь треугольника S может быть вычислена по формуле Герона:
S= \sqrt{p(p-a)(p-b)(p-c)}; \quad p= \frac{a+b+c}{2}

type
  Vector = record
    x: real;
    y: real;
    l: real
  end;
  Point = record
    x: real;
    y: real
  end;

procedure InitPoint(s: string; var P: Point);
  //Вводит координаты x,y точки P
begin
  write('Введите координаты x,y точки ' + s, ' ');
  readln(P.x, P.y)
end;

procedure GetVector(A: Point; B: Point; var AB: Vector);
  // Определяет координаты вектора и его длину по пвре точек
begin
  with AB do
  begin
    x := B.x - A.x;
    y := B.y - A.y;
    l := sqrt(sqr(x) + sqr(y))
  end
end;

function InnerProd(a: Vector; b: Vector): real;
begin
  Result := a.x * b.x + a.y * b.y
end;

function Alpha(a: Vector; b: Vector): real;
  // Возвращает угол между векторами a,b
begin
  result := arccos(abs(InnerProd(a, b)) / (a.l * b.l));
end;

function TriangleSq(a: real; b: real; c: real): real;
  // Возвращает площадь треугольника, найденную по трем сторонам
  // (формула Герона)
var
  p: real;
begin
  p := (a + b + c) / 2;
  Result := sqrt(p * (p - a) * (p - b) * (p - c))
end;

procedure GetCenter(A: Point; B: Point; C: Point; S: Real; var D: Point);
// Помещает в запись D координаты центра окружности площадью S,
// описанной вокруг треугольника с вершинами А,В и С
var
  la2, lb2, lc2, detx, dety: real;

begin
  la2 := Sqr(A.x) + Sqr(A.y);
  lb2 := Sqr(B.x) + Sqr(B.y);
  lc2 := Sqr(C.x) + Sqr(C.y);
  detx := lb2 * C.y - lc2 * B.y - la2 * C.y + lc2 * A.y + la2 * B.y - lb2 * A.y;
  dety := lb2 * C.x - lc2 * B.x - la2 * C.x + lc2 * A.x + la2 * B.x - lb2 * A.x;
  D.x := detx / (4 * S);
  D.y := -dety / (4 * S)
end;

var
  Ap, Bp, Cp: Point;
  a, b, c: Vector;
  R, S: real;
  Op: Point;

begin
  //Ввод координат точек
  InitPoint('A', Ap);
  InitPoint('B', Bp);
  InitPoint('C', Cp);
  //Вычисление векторов a=BC, b=AB, c=AC
  GetVector(Bp, Cp, a);
  GetVector(Ap, Bp, b);
  GetVector(Ap, Cp, c);
  R := A.l / (2 * sin(Alpha(b, c))); //радиус описанной окружности
  S := TriangleSq(A.l, B.l, C.l);
  GetCenter(Ap, Bp, Cp, S, Op);
  writeln('Радиус описанной окружности R=', R:0:2);
  writeln('Координаты центра этой окружности: О(', Op.x:0:1, ';', Op.y:0:1, ')')
end.

Тестовое решение (проверено геометрическим построением):

Введите координаты x,y точки A 100 100
Введите координаты x,y точки B 300 300
Введите координаты x,y точки C 100 300
Радиус описанной окружности R=141.42
Координаты центра этой окружности: О(200.0;200.0)
4,8(24 оценок)
Открыть все ответы
Ответ:
20bam05buk
20bam05buk
31.12.2020

#include <iostream>

#include <vector>

using namespace std;

int main()

{

   int t, n, min;

   cin >> t >> n;

   int a[n];

   for (int i = 0; i < n; ++i){

       int mark;

       cin >> mark;

       a[i] = mark;

   }

   for (int i = -t; i <= t; ++i){

       cout << i << ": ";

       for (int j = 0; j < n; ++j)

           if(a[j] == i)cout << j + 1 << " ";

       cout << endl;

   }

   return 0;

}

Объяснение:

не знаю, что тут объяснять, вроде все просто.

P.s. Если , дайте , лучший ответ и жмякните на " ". Это мотивирует продолжать давать ответы.

4,4(38 оценок)
Ответ:
Anna260
Anna260
31.12.2020

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

int main() {

int a, b, c, y = 3;

scanf("%d", &a);

a = pow(a, 2);

scanf("%d", &b);

b = pow(b, 2);

scanf("%d", &c);

c = pow(c, 2);

while(y > 2){

 if (a == b + c ){

 y = 1; break;

}

 if (b == c + a ){

 y = 1;  break;

}

 if (c == a + b) {

 y = 1; break;

}

 if (a != b + c ){

 y = 2; break;

}

 if (b != c + a ){

 y = 2; break;

}

 if (c != a + b ){

 y = 2; break;

 

}

}

printf("\nPryamougolniy : ", y);

switch (y) {

 case 1: printf("Yes"); break;

 case 2: printf("No"); break;

}

return 0;

}

Объяснение:

Dev C++

4,5(12 оценок)
Это интересно:
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ