Program do równań kwadratowych - zaokrąglanie, warunki

0

Cześć,
W sobotę wieczorem pomyślałem, że fajne by było nauczyć się programować. No i zacząłem. Uczę się powoli Javy. Piszę w eclipsie, to raczej nieistotne. (Chyba, że polecicie inny, lepszy).

Napisałem pierwszy program do równań kwadratowych. Wszystko działa bardzo fajnie, ale używam zmiennych double, co sprawia, że przy wyniku wyskakują mi często liczby 3.103204032432 albo choćby 1.0. Zrobiłem coś, co internety nazywają rzutowaniem i teraz program ucina mi te wartości po przecinku do liczb całkowitych.
I teraz pytania:

  1. Czy jest możliwe, żeby wstawić warunek, że jeśli wynik wyjdzie nieokresowy, z jakimś tam nieskończonym rozwinięciem dziesiętnym, to żeby na koniec w println wywalało mi wynik zaokrąglony do dwóch miejsc po przecinku, a jeśli wyjdzie liczba całkowita albo chociaż wymierna, to żeby nie zaokrąglał w ogóle?

  2. Jeśli to powyższe się nie uda, to może mi ktoś powiedzieć jak zaokrąglić wyniki do części setnych w tym kodzie poniżej?

import java.util.Scanner;


public class RownanieKwadratowe 
{

    public static void main(String[] args) 
    {
        System.out.println("Podaj parametry równania kwadratowego");
        Scanner skaner = new Scanner(System.in);
        double a = skaner.nextDouble();
        double b = skaner.nextDouble();
        double c = skaner.nextDouble();
        double delta = b*b-4*a*c;
        

        if (delta>0)
        {
            delta = Math.sqrt(delta);
            double x1 = (-b-delta)/(2*a);
            double x2 = (-b+delta)/(2*a);
                int x3 = (int)(x1);
                int x4 = (int)(x2);
            
                System.out.println("Pierwiastki równania to: "+x3+" oraz "+x4);    
                
        }

        else if (delta==0)    
            {
            double x5 = (-b/2*a);
            int x6 = (int)(x5);
            System.out.println("Pierwiastkiem równania jest "+x6);
            }
    
        else if (delta<0)
            
            System.out.println("Równanie nie ma rozwiązań");
        
        
    }

}
1

Formatuj wyjście: metoda System.out.printf(...); lub

System.out.println("Pierwiastkiem równania jest "+String.format("...",x6));

Przy okazji, masz błędny wzór na pierwiastek gdy delta==0.

1

Dyskusje prowadź w postach, nie w komentarzach.

  1. tak.
  2. sprawdź, (tylko zamiast "..." wpisz właściwy format liczby, np. "%6.4f").
    Możesz też do formatowania wykorzystać klasę DecimalFormat.
0

No ale jak delta będzie równa zero, to przecież jakbym pisał -b-0/2a albo -b+0/2a, więc w sumie wychodzi na -b/2*a .-. Nie wiem co jest źle.

Z tym

 System.out.println("Pierwiastkiem równania jest "+String.format("...",x6)); 

To dzięki wielkie. Już umiem zaokrąglać i nawet określać do którego miejsca ma zaokrąglić.

Co do tego pierwszego pytania, które zadałem na początku, to da się to jakoś zorganizować?

Poza tym tak to zapisałem gdy delta>0

System.out.println("Pierwiastkami równania są"+String.format("%5.2f i",x1)+String.format("%6.2f",x2)) ;
0

Znajdź błąd sam, Twój program, dla równania 2x2-4x+2 = 0 wypisuje pierwiastek 4 (a powinien wypisać 1).
Zapoznałeś się z klasą DecimalFormat?

DecimalFormat df = new DecimalFormat("########.############");
System.out.println("Pierwiastkami równania są "+df.format(x1)+" "+df.format(x2)) ;
0

Mam

double x5 = (-b/(2*a));

I tak działa. Dzięki, będę pamiętał, żeby sprawdzać każdą możliwość.

Tylko jak zmieniłem ten kod na

System.out.println("Pierwiastkiem równania jest"+String.format("%5.0f",x5));

to mi się pojawia spora luka między "Pierwiastkiem równania jest" a "-1" jak już odpalę. Mogę ją zmniejszyć? Próbowałem gdzieś tam spacje usuwać, ale nic.

Z kolei gdy próbuję tego

System.out.printf(6.4,x6);

eclipse mówi, że nie mogę użyć tej metody dla zmiennych double i int

1
System.out.println("Pierwiastkiem równania jest "+String.format("%5.0f",x5).trim());
0

Już jest pięknie, równo

Jak wbije sobie równanie ze zmiennymi: 4; 3; -10

To dostaję pierwiastki -2,00 i 1,25

Można zrobić coś, żeby 1,25 zostało jak jest, a zera przy -2,00 znikały gdy nie są potrzebne?

0

Wypróbowałeś już klasę DecimalFormat?

0
bogdans napisał(a):

Wypróbowałeś już klasę DecimalFormat?

Na początku nie chciał wskoczyć, ale doczytałem w internetach, że muszę jeszcze String output = myFormatter.format(value); dopisać

Teraz wygląda tak i jest z niego dumny! Dzięki wielkie, mega dużo się nauczyłem. Możesz mi polecić co robić dalej? (znając mniej więcej mój poziom umiejętności?

			
			delta = Math.sqrt(delta);
			double x1 = (-b-delta)/(2*a);
			double x2 = (-b+delta)/(2*a);
			
			DecimalFormat df = new DecimalFormat("###.##");
			String output = df.format(x1);
			System.out.println("Pierwiastkami równania są "+df.format(x1)+" i "+df.format(x2)) ;

#Edit

Nie rozumiem. Teraz zamieniłem na samo

 DecimalFormat df = new DecimalFormat("###.##");
 System.out.println("Pierwiastkami równania są "+df.format(x1)+" i "+df.format(x2)) ;

i działa, a wcześniej wyskakiwał error. I działa tak samo poprawnie..

1 użytkowników online, w tym zalogowanych: 0, gości: 1