Witam,
Mam do napisania zadanie o następującej treści:
------------------------------
Dane są opisy kół w postaci trzech liczb - współrzędnych środka oraz promienia. Dla wskazanych par kół należy wypisać, jaka jest odległość pomiędzy środkami tych punktów oraz ile wynosi pole większego z nich.
Wejście
Pierwsza linia wejścia składa się z jednej liczby całkowitej x (1<= x <= 1000) oznaczającej liczbę kół na liście.
Kolejne x linii wejście zawiera po 3 liczby p, q, r (-1000 <= p,q <= 1000, 1 <= r <= 1000) oznaczające odpowiednio rzędną i odciętą środka koła oraz jego promień. Koła pojawiają sie po kolei i są numerowane od 1.
Następna linia zawiera jedną liczbę całkowitą n (1<= n <= 1000) oznaczającą liczbę par, które za chwilę pojawią się na wejściu.
Kolejne n linii to pary liczb a, b (1<= a,b <= x) oznaczające pary kół, dla których należy wykonać obliczenia.
Wyjście
Dla każdej pary kół należy wypisać dwie liczby rzeczywiste, z których pierwsza oznacza odległość euklidesową pomiędzy ich środkami, a druga pole powierzchni większego z kół, obie z dokładnością do dwóch miejsc po przecinku.
UWAGA:
Należy przyjąć, że wartość PI wynosi dokładnie 3,14.
Przykład
Wejście:
3
0 0 3
1 1 2
2 4 4
3
1 2
2 3
3 1
Wyjście:
1.41 28.26
3.16 50.24
4.47 50.24
------------------------------------------------
Napisałem już owy program i w kompilatorze śmiga bezproblemowo, jednak żeby zadanie zostało zaliczone, musi przejść przez internetową sprawdzarkę. Moje pytanie więc brzmi - Czy mój kod jest zły ? Co może powodować, że sprawdzarka nie chce przyjąć mojego rozwiązania?
Mój kod:
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
void distance(int x1, int x2, int y1, int y2);
void surfaceArea(float pi, int r1, int r2);
struct Circle{
int q; // rzedna (y)
int p; // odcieta (x)
int r; // promien kola
};
int main() {
int x; // liczba kol na liscie
cin >> x;
if(x<1)
cout << "ERROR" << endl;
Circle tab[x];
int rzedna,
odcieta,
promien;
for(int i=0;i<x;i++){
cin >> rzedna >> odcieta >> promien;
tab[i].p = rzedna;
tab[i].q = odcieta; //Deklaracja wlasciwosci kola
tab[i].r = promien;
}
int n; //Liczba par na wejsciu
cin >> n;
int circle1,
circle2;
for(int i =0; i<n; i++){
cin >> circle1 >> circle2;
int x1,x2,y1,y2,r1,r2;
x1 = tab[circle1-1].p;
x2 = tab[circle2-1].p;
y1 = tab[circle1-1].q;
y2 = tab[circle2-1].q;
r1 = tab[circle1-1].r;
r2 = tab[circle2-1].r;
distance(x1, x2, y1, y2);
cout << " ";
surfaceArea(3.14, r1, r2);
cout << endl;
}
return 0;
}
void distance(int x1, int x2, int y1, int y2){
float d;
d = sqrt(pow(x2-x1, 2)+pow(y2-y1, 2));
cout << setprecision(3) << d;
}
void surfaceArea(float pi, int r1, int r2){
float surface1, surface2;
surface1 = pi*pow(r1,2);
surface2 = pi*pow(r2, 2);
if(surface1 > surface2)
cout << setprecision(4) << surface1;
else
cout << setprecision(4) << surface2;
}