У меня есть текстовый файл, который содержит координаты X, Y, Z точек. Моя цель — найти минимальные и максимальные баллы и записать еще один файл. Для этой цели я пишу функцию расстояния. Точки, которые имеют максимальное расстояние, являются минимальными и максимальными точками. вот мой код Работает, но ничего не вычисляет и не пишет.
#include <iostream>
#include<fstream>
#include <math.h>
using namespace std;
double distance (float X1, float Y1, float Z1, float X2, float Y2, float Z2)
{
return sqrt(pow((X2-X1),2)+ pow((Y2-Y1),2)+pow((Z2-Z1),2));
}
int main ()
{
float x1, y1, z1,x2, y2,z2;
ifstream file("D:\\points.txt");
ofstream result ("D:\\result.txt");
double bigdistance=0;
if (file.is_open())
{
while (!file.eof())
{
file>>x1>>y1>>z1;
while (!file.eof())
{
file>>x2>>y2>>z2;
double d= distance (x1,y1,z1,x2,y2,z2);
if (bigdistance<d)
{
bigdistance=d;
result<<x1<<y1<<z1<<endl<<x2<<y2<<z2;
}
}
}
}
else cout <<"cannot open file";
system ("PAUSE");
return 0;
}
Пара предложений:
while (file >> x1 >> y1 >> z1 >> x2 >> y2 >> z2) {
}
будет читать ваш ввод и остановится, если любое из чтений не удалось.
Вы захотите прочитать весь ввод и сохранить его в векторе точек или подобном. Затем вы можете использовать два вложенных цикла для итерации по каждой паре точек. Прямо сейчас ваши программы предполагают, что входной файл содержит все пары. То есть каждая точка считывается несколько раз из входных данных во внутреннем цикле.
Есть также алгоритмы, которые работают быстрее, чем квадратичные, и они могут вам понадобиться, если у вас более пары тысяч входных точек. Смотри например этот вопрос StackOverflow.
Других решений пока нет …