[проблема] Расстояние между точками A и B в n-мерном Евклидовом пространстве.
Задача:
найти расстояние между точками A и B в n-мерном Евклидовом пространстве.
Проблема:
Код решения написан. Компиляется (Dev C++). Но exe'шник стабильно вылетает.
Прошу помощи.
Код:
найти расстояние между точками A и B в n-мерном Евклидовом пространстве.
Проблема:
Код решения написан. Компиляется (Dev C++). Но exe'шник стабильно вылетает.
Прошу помощи.
Код:
#include <math.h> #include <fstream> #include <iostream> #include <conio.h> using namespace std; //d(A,B) = sqrt(sqr(Ax-Bx)+sqr(Ay-By)+...+sqr(Av - Bv)); int main() { int i, n; double a[n], b[n], dist; ifstream inpt("dcoords.in"); inpt >> n; for (i = 0; i < n; i++) { inpt >> a[i]; inpt >> b[i]; } inpt.close(); dist = 0; for (i = 0; i < n; i++) dist += (a[i] - b[i]) * (a[i] - b[i]); dist = sqrt(dist); cout << dist; getch(); }
Комментарии:
Ответить.
Дело скорее в том, что в начале заводится переменная n, затем заводятся массивы, а только потом считывается n. Наверное должно быть так:int n; inpt >> n; double a[n], b[n]; |
Если создавать массив этим образом(a[n]), то необходимо, чтобы n была константой. Если же n - переменная, то обычно поступают так: Либо int i, n; double *a, *b, dist; ifstream inpt("dcoords.in"); inpt >> n; a = new double[n]; b = new double[n]; Либо сразу создают массивы максимально требуемого размера. |
Всем спасибо, всё работает. Поступил наиболее очевидным способом: переместил объявление всех переменных типа "double" за inpt >> n; Редактировано 2012-12-03 19:07:38. |
Версия для печати