Ошибка в сортировке

177
15 декабря 2016, 16:12

Условие:

Даны на плоскости точки с координатами (x, y). Переставить точки по возрастанию их расстояния до точки k (заданая, фиксированная точка). Значения х и у находятся во внешнем файле. Результат также необходимо записать на другой внешний файл.

FILE *flr,*flw;
double rast(float x1, float y1, float x2, float y2)  
{ 
     return (pow((x1-x2),2)+pow((y1-y2),2));
};
using namespace std;
int main()
{
int i=0,n=0,k=2;
 float u,v;
if ((flr=fopen("a.txt","r"))==NULL)
{
printf("Error in opening file a.dat \n"); getchar(); exit(0);
}
 while(fscanf(flr, "%i %i", &u, &v) != EOF) {
                   n++;
           }
rewind(flr);
float x[1000],y[1000];
for (i=0; i<=n-1; i++)
{
 fscanf(flr, "%g %g", &u, &v);
    printf("u[%i]=%g v[%i]=%g\n\n",i, u, i, v);
    x[i]=u; y[i]=v;
    };
  int m;
float xk,yk;
xk=x[k];
yk=y[k];

float s,t;

 for (m=0; m< n ; m++)
{
         for (i=0;i<n;i++)
         {
              if ( (rast(x[i],y[i],xk,yk)) > (rast ( x[m],y[m],xk,yk)) )
              {
                   s=x[i]; t=y[i];
                   cout<<"s="<<s;
                   x[m]=x[i]; y[m]=y[i];
                   x[i]=s; y[i]=t;
              } ;  
          };
  }
    if ((flw=fopen("b.txt","w"))==NULL)//создать файл для записи
    {printf("Error in opening file b.dat \n"); getchar(); exit(0); }
     for (i=0; i<=n-1; i++) 
     { 
         if (i==k){ i++;}
         else 
             fprintf(flw,"u=%g, v=%g\n",x[i],y[i]);
    };
    getchar();
}

Сортировка работает неправильно. Помогите поправить код.

Answer 1

у вас неправильно обмениваются элементы, надо так:

s=x[i]; t=y[i];
cout<<"s="<<s;
x[i]=x[m]; y[i]=y[m];
x[m]=s; y[m]=t;
Answer 2

Это потому, что во время сортировки в элементы массивов x[k] и y[k] постоянно попадают разные элементы массивов.

Просто вынесите x[k] и y[k] из массивов перед сортировкой в две переменные и сравнивайте с ними.

READ ALSO
Кодировка ASCII в Xcode

Кодировка ASCII в Xcode

В Xcode при вводе русского символа в переменную типа char, если сразу же вывести эту самую переменную, выводит \320 или что-то похожее

307
Нахождение корней методом Ньютона

Нахождение корней методом Ньютона

Помогите, пожалуйста, с одной проблемойЯ никак не могу вывести значение х

245
Выделение лексем

Выделение лексем

Написать программу, использующую механизм управления при помощи таблиц (управление осуществляется данными!)Нужно выделить следующие типы...

245
Убрать системное меню навигации

Убрать системное меню навигации

Есть приложение на QT C++ для AndroidСтоит задача развернуть приложение на весь экран

212