Commit dc1ca34f by Patryk Czarnik

Przykład "funkcje geometryczne" i importowanie

parent 5b11de5c
package pcz.p06_funkcje.importowanie;
/* W tej wersji programu nie ma żadnych importów, a wszystkie odwołania do klasy Geometria
* oraz standardowych klas JOptionPane i Random są poprzedzone nazwą pakietu.
*
* W języku Java ZAWSZE da się napisać program bez użycia import.
*/
public class Importowanie0 {
public static void main(String[] args) {
@SuppressWarnings("resource")
java.util.Scanner scanner = new java.util.Scanner(System.in);
petla:
while(true)
try {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = pcz.p06_funkcje.przyklady.Geometria.poleKwadratu(a);
double obwod = pcz.p06_funkcje.przyklady.Geometria.obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
double b = scanner.nextDouble();
double pole = pcz.p06_funkcje.przyklady.Geometria.poleProstokata(a, b);
double obwod = pcz.p06_funkcje.przyklady.Geometria.obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "T" -> {
System.out.print("Podaj długość pierwszego boku trójkąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku trójkąta: ");
double b = scanner.nextDouble();
System.out.print("Podaj długość trzeciego boku trójkąta: ");
double c = scanner.nextDouble();
double pole = pcz.p06_funkcje.przyklady.Geometria.poleTrojkata(a, b, c);
double obwod = pcz.p06_funkcje.przyklady.Geometria.obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = pcz.p06_funkcje.przyklady.Geometria.poleKola(r);
double obwod = pcz.p06_funkcje.przyklady.Geometria.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = pcz.p06_funkcje.przyklady.JednostkiMiary.km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = pcz.p06_funkcje.przyklady.JednostkiMiary.mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = pcz.p06_funkcje.przyklady.JednostkiMiary.far_na_cel(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = pcz.p06_funkcje.przyklady.JednostkiMiary.cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
} catch(Exception e) {
System.out.println("Błąd: " + e);
}
}
}
package pcz.p06_funkcje.importowanie;
import java.util.Scanner;
import pcz.p06_funkcje.przyklady.Geometria;
import pcz.p06_funkcje.przyklady.JednostkiMiary;
/* W tej wersji stosujemy najbardziej standardowy sposób importowania, najczęściej używany:
każda klasa, do której odwołuje się nasz program, jest zaimportowana osobnym poleceniem.
import w Javie NIE służy załadowaniu klas do pamięci, nie wykonuje się w czasie działania programu (tak się dzieje w Python i PHP)
To jest tylko wskazanie z jakiego pakietu pochodzi klasa.
import nie wpływa na wydajność!
*/
public class Importowanie1 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true)
try {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = Geometria.poleKwadratu(a);
double obwod = Geometria.obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
double b = scanner.nextDouble();
double pole = Geometria.poleProstokata(a, b);
double obwod = Geometria.obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "T" -> {
System.out.print("Podaj długość pierwszego boku trójkąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku trójkąta: ");
double b = scanner.nextDouble();
System.out.print("Podaj długość trzeciego boku trójkąta: ");
double c = scanner.nextDouble();
double pole = Geometria.poleTrojkata(a, b, c);
double obwod = Geometria.obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = Geometria.poleKola(r);
double obwod = Geometria.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = JednostkiMiary.km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = JednostkiMiary.mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = JednostkiMiary.far_na_cel(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = JednostkiMiary.cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
} catch(Exception e) {
System.out.println("Błąd: " + e);
}
}
}
package pcz.p06_funkcje.importowanie;
import java.util.*;
import pcz.p06_funkcje.przyklady.*;
/* Gdy na końcu polecenia import za nazwą pakietu umieścimy *,
* to importowane są wszystkie klasy z tego pakietu.
* To nie importuje podpakietów (podklatalogów).
* importy z * mają niższy priorytet niż importy bezpośrednie.
*
* Gdy w programie pojawia się jakaś nazwa, to kompilator szuka klasy w takiej kolejności:
* 1. rzeczy zaimportowane bezpośrednio (tak jak w Importowanie1)
* 2. bieżący pakiet
* 3. klasy zaimportowane za pomocą * (w tym java.lang)
* (bo w pewnym sensie kompilator Javy na początku robi niejawnie import java.lang.*;
*
* Czy importowanie wszystkich klas z dużego pakietu sprawia problemy?
* To nie jest problem z punktu widzenia wydajności, bo import nie ładuje tych klas do pamięci.
* Natomiast zwiększa to ryzyko kolizji nazw.
* Znany przykład: java.awt.List (lista wyboru w starej technologii okienkowej) i java.util.List (kolekcja).
* Sam import nie jest problemem, problem dopiero, gdy użyjemy tej klasy (błąd kompilacji).
*/
public class Importowanie2 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true)
try {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = Geometria.poleKwadratu(a);
double obwod = Geometria.obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
double b = scanner.nextDouble();
double pole = Geometria.poleProstokata(a, b);
double obwod = Geometria.obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "T" -> {
System.out.print("Podaj długość pierwszego boku trójkąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku trójkąta: ");
double b = scanner.nextDouble();
System.out.print("Podaj długość trzeciego boku trójkąta: ");
double c = scanner.nextDouble();
double pole = Geometria.poleTrojkata(a, b, c);
double obwod = Geometria.obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = Geometria.poleKola(r);
double obwod = Geometria.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = JednostkiMiary.km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = JednostkiMiary.mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = JednostkiMiary.far_na_cel(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = JednostkiMiary.cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
} catch(Exception e) {
System.out.println("Błąd: " + e);
}
}
}
package pcz.p06_funkcje.importowanie;
import static pcz.p06_funkcje.przyklady.Geometria.obwodKola;
import static pcz.p06_funkcje.przyklady.Geometria.obwodKwadratu;
import static pcz.p06_funkcje.przyklady.Geometria.obwodProstokata;
import static pcz.p06_funkcje.przyklady.Geometria.obwodTrojkata;
import static pcz.p06_funkcje.przyklady.Geometria.poleKola;
import static pcz.p06_funkcje.przyklady.Geometria.poleKwadratu;
import static pcz.p06_funkcje.przyklady.Geometria.poleProstokata;
import static pcz.p06_funkcje.przyklady.Geometria.poleTrojkata;
import static pcz.p06_funkcje.przyklady.JednostkiMiary.cel_na_far;
import static pcz.p06_funkcje.przyklady.JednostkiMiary.far_na_cel;
import static pcz.p06_funkcje.przyklady.JednostkiMiary.km_na_mile;
import static pcz.p06_funkcje.przyklady.JednostkiMiary.mile_na_km;
// można też importować zmienne / stałe statyczne:
import static java.lang.Math.PI;
import java.util.Scanner;
/* Gdy w programie korzystamy tylko z elementów statycznych klasy X (z metod statycznych, zmiennych statycznych, stałych),
* to zamiast importować tę klasę i wywoływać te elementy pisząc X.metoda
* można zaimportować statycznie tę metodę (albo zmienną, stałą ...).
*
* Wtedy w treści programy używamy zaimportowanych rzeczy tak, jakby były zdefiniowane w naszej klasie.
* (albo tak jakby były funkcjami, tak jak w Pythonie, C++, PHP itp...)
*
* Nie ma jak użyć import static w stosunku do klasy Scanner, bo jej używamy w sposób "obiektowy":
* tworzony jest obiekt klasy Scanner i na nim wywoływana jest metoda (nie jest statyczna).
*/
public class Importowanie3 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println("Liczba pi: " + PI);
petla:
while(true)
try {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = poleKwadratu(a);
double obwod = obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
double b = scanner.nextDouble();
double pole = poleProstokata(a, b);
double obwod = obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "T" -> {
System.out.print("Podaj długość pierwszego boku trójkąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku trójkąta: ");
double b = scanner.nextDouble();
System.out.print("Podaj długość trzeciego boku trójkąta: ");
double c = scanner.nextDouble();
double pole = poleTrojkata(a, b, c);
double obwod = obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = poleKola(r);
double obwod = obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = far_na_cel(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
} catch(Exception e) {
System.out.println("Błąd: " + e);
}
}
}
package pcz.p06_funkcje.importowanie;
import static pcz.p06_funkcje.przyklady.Geometria.*;
import static pcz.p06_funkcje.przyklady.JednostkiMiary.*;
// można też importować zmienne / stałe statyczne:
import static java.lang.Math.*;
import java.util.Scanner;
/* import static pakiet.Klasa.* importuje wszystkie rzeczy statyczne z podanej klasy.
*
* Nie da się użyć gwiazdek na poziomie pakietu i klasy w jednym imporcie.
* To nie przejdzie:
* import static funkcje.*.*;
*/
public class Importowanie4 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println("Liczba pi: " + PI);
petla:
while(true)
try {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = poleKwadratu(a);
double obwod = obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
double b = scanner.nextDouble();
double pole = poleProstokata(a, b);
double obwod = obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "T" -> {
System.out.print("Podaj długość pierwszego boku trójkąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku trójkąta: ");
double b = scanner.nextDouble();
System.out.print("Podaj długość trzeciego boku trójkąta: ");
double c = scanner.nextDouble();
double pole = poleTrojkata(a, b, c);
double obwod = obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = poleKola(r);
double obwod = obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = far_na_cel(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
} catch(Exception e) {
System.out.println("Błąd: " + e);
}
}
}
package pcz.p06_funkcje.przyklady;
// Specjalne komentarze pisane /** Opis */ tworzą dokumentację nazywaną "javadoc".
// W Eclipse można je wprowadzać skrótem Alt+Shift+J
/**
* @author patryk
*
* Klasa narzędziowa zawierająca metody statyczne służące do obliczania pól i obwodów figur geometrycznych.
*
* To jest przykład klasy, w której nie ma metody main, tylko są zdefiniowane inne metody.
*/
public class Geometria {
static {
// Blok inicjalizacyjny statyczny to jest taki fragment kodu, który wykonuje się w momencie ładowania klasy do pamięci.
System.out.println("ładowana jest klasa Geometria");
}
/** Oblicza pole kwadratu o podanym boku.
*
* @param a długość boku
* @return obliczone pole kwadratu
*/
public static double poleKwadratu(double a) {
return a * a;
}
/** Oblicza obwód kwadratu o podanym boku.
*
* @param a długość boku
* @return obliczony obwód kwadratu
*/
public static double obwodKwadratu(double a) {
return 4 * a;
}
/** Oblicza pole prostokąta o podanych bokach.
*
* @param a długość pierwszego boku
* @param b długość drugiego boku
* @return obliczone pole prostokąta
*/
public static double poleProstokata(double a, double b) {
return a * b;
}
/** Oblicza obwód prostokąta o podanych bokach.
*
* @param a długość pierwszego boku
* @param b długość drugiego boku
* @return obliczony obwód prostokąta
*/
public static double obwodProstokata(double a, double b) {
return 2 * a + 2 * b;
}
/** Oblicza pole koła o podanym promieniu.
*
* @param r promień koła
* @return obliczone pole koła
*/
public static double poleKola(double r) {
return Math.PI * r * r;
}
/** Oblicza obwód koła (aka długość okręgu) o podanym promieniu.
*
* @param r promień koła
* @return obliczony obwód koła
*/
public static double obwodKola(double r) {
return Math.PI * 2 * r;
}
/** Sprawdza czy z boków o podanych długościach da się ułożyć trójkąt.
*
* @param a długość pierwszego boku
* @param b długość drugiego boku
* @param c długość trzeciego boku
* @return <code>true</code> jeśli podane boki spełniają <dfn>warunek trójkąta</dfn>, <code>false</code> w przeciwnym przypadku
*/
static boolean poprawnyTrojkat(double a, double b, double c) {
return a > 0 && b > 0 && c > 0 && a < b+c && b < a+c && c < a+b;
}
/** Oblicza pole trójkąta na podstawie długości boków.
*
* @param a długość pierwszego boku
* @param b długość drugiego boku
* @param c długość trzeciego boku
* @return obliczone pole trójkąta
* @throws IllegalArgumentException w przypadku, gdy z podanych boków nie da się ułożyć trójkąta
*/
public static double poleTrojkata(double a, double b, double c) {
if(!poprawnyTrojkat(a, b, c)) {
throw new IllegalArgumentException("Boki nie pasują, nie da się złożyć trójkąta.");
}
double p = (a + b + c) / 2.;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
/** Oblicza obwód trójkąta na podstawie długości boków.
*
* @param a długość pierwszego boku
* @param b długość drugiego boku
* @param c długość trzeciego boku
* @return obliczony obwód trójkąta
*/
public static double obwodTrojkata(double a, double b, double c) {
return a + b + c;
}
}
package pcz.p06_funkcje.przyklady;
public class JednostkiMiary {
static {
System.out.println("ładowana jest klasa JednostkiMiary");
}
/** Funkcja przelicza podaną liczbę mil na kilometry. */
public static double mile_na_km(double mile) {
return mile * 1.609344;
}
// Napisz w tym miejscu funkcję km_na_mile , która przelicza w drugą stronę, a do main dopisz 2-3 przykładowe wywołania
public static double km_na_mile(double km) {
return km / 1.609344;
}
// Napisz funkcje far_na_cel i cel_na_far
// które przeliczają temperaturę w stopniach Fahrenheita na stopnie Celsjusza i odwrotnie
// https://pl.wikipedia.org/wiki/Skala_Fahrenheita
public static double far_na_cel(double far) {
// źle: return 5/9 * (far - 32);
// kilka poprawnych rozwiązań:
return 5. / 9. * (far - 32.);
// return (far - 32) * 5/9;
// return (far - 32) / 1.8;
}
public static double cel_na_far(double cel) {
//źle: return 32 + 9/5 * cel;
// poprawne:
// return 32. + 9./5. * cel;
// return cel * 9 / 5 + 32;
return 1.8 * cel + 32;
}
public static void main(String[] args) {
// Ten program nie będzie interaktywny, nie będzie pytać użytkownika o dane.
// Tutaj tylko przetestujemy funkcje na kilku wartościach.
System.out.println("100 mil = " + mile_na_km(100) + " km");
System.out.println("500 mil = " + mile_na_km(500) + " km");
System.out.println();
System.out.println("100 km = " + km_na_mile(100) + " mil");
System.out.println("160 km = " + km_na_mile(160) + " mil");
System.out.println();
System.out.println("0 F = " + far_na_cel(0) + " C");
System.out.println("100 F = " + far_na_cel(100) + " C"); // 37.7
System.out.println();
System.out.println("0 C = " + cel_na_far(0) + " F");
System.out.println("37 C = " + cel_na_far(37) + " F");
System.out.println("100 C = " + cel_na_far(100) + " F");
}
}
package pcz.p06_funkcje.przyklady;
import java.util.Scanner;
public class ProgramGeometrycznyKonsolowy {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true)
try {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = Geometria.poleKwadratu(a);
double obwod = Geometria.obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
double b = scanner.nextDouble();
double pole = Geometria.poleProstokata(a, b);
double obwod = Geometria.obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "T" -> {
System.out.print("Podaj długość pierwszego boku trójkąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku trójkąta: ");
double b = scanner.nextDouble();
System.out.print("Podaj długość trzeciego boku trójkąta: ");
double c = scanner.nextDouble();
double pole = Geometria.poleTrojkata(a, b, c);
double obwod = Geometria.obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = Geometria.poleKola(r);
double obwod = Geometria.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = JednostkiMiary.km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = JednostkiMiary.mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = JednostkiMiary.far_na_cel(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = JednostkiMiary.cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
} catch(Exception e) {
System.out.println("Błąd: " + e);
}
}
}
package pcz.p06_funkcje.przyklady;
import javax.swing.JOptionPane;
public class ProgramGeometrycznyOkienkowy {
public static void main(String[] args) {
String[] figury = { "kwadrat", "prostokąt", "koło" };
String figura = (String)JOptionPane.showInputDialog(
null,
"Wybierz rodzaj figury",
"Wybór",
JOptionPane.QUESTION_MESSAGE,
null,
figury,
null);
switch(figura) {
case "kwadrat" -> {
double a = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość boku:"));
double pole = Geometria.poleKwadratu(a);
double obwod = Geometria.obwodKwadratu(a);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "prostokąt" -> {
double a = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość 1. boku:"));
double b = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość 2. boku:"));
double pole = Geometria.poleProstokata(a, b);
double obwod = Geometria.obwodProstokata(a, b);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "koło" -> {
double r = Double.parseDouble(JOptionPane.showInputDialog("Podaj promień koła:"));
double pole = Geometria.poleKola(r);
double obwod = Geometria.obwodKola(r);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
}
}
}
package pcz.p06_funkcje.przyklady;
public class TestyGeometrii {
public static void main(String[] args) {
// proste testy polegające na wywołaniu funkcji dla przykładowych wartości i wypisaniu wyniku
System.out.println("pole kwadratu 5 = " + Geometria.poleKwadratu(5));
System.out.println("obwód kwadratu 5 = " + Geometria.obwodKwadratu(5));
System.out.println("pole prostokąta 3x4 = " + Geometria.poleProstokata(3, 4));
System.out.println("obwód prostokąta 3x4 = " + Geometria.obwodProstokata(3, 4));
System.out.println("pole koła 5 = " + Geometria.poleKola(5));
System.out.println("obwód koła 5 = " + Geometria.obwodKola(5));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment