Witam. Mam problem w zadaniu ze SPOJa.
Sprawdź, czy podane 3 punkty są współliniowe, czy też nie.
Input
Najpierw zostaje podana liczba t (1 < t ≤ 100) wykonywanych testów. W każdej następnej linii podawane są współrzędne trzech punktów będącymi liczbami całkowitymi z przedziału [-1000, 1000]. Kolejne współrzędne oddzielone są znakiem tabulacji.
Output
Jako wydruk otrzymujemy słowo TAK, gdy podane trzy punkty są współliniowe albo słowo NIE, gdy nie są współliniowe. Każda odpowiedź zapisywana jest w osobnej linii.
Mój kod:
#include <iostream>
using namespace std;
int main()
{
int ile_testow;
int wspolrzednex[3];
int wspolrzedney[3];
cin>>ile_testow;
for(int i=1;i<=ile_testow;i++) //pętla do ilości testów
{
for(int j=1;j<=3;j++) //wprowadzanie współrzędnych
{
cin>>wspolrzednex[j-1];
cin>>wspolrzedney[j-1];
}
if((wspolrzednex[0]==wspolrzednex[1]==wspolrzednex[2])||(wspolrzedney[0]==wspolrzedney[1]==wspolrzedney[2]))
{
cout<<"TAK"<<endl; //jeżeli któreś 3 współrzędne są takie same to punkty są współliniowe
}
else //jeżeli nie ma takich samych współrzędnych to program sprawdza za pomocą równania kierunkowego prostej
{
double a;
a=(wspolrzedney[0]-wspolrzedney[1])/(wspolrzednex[0]-wspolrzednex[1]); //wspolczynnik kierunkowy
double b;
b=wspolrzedney[0]-a*wspolrzednex[0]; //drugi wspolczynnik
if(wspolrzedney[2]==a*wspolrzednex[2]+b) //sprawdza czy rownanie prostej sie zgadza
{cout<<"TAK"<<endl;}
else
{cout<<"NIE"<<endl;}
}
}
return 0;
}
Przy przykładzie 0 0 0 0 0 0 program się wysypuje. Wydaje mi się, że matematycznie metoda jest dobra, a jednak się nie udaje. Dzięki za pomoc.