Найти разность площадей круга и треугольника, с вершинами на окружности - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Из заданного на плоскости множества точек выбрать три различные точки так, чтобы разность между площадью круга ограниченного окружностью, проходящей через эти три точки, и площадью треугольника с вершинами в этих точках была минимальной.

Решение задачи: «Найти разность площадей круга и треугольника, с вершинами на окружности»

textual
Листинг программы
#include<stdio.h>
#include<conio.h>
#include<locale.h>
#include<math.h>
#define M_PI 3.14159265358979323846
int n,i,j,t[50];
float A[50][2],B[50][2],C[50][2],min;
void VVOD()
{setlocale(LC_CTYPE,"Russian");
printf("введи количество координат\n");
scanf("%d",&n);
printf("введи координаты точек А\n");
for(i=0;i<n;i++)
{for(j=0;j<2;j++)
{scanf("%f",&A[i][j]);}}
printf("введи координаты точек B\n");
for(i=0;i<n;i++)
{for(j=0;j<2;j++)
{scanf("%f",&B[i][j]);}}
printf("введи координаты точек C\n");
for(i=0;i<n;i++)
{for(j=0;j<2;j++)
{scanf("%f",&C[i][j]);}}}
void dlina(float U[50],float G[50],float K[50])
{for(i=0;i<n;i++)
{U[i]=sqrt(pow(float(B[i][0]-A[i][0]),2)+pow(float(B[i][1]-A[i][1]),2));
G[i]=sqrt(pow(float(C[i][0]-B[i][0]),2)+pow(float(C[i][1]-B[i][1]),2));
K[i]=sqrt(pow(float(C[i][0]-A[i][0]),2)+pow(float(C[i][1]-A[i][1]),2));}}
void Vivod(float razn[50],float v)
{float max;
for(max=0,i=0;i<n;i++)
{if (razn[i]>max) max=razn[i];}
for(i=0,v=max;i<n;i++)
{if (t[i]==1) {if (razn[i]<v) v=razn[i];}}
for(i=0;i<n;i++)
{if ((t[i]==1)&&(v==razn[i])) {printf("наименьшая разность площадей=%f\n",v);
printf("координаты треугольника\n");
printf("A=(%f %f)\n",A[i][0],A[i][1]);
printf("B=(%f %f)\n",B[i][0],B[i][1]);
printf("C=(%f %f)\n",C[i][0],C[i][1]);}}}
void main()
{float p[50],Strg[50],S[50],R[50],Sokr[50],X[50],Y[50],Z[50],min;
VVOD();
dlina(X,Y,Z);
for(t[i]=0,i=0;i<n;i++)
{if (((X[i]+Y[i])>Z[i])&&((X[i]+Z[i])>Y[i])&&((Y[i]+Z[i])>X[i])) t[i]=1;}
for(i=0;i<n;i++)
{if (t[i]==1) 
{p[i]=(X[i]+Y[i]+Z[i])/2;
Strg[i]=sqrt(p[i]*(p[i]-X[i])*(p[i]-Y[i])*(p[i]-Z[i]));
R[i]=(X[i]*Y[i]*Z[i])/(4*Strg[i]);
Sokr[i]=(M_PI)*pow((R[i]),2);
S[i]=Sokr[i]-Strg[i];}}
for(i=0;i<n;i++)
{printf("t[%d]=%d\n",i,t[i]);}
Vivod(S,min);
_getch();}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы.
  2. Объявляются переменные и массивы для хранения координат точек и площадей.
  3. Функция VVOD() считывает количество точек и координаты точек А, В и С.
  4. Функция dlina() вычисляет длины сторон треугольников АВ, ВС и СА.
  5. Функция Vivod() выводит наименьшую разность площадей и координаты соответствующего треугольника.
  6. В функции main() создается массив t для хранения булевых значений, показывающих, является ли соответствующий треугольник выпуклым.
  7. Вычисляются площади треугольников и их радиусы инерции.
  8. Вычисляется площадь треугольника по координатам и радиусу инерции.
  9. Выводится массив t.
  10. Выводится наименьшая разность площадей и координаты соответствующего треугольника.

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы