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); } }