Задача На Регулярное Множество

31.10.2014
2
0
#1
Приветствую. У меня есть задача.
Множество точек на плоскости назовем регулярным, если вместе с каждой парой различных точек оно содержит также еще одну – третью вершину правильного треугольника с вершинами в этих точках. Определить, регулярно ли заданное множество точек.
так как действительные числа нельзя сравнивать, то сравниваю по модулю с заданой точностью, но для трегольника (2,1) (5,6) (8,1) - равносторонний программа выводит что треугольник не правильный и множество нерегулярно. Не подскажите в чем проблема?


C++:
#include "stdafx.h"

#include <iostream>
#include <math.h>
using namespace std;

int main ()
{
setlocale(LC_ALL,"");
float points [3][2];
float sides[3];
int i,j;
for(i=0;i<3;i++)
{
cout <<"введи x"<<i+1<<": ";
cin >> points[i][0];
cout <<"введи у"<<i+1<<": ";
cin >> points[i][1];
}

// ищу стороны треугольника
for(i=0;i<2;i++)
for(j=i+1;j<3;j++)
sides[i]=sqrt(pow(points[i][0]-points[j][0],2)+pow(points[i][1]-points[j][1],2));
//сравниваю стороны треугольника
if ((abs(sides[0]-sides[1])<0.01)&&(abs(sides[0]-sides[2])<0.01)&&(abs(sides[1]-sides[2])<0.01))
cout<<"треугольник правильный (равносторонний)";
else 
cout<<"треугольник неправильный";
return 0;
system("PAUSE");
}
 

Whatka

Well-Known Member
09.10.2011
428
4
#2
Нарисуй в тетрадке)
Треугольник 2.1--5.6--8.1 не равносторонний
 

Whatka

Well-Known Member
09.10.2011
428
4
#4
C++:
//
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

struct Point
{
float x;
float y;
};

void main()
{
setlocale(LC_ALL, "");

int size;
cout << "Введите размерность:";
cin >> size;

Point *p_mas = new Point[size];

for (int i = 0; i < size; i++)
{
cout << "введи x" << i + 1 << ": ";
cin >> p_mas[i].x;
cout << "введи у" << i + 1 << ": ";
cin >> p_mas[i].y;
}

vector <float> sides;
for (int i = 0; i < size; i++)
{
for (int j = i + 1; j < size; j++)
sides.push_back(sqrt(pow(p_mas[i].x - p_mas[j].x, 2) + pow(p_mas[i].y - p_mas[j].y, 2)));
}
sort(sides.begin(), sides.end());// я пока работаю как с обычными числами,тебе придётся написать свой оператор сравнения.

for (int i = 0; i < sides.size(); i++)
cout << sides[i] << " ";
//проверку тоже сам напиши надо,чтобы были одинаковы тройки,четвёрки,пятёрки или т.д. чисел подряд
}
//