Szkolenia programowania we Wrocławiu
Kurs Java Podstawy - rozszerzony

Rozwiązanie 1.4

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 Funkcje{
  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 funkcja 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 (zadanie 1.5)

Komentarze

Komentarze zamknięte. Zapraszamy do grupy na Facebooku
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);
}
}