Funkcje matematyczne - Math
Napisz prosty kalkulator, w którym zainicjujesz dwie zmienne int o nazwach a i b dowolnymi liczbami mieszczącymi się w zakresie - niech a będzie liczbą ujemną, natomiast b dodatnią.
Następnie wykorzystując import statyczny wyświetl wyniki następujących działań bez użycia dodatkowych zmiennych:
-
a^b (a do potęgi b)
-
|a| (wartość bezwzględna z liczby a)
-
pierwiastek z liczby a podniesionej do potęgi b.
Zobacz co się stanie, gdy do a i b przypiszesz dwie 3 cyfrowe liczby, oraz gdy liczba b będzie nieparzysta (wynik a^b będzie ujemny).
Rozwiązanie poniżej ↓ Nie zaglądaj przed samodzielną próbą rozwiązania!
W zadaniu tym najpierw tworzymy dwie liczby, a następnie wykorzystując import statyczny i funkcje matematyczne prezentujemy wyniki.
import static java.lang.Math.*;
public class Functions {
public static void main(String[] args){
int a = -125;
int b = 3;
System.out.println(pow(a, b));
System.out.println(abs(a));
System.out.println(sqrt(pow(a,b)));
}
}
Następnie dobieramy a i b tak, aby przekroczyć zakres. przykładowo niech w powyższym przykładzie b=323. W wyniku tego zabiegu metoda pow(a, b) zwróci -Inifinity, czyli -Nieskończoność, a pierwiastek z tej liczby to NaN. Można się przed tym obronić wykorzystując klasę BigInteger.
Dzięki wykorzystaniu importu statycznego możemy zapisać pow(a, b) , zamiast Math.pow(a, b).
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.
Poniżej znajdziesz archiwalne wpisy z czasów, gdy strona była jeszcze hobbystycznym blogiem.
Remik
System.out.println(sqrt(pow(a,b))); to chyba nie jest właściwy zapis
Remik
ups przepraszam, jest OK
Douglas
Powinno być System.out.println(pow(sqrt(a),b)); :)
Douglas
...tak powinno być, ale dla zadania o treści: pierwiastek z a podnieś do potęgi ;p
Marcin
import static java.lang.Math.*; public class main{ public static void main(String[] args){ int a; int b; a = -4; b = 4; double potega = pow(a, b); double abs = abs(a); double trzy = sqrt(potega); System.out.println(potega); System.out.println(abs); System.out.println(trzy); } } Tak też jest ok, a moim zdaniem bardziej przejrzyście.
Slawek
przy tak małym programie nie ma to znaczenia, ale warto pamiętać, że: zapis int x=4; jest wydajniejszy niż int x; x=4; Dodatkowe wydzielanie zmiennych w celu obliczeń to dodatkowy narzut pamięciowy, przy bardziej złożonych obliczeniach ma to jak najbardziej sens, ponieważ przed optymalizacją powinniśmy stawiać na czytelność kodu, u nas nie ma to znaczenia. PS klasy nazywamy z wielkiej litery :)
Marcin
Czy jest jakaś możliwość, żeby podobnie jak kod HTML na stronach, sprawdzić, jak został napisany program, czyli żeby go zdekodować? Np.: jak podejrzeć kod takiego kalkulatora systemowego windows. Albo pytanie jeszcze bardziej ogólne, gdzie można znaleźć kody różnych programów, aby móc się z nich uczyć?
Kefiru
HTML, czy JavaScript to jezyki nie kompilowane, bezposrednio interpretowane przez przegladarke, ladowane z pliku. Uzyskanie kodu zrodlowego skompilowanego programu to jest chyba dekompilacja, albo reverse engineering, i chyba zazwyczaj nie jest to latwe. Gdyby bylo, to np. crackowanie programow byloby banalne. Programy Open-Source maja dostepny kod zrodlowy, ktory mozna podgladac. Ale nie jestem pewien, nie zam sie jeszcze dobrze ;]
Slawek
W przypadku języków kompilowanych do kodu maszynowego jest to ciężka sprawa. Istnieją softy do właśnie reverse engineering i zazwyczaj kosztują niemałe pieniądze. W przypadku javy jest sporo dekompilatorów, które można znaleźć w google - co prawda czasami nie odwzorowują kodu 1:1 tylko po swojemu, ale zawsze można podejrzeć co się dzieje. Niektórzy oczywiście zabezpieczają to na różne sposoby i wtedy również dla normalnego śmiertelnika szkoda przy tym zachodu.
AdamRamm
import static java.lang.Math.*; public class Zadanie{ public static void main(String[] args){ int a = -20; int b = 20; System.out.println("Liczba "+a+" podniesiona do potegi "+b+" wynosi: "+(pow(a, b))); System.out.println("Wartosc bezwzgledna liczby "+a+" wynosi: "+abs(a)); System.out.println("Pierwiastek z potegi liczb "+a+" i "+b+" wynosi: "+(sqrt(pow(a, b)))); } } Wyszło jak należy :D
mikid
A mi niezależnie od wartości "a" konsola zwraca NaN :/
shaftpl
Nie probujesz czasem pierwiastkowac liczby ujemnej?
marcinekm681
Co do rozwiązania 1.4 to zamiast: System.out.println(sqrt(pow(a,b))); to nie powinno być: System.out.println(Math.pow(Math.sqrt(a),b));?? Pozdrawiam :)
Sławek Ludwiczak
import statyczny Twoim przyjacielem ;) Kod w lekcji jest ok
marcinekm681
Tak wiem o imporcie statycznym. Chodzi mi jednak o kolejność tzn.: (sqrt(pow(a,b))); a // tak mi sie wydaje że powinno być (pow(sqrt(a,b))); // tak jest w przykładzie Z góry dziękuje ze odpowiedź :)
Sławek Ludwiczak
nadal przykład jest ok sqrt pierwiastek pow potęga pierwiastek z potęgi sqrt(pow...)...
marcinekm681
Ajjj... rzeczywiście jest dobrze. Mój błąd-źle doczytałem polecenie. Jest: "pierwiastek z liczby a PODNIESIONEJ do potęgi b. " // a ja przeczytałem -"PODNIESIONY."!! Jedna literka na końcu a robi różnice :) Przepraszam za zamieszanie . Pozdrawiam. :)
Nitr0Skay
Pierwiastek z liczby -125 podniesionej do potęgi 3 wynosi : NaN System.out.println("Pierwiastek z liczby " +a+ " podniesionej do potęgi " +b+ " wynosi : " +sqrt(pow((a), b))); Co tu jest nie tak ? Dlaczego nie zwraca mi pierwiastka z a podniesionego do potęgi b ?? I co to jest to NaN ?? Co tutaj zrobiłem źle ?
oowca
Jest problem ze znakiem liczby pod pierwiastkiem. Liczba ujemna podniesiona do potęgi nieparzystej jest liczbą mniejszą od zera, a w dziedzinie liczb rzeczywistych taki pierwiastek nie istnieje.
oowca
Oczywiście chodzi o pierwiastek kwadratowy.
mwarw
przez 30 min. trudziłem się z tym, a rozwiązanie było takie proste- java.lang.Math.* napisałem- java.lang.math.*
mianod
ja sie bardziej rozpisałem ale też dobrze :) tu macie kod :) import static java.lang.Math.*; public class Kalkulator3{ public static void main(String[] args){ int a=-3; int b=2; double potega = pow(a, b); double bezwzgledna = abs(a); double pierwiastek = sqrt(potega); System.out.println("pierwiastek z liczby "+potega+" to: "+pierwiastek); System.out.println("liczba "+a+" podniesiona do potegi "+b+" to: "+potega); System.out.println("wartosc bezwzgledna liczby "+a+" to: "+bezwzgledna); } }