Консультация № 114135
15.12.2007, 14:26
0.00 руб.
0 1 1
Пожалуйста! Проверьте, правильно ли написана программа на С++? Вот условие:
Чтобы вычислить окружность круга, кажется, является легкой задачей - обеспечил, вы знаете его диаметр. Но а что если вы не знаете?
Вы получаете декартовые координаты трех не коллинеарных пунктов в самолете.
Ваша работа - вычислить окружность уникального круга, который пересекается все три пункта.
Входная Спецификация
Входной файл будет содержать один или больше тестовых случаев. Каждый тестовый случай consists одной линии, содержащей шесть реальных номеров,х1,у1,х2,у2,х3,у3 представляя координаты трех пунктов. Диаметр круга, определенного тремя пунктами, не будет никогда превышать миллион. Вход заканчивает конец файла.

Для каждого тестового случая, печатают одну линию, содержащую одно действительное число, говорящее окружность круга, определенного тремя пунктами. Окружность должна быть напечатанным точно обогнул к двум десятичным дробям. Значение составляет приблизительно 3.141592653589793.


Приложение:
#include<stdio.h> #include<math.h> void main() { double x1,x2,x3,y1,y2,y3,a,b,c; double p,q,r,p1,q1,r1,s,L,C; double PI=3.141592653589793L; x1=x2=x3=y1=y2=y3=a=b=c=0; while(6==scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3)) { p=(x1-x2); q=(x2-x3); r=(x3-x1); p1=(y1-y2); q1=(y2-y3); r1=(y3-y1); a=sqrt(pow(p,2)+pow(p1,2)); b=sqrt(pow(q,2)+pow(q1,2)); c=sqrt(pow(r,2)+pow(r1,2)); s=(a+b+c)/2.0; p=(s-a); q=(s-b); r=(s-c); L=sqrt(s*p*q*r); r=(a*b*c)/L; r=r/4; C=2*PI*r; printf("%.2f",C); x1=x2=x3=y1=y2=y3=a=b=c=0; }

Обсуждение

Неизвестный
15.12.2007, 14:38
общий
это ответ
Здравствуйте, Предеин Денис Дмитроевич!

С точки зрения кода, все более-менее в норме, только не хватает еще одной закрывающей фигурной скобки. И вот такое замечание: зачем произведение длин сторон сначала делить на L, затем на 4, а потом в формуле длины окружности умножать на 2? В этом месте можно немного оптимизировать вычисления.
Форма ответа