Почему не сравнивает точки с номером больше 5?
Программа должна сравнивать точки и выводить найменшее расстояние между ними, но сравнивает до 5 точки, и дальше не работает.
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <math.h>
using namespace std;
int main()
{
setlocale(0, "");
srand(time(NULL));
double mas[10][2];
for (int j = 0; j < 10; j++)
{
cout << "Точка " << j << endl;
for (int i = 0; i < 2; i++)
{
mas[i][j] = rand() % 10;
cout << mas[i][j] << " ";
}
cout << endl;
}
double minrasst = mas[0][0]; // :D
double rasst;
cout << endl;
for (int j = 0; j < 10; j++)
{
cout << endl;
for (int k = j; k < 10; k++)
{
if (k != j)
{
rasst = (pow((pow((mas[j][0] - mas[k][0]), 2) + (pow((mas[j][1] - mas[k][1]), 2))), 0.5));
// _____________________
// |AB|=/(x2-x1)^2+(y2-y1)^2 '
cout << j << "i" << k << " " << rasst << endl;
if (rasst < minrasst)
{
if (rasst > 0 && minrasst > 0)
{
minrasst = rasst;
}
}
}
}
}
cout << "minrasst = " << minrasst;
}
Ответы (1 шт):
Автор решения: DmitryK
→ Ссылка
Потому что у вас неопределенное поведение, связанное с выходом за пределы массива. У вас массив mas[10][2], а обращаетесь вы к нему как mas[2][10].
double mas[10][2];
for (int j = 0; j < 10; j++)
for (int i = 0; i < 2; i++)
mas[i][j] = rand() % 10; // i изменяется от 0 до 2 j изменяется от 0 до 10
// должно быть
mas[j][i] = rand() % 10;
И немного красоты для кода:
int main()
{
setlocale(0, "");
srand(time(NULL));
double mas[10][2];
for (int j = 0; j < 10; j++)
{
cout << "Точка " << j << " - ";
mas[j][0] = rand() % 10;
mas[j][1] = rand() % 10;
cout << "(" << mas[j][0] << "," << mas[j][1] << ")\n";
}
double minrasst = 1e9; // :D
double rasst;
for (int j = 0; j < 9; j++)
{
cout << endl;
for (int k = j+1; k < 10; k++)
{
rasst = (pow((pow((mas[j][0] - mas[k][0]), 2) + (pow((mas[j][1] - mas[k][1]), 2))), 0.5));
// |AB|=/(x2-x1)^2+(y2-y1)^2 '
cout << j << "i" << k << " " << rasst << endl;
if (rasst < minrasst)
minrasst = rasst;
}
}
cout << "\nminrasst = " << minrasst;
}