Cześć,
Mam problem ze swoim kodem.
Przy wykonywaniu przykładu:
2
4
0 0
2 2
11 11
-2 -2
3
1 0
0 0
0 1
przy drugim zestawie testowym czyli:
3
1 0
0 0
0 1
pojawiają się dziwne wartości d2, e2, f2. Nie mam pojęcia skąd to się bierze, ponieważ gdy wykonuje ten przykład jako pierwszy zestaw testowy (czyli:
1
3
1 0
0 0
0 1) to wartości są prawidłowe.
Co więcej, zauważyłem że przy if (d2[i] == (e2[i] + f2[i])) znak " ==" działa jak " != "i na odwrót…
Proszę o wytłumaczenie tych zjawisk bo nie ogarniam…
Poniżej kod:
#include
#include
#include
#include <math.h>
using namespace std;
float a[50000],b[50000],c2[50000], c[50000], b2[50000], a2[50000],d2[50000],e2[50000],f2[50000];
int x[50000],y[50000];
int zestaw, warunek;
int main()
{
cin>>zestaw;
for (int i=1; i<=zestaw; i++)
{
cin>>warunek;
for (int i=1; i<=warunek; i++)
{
cin>>x[i];
x[i] = abs(x[i]);
cin>>y[i];
y[i] = abs(y[i]);
}
for (int i=1; i<=warunek; i++)
{
// cout<<x[i]<<y[i];
a[i] = x[i] - x[i+1];
// cout<<"a: "<<a[i]<<endl;
b[i] = y[i] - y[i+1];
// cout<<"b: "<<b[i]<<endl;
b[i] = fabs(b[i]);
// cout<<"b: "<<b[i]<<endl;
a[i] = fabs(a[i]);
// cout<<"a: "<<a[i]<<endl;
a2[i] = a[i]*a[i];
// cout<<"a2: "<<a2[i]<<endl;
b2[i] = b[i]*b[i];
// cout<<"b2: "<<b2[i]<<endl;
c2[i] = a2[i] + b2[i];
// cout<<"c2: "<<c2[i]<<endl;
c[i] = sqrt(c2[i]);
// cout<<"c: "<<c[i]<<endl;
d2[i] = (c[i]+c[i+1])*(c[i]+c[i+1]);
cout<<"d2: "<<d2[i]<<endl;
e2[i] = (a[i]+a[i+1])*(a[i]+a[i+1]);
cout<<"e2: "<<e2[i]<<endl;
f2[i] = (b[i]+b[i+1])*(b[i]+b[i+1]);
cout<<"f2: "<<f2[i]<<endl;
}
for (int i=1; i<=warunek; i++)
{
if (d2[i] == (e2[i] + f2[i]))
{
// cout<<"d2: "<<d2[i]<<endl;
// cout<<"e2: "<<e2[i]<<endl;
// cout<<"f2: "<<f2[i]<<endl;
cout<<"NIE";
break;
}
else if (i == warunek)
{
cout<<"TAK"<<endl;
//cout<<"d2: "<<d2[i]<<endl;
// cout<<"e2: "<<e2[i]<<endl;
// cout<<"f2: "<<f2[i]<<endl;
break;
}
}
}
return 0;
}