Dobry wieczór, zaczynam przygodę z javą i rozwiązuje zadania z Polskiego Spoja, zadanie to : ETI06F1 - Pole pewnego koła. Program który napisałem wywala mi błędne wyniki jeśli chodzi o duże liczby (np: podając bna wejsciu: 1000 , 1500). Zastosowałęm zaokrąglanie ale , to nic nie daje , poniewaz to tylko mi zaokrągla do 2 miejsc po przecinku. Doczytałem się iż za poprawne wyniki moze odpowiadać funkcja BigDecimlal , czy dobrze myślę ??? Jeśli tak to w jaki sposób ją zastosować w programie?
Treść zadania:
Wyznacz pole koła, którego okrąg jest przecięciem dwóch identycznych sfer o promieniu r. Odległość pomiędzy środkami sfer wynosi d. Wartości r oraz d podane na wejściu są liczbami zmiennoprzecinkowymi. Można założyć, że 1 <= d < 2 * r <= 200
Wejście:
Na wejściu podane są dwie liczby zmiennoprzecinkowe r d oddzielone spacją, oznaczające odpowiednio promień sfery i odległość między środkami sfer.
Wyjście
Należy wypisać pojedynczą liczbę zmiennoprzecinkową S oznaczającą pole koła. Dopuszczalny błąd wyniku wynosi 0.01.
Uwaga. W roli separatora dziesiętnego należy używać kropki (nie: przecinka). Można przyjąć, że stosunek obwodu koła do jego średnicy wynosi 3.141592654.
package lekcja2;
import java.util.Scanner;
public class polePewnegoKola {
public static void main(String[] args) {
// TODO Auto-generated method stub
double d,r,polowa,h,pole,pole2;
Scanner skan = new Scanner(System.in);
System.out.println("Podaj odleglosc pomiedzy srodkami sfer: ");
d = skan.nextInt();
System.out.println("Podaj promien sfer: ");
r = skan.nextInt();
polowa=d/2;
h= (Math.pow(r, 2)- Math.pow(polowa, 2) );
h=(Math.sqrt(h) );
pole=3.141592654*Math.pow(h, 2);
pole = pole * 100;
pole = Math.round(pole);
pole = pole / 100;
System.out.println("Pole:\n" + pole);
}
}
Shalom