11. JAVA – instrukcje sterujące, pętle i funkcje(metody)


Instrukcje warunkowe

if…, else…, elseif…

Najprościej rzecz ujmując instrukcje warunkowe tj. if…, else…, ? oraz switch… pozwalają, w trakcie pisania programu, na rozważanie wielu możliwości odpowiadając na pytania co jeżeli?

Podam wam teraz prosty przykład:

Jeżeli liczba jest większa od zera, to wypisz że jest dodatnia

zapis tego stwierdzenia za pomocą instrukcji if będzie wyglądał następująco:

int liczba = 9;
if
(liczba>0) System.out.println("Liczba jest dodatnia");

Jeżeli potrzebujemy rozwinąć naszą myśl o zapytanie „a co gdy warunek nie jest spełniony?” – używamy else.

Jeżeli liczba jest większa od zera, to wypisz że jest dodatniaw przeciwnym wypadku napisz, że nie jest dodatnia

int liczba = 9;
if(liczba>0) System.out.println("Liczba jest dodatnia");
else System.out.println("Liczba nie jest dodatnia");

Oczywiście instrukcje możemy zagnieżdżać jedna w drugiej.

Może zajść sytuacja, że przed użyciem else chcemy sprawdzić jeszcze jakieś inne warunki, wtedy przychodzi nam z pomocą instrukcja else if.

if(liczba>0) System.out.println("Liczba jest dodatnia");
else if(liczba==0) System.out.println("Liczba jest zerem");
else System.out.println("Liczba nie jest dodatnia");

Jeżeli potrzebujemy wykonać więcej instrukcji po danym warunku, to organizujemy kod w bloki, za pomocą {}

if(liczba>0) {
System.out.println("Liczba jest dodatnia");
// dalsze instrukcje..................
}
else if(liczba==0) {
System.out.println("Liczba jest zerem");
// dalsze instrukcje..................
}
else {
System.out.println("Liczba nie jest dodatnia");
// dalsze instrukcje..................
}

Operator trójkowy

Operator trójkowy, to skrócony zapis if..else. Został on przedstawiony w temacie poświęconym operatorom.

System.out.println(a==3 ? 1 : 0);

a==3 ? -> to nasz warunek

1 -> to co wyświetlamy jeżeli prawda

a po znaku :

0 -> to co wyświetlamy jeżeli fałsz

switch

Gdy wiemy, że nasza zmienna będzie przyjmowała jakieś konkretne wartości, możemy użyć wtedy instrukcji switch.

String plec = "K";
switch (plec) {
case "K":
System.out.println("Kobieta");;
break;
case "M":
System.out.println("Mężczyzna");;
break;
default:
System.out.println("Nierozpoznany wybór");;
break;
}

break; używamy by przerwać działanie instrukcji, gdy warunek zostanie spełniony.

default; oznacza akcję domyślą, gdy żaden z warunków nie zostanie spełniony.

 

Zadania do wykonania:

Zadanie 1: Sprawdź czy liczba jest podzielna przez 3

Rozwiązanie:
System.out.println("\nCzy liczba jest podzielna przez 3");
System.out.println("Prosze podac liczbe:");
int xx = new Scanner(System.in).nextInt();
if (xx % 3 == 0) {
System.out.println("Liczba " + xx + " jest podzielna przez 3.");
} else {
System.out.println("Liczba " + xx + " nie jest podzielna przez 3.");
}

Zadanie 2: Napisz program sprawdzający czy liczba jest parzysta.

Rozwiązanie:
System.out.println("\nprogram sprawdzający czy liczba jest parzysta");
System.out.println("Prosze podac liczbe:");
int a = new Scanner(System.in).nextInt();
if(a==0){
System.out.println("podałeś 0");
}
else if (a%2==0) {
System.out.println("parzysta");
}
else {
System.out.println("nieparzysta");
}

Zadanie 3: Porównaj ze sobą 2 dowolne liczby i wypisz która jest większa.

Rozwiązanie:
System.out.println("\nPorównaj ze sobą 2 dowolne liczby i wypisz która jest większa");
System.out.println("Podaj pierwszą liczbę:");
int l1 = new Scanner(System.in).nextInt();
System.out.println("Podaj drugą liczbę:");
int l2 = new Scanner(System.in).nextInt();

System.out.println("porównujemy liczby l1 i l2");
if (l1 > l2) {
System.out.println("większa jest liczba l1=" + l1);
}
else if (l1 < l2)
{
System.out.println("większa jest liczba l2=" + l2);
}
else System.out.println("Liczby są równe");

Zadanie 4: Porównaj ze sobą 3 nie równe sobie liczby i wypisz je w kolejności od największej do najmniejszej.

Rozwiązanie:
System.out.println("\nPorównaj ze sobą 3 nie równe sobie liczby i wypisz je w kolejności od największej do najmniejszej");
System.out.println("Podaj pierwszą liczbę:");
int l_1 = new Scanner(System.in).nextInt();
System.out.println("Podaj drugą liczbę:");
int l_2 = new Scanner(System.in).nextInt();
System.out.println("Podaj trzecią liczbę:");
int l_3 = new Scanner(System.in).nextInt();

System.out.println("porównujemy liczby: l_1, l_2, l_3");
int min = l_1; //zakladamy ze jest to najmniejsza
if (l_2 < l_1 && l_2 < l_3) {min = l_2;}
if (l_3 < l_1 && l_3 < l_2) {min = l_3;}
int max = l_1; //zakladamy ze jest to największa
if (l_2 > max) {max = l_2;}
if (l_3 > max) {max = l_3;}
int mid = 0;
if(l_1 != min && l_1 != max) {mid = l_1;}
if(l_2 != min && l_2 != max) {mid = l_2;}
if(l_3 != min && l_3 != max) {mid = l_3;}
System.out.println("większa z liczb to " + max + ", następnie " + mid + " i " + min);

Zadanie 5: Za pomocą operatora trójkowego sprawdź pełnoletność użytkownika

Rozwiązanie:
System.out.println("\nczy pełnoletni");
System.out.println("Podaj swój wiek w latach:");
int wiek = new Scanner(System.in).nextInt();

String czy_pelnoletni = wiek>=18 ? "pełnoletni" : "niepełnoletni";
System.out.println("Jesteś " + czy_pelnoletni);

Zadanie 6: Napisz program potrafiący rozwiązywać równanie kwadratowe: y = ax2 + bx + c. Przypominamy, że ilość rozwiązań zależy od wartości tzw. współczynnika Δ (Δ = b2 − 4ac).

Rozwiązanie:
System.out.println("\nRozwiązujemy równanie kwadratowe: y = ax2 + bx + c");
System.out.println("Podaj a:");
int l_a = new Scanner(System.in).nextInt();
System.out.println("Podaj b:");
int l_b = new Scanner(System.in).nextInt();
System.out.println("Podaj c:");
int l_c = new Scanner(System.in).nextInt();
int delta = l_b * l_b - 4 * l_a * l_c; //obliczamy wg wzoru
double x, x1, x2;
if (delta > 0)
{
x1 = (-l_b - sqrt(delta)) / 2 * l_a; //sqrt() pierwiastek kwadratowy
x2 = (-l_b + sqrt(delta)) / 2 * l_a;
System.out.println("posiada dwa pierwiastki x1 = " + x1 +", x2 = " + x2);
}
else if (delta == 0)
{
x = -l_b / 2 * l_a;
System.out.println("posiada jeden pierwiastek x = " + x);
}
else System.out.println("nie posiada pierwiastków");

Zadanie 7: Zrealizuj kalkulator, który dla zadanych liczb w zależności od wartości zmiennej wybór wykonuje: mnożenie, dzielenie, odejmowanie, dodawanie. Użyj instrukcji „switch”.

Rozwiązanie:
System.out.println("\nKalkulator:");
System.out.println("Podaj liczba1:");
int liczba1 = new Scanner(System.in).nextInt();
System.out.println("Podaj liczba2:");
int liczba2 = new Scanner(System.in).nextInt();
System.out.println("Podaj znak:");
String wybor = new Scanner(System.in).nextLine();

switch (wybor)
{
case "+":
System.out.println(liczba1+liczba2);
break;
case "-":
System.out.println(liczba1-liczba2);
break;
case "*":
System.out.println(liczba1*liczba2);
break;
case "/":
System.out.println(liczba1+liczba2);
break;
}

Zadanie 8: Napisz program, który dla danego punktu na płaszczyźnie sprawdzi, w której ćwiartce układu współrzędnych się on znajduje. Może jednak być tak, że punkt nie znajduje się w żadnej ćwiartce – leży na jednej z osi lub w środku układu współrzędnych. Wówczas program powinien to stwierdzić. Na wejściu znajdują się dwie liczby całkowite oddzielone spacją, x i y(−1 000 000 000≤x, y≤1 000 000 000), oznaczające współrzędne danego punktu. Jeżeli podany punkt nie leży na żadnej z osi, Twój program powinien wypisać: I, II, III lub IV, w przypadku gdy punkt należy do, odpowiednio, pierwszej, drugiej, trzeciej lub czwartej ćwiartki układu współrzędnych. Jeżeli punkt leży w środku układu współrzędnych, program powinien wypisać liczbę 0. W przeciwnym razie, program powinien wypisać OX (duże O i duże X), jeśli punkt leży na osi X, a OY – jeśli punkt leży na osi Y.
Przykład
Dla danych wejściowych:
5 7
poprawnym wynikiem jest:
I
a dla danych wejściowych:
0 -1000000000
poprawnym wynikiem jest:
OY
natomiast dla danych wejściowych:
0 0

Zadanie 9: Twoim zadaniem jest stwierdzić, czy z trzech odcinków o podanych długościach można zbudować trójkąt o dodatnim polu. Pierwszy i jedyny wiersz wejścia zawiera trzy liczby naturalne a,b,c(1≤a, b, c≤1 000 000 000), oddzielone spacjami. Liczby te oznaczają długości trzech odcinków. Twój program powinien wypisać jedno słowo TAK lub NIE, w zależności od tego, czy z odcinków o długościach takich jak na wejściu można zbudować niezdegenerowany trójkąt, czyli trójkąt o dodatnim polu.
Przykład
Dla danych wejściowych:
8 7 5
poprawnym wynikiem jest:
TAK
a dla danych wejściowych:
1 10 2
poprawnym wynikiem jest:
NIE
oraz dla danych wejściowych:
4 4 8
poprawnym wynikiem jest:
NIE

Rozwiązanie:
System.out.println("\nczy z trzech odcinków o podanych długościach można zbudować trójkąt");
System.out.println("Podaj długość 1 boku:");
int ba = new Scanner(System.in).nextInt();
System.out.println("Podaj długość 2 boku:");
int bb = new Scanner(System.in).nextInt();
System.out.println("Podaj długość 3 boku:");
int bc = new Scanner(System.in).nextInt();

if (ba + bb > bc && ba + bc > bb && bb + bc > ba) {
System.out.println("Z tych bokow mozna zbudowac trojkat.");
} else {
System.out.println("Z tych bokow nie mozna zbudowac trojkata.");
}

 

Zadanie 10: Napisz instrukcję switch wyświetlającą na podstawie zmiennej całkowitej „nr” nazwę miesiąca słownie.
Rozwiązanie:
System.out.println("wyświetlana podstawie zmiennej całkowitej „nr” nazwę miesiąca słownie.");
System.out.println("Podaj nr miesiąca:");
int nr = new Scanner(System.in).nextInt();
switch (nr) {
case 1:
System.out.println("Styczen");
break;
case 2:
System.out.println("Luty");
break;
case 3:
System.out.println("Marzec");
break;
case 4:
System.out.println("Kwiecien");
break;
case 5:
System.out.println("Maj");
break;
case 6:
System.out.println("Czerwiec");
break;
case 7:
System.out.println("Lipiec");
break;
case 8:
System.out.println("Sierpien");
break;
case 9:
System.out.println("Wrzesien");
break;
case 10:
System.out.println("Pazdziernik");
break;
case 11:
System.out.println("Listopad");
break;
case 12:
System.out.println("Grudzien");
break;
default:
System.out.println("Nieprawidlowy numer miesiaca!");
}
 
 
Zadanie 11: Napisz instrukcje która na podstawie zmiennej całkowitej ocena wyświetla jedna z informacji: brak promocji do następnej klasy, promocja do następnej klasy, promocja z oceną celującą.
 
Zadanie 12: Napisz instrukcję switch, która dla przekazanej jako parametr całkowity oceny wyświetli ją słownie.
 
Zadanie 13: Napisz instrukcję switch, która wczytuje kwotę w złotych, a następnie przelicza ją na taka walutę jaką wybierze użytkownik: funty, dolary, euro….
 
Zadanie 14: Napisz instrukcję switch, która przelicza metry na inne jednostki miary.
 
Zadanie 15: Sprawdź czy wpisany rok jest przestępny.
Rozwiązanie:
System.out.println("\nczy przestępny");
System.out.println("Podaj rok:");
int rok = new Scanner(System.in).nextInt();

String czy_przestepny = ((rok % 4 == 0 && rok % 100 != 0) || rok % 400 == 0) ? "przestępny" : "nie jest przestępny";
System.out.println("Podany rok " + czy_przestepny);

 

Pętle

Instrukcje, które pozwalają wielokrotnie powtórzyć fragment programu nazywają się iteracjami lub pętlami.

Pętle for… i foreach…

Budowa pętli for wygląda następująco

for( inicjalizacja zmiennych ; sprawdzenie warunku ; modyfikacja zmiennych) 
{
   instrukcja1;
   instrukcja...;
}

Przykład 1: Napisz skrypt, który wyświetli 100 kolejnych liczb całkowitych począwszy od 3.

System.out.println("Pętla for:");
for (int i = 3; i<=100; i++){
System.out.print(i + (i<100 ? ", " : "\n"));
}

Przykład 2: Napisz skrypt, obliczający n! (n silnia).

System.out.println("Silnia:");
int n = 2;
if(n<0) System.out.println("Podaj liczbę dodatnią");
else if(n==0 || n==1) System.out.println(1);
else {
int silnia = 1;
for (int j=2; j<=n; j++){
silnia*=j;
}
System.out.println(silnia);
}

Przykład 3: Napisz skrypt, który za pomocą znaków * (gwiazdki) narysuje trójkąt.

System.out.println("Trojkąt z gwiazdek:");
final int X = 5; //liczba musi być nieparzysta
System.out.print(" ");
for (int w = 1; w<=X; w++){
for (int k = 1; k<=X+w; k++){
if(k==X+w) System.out.print("\n");
if(k>X-w && k<X+w) System.out.print("*");
else System.out.print(" ");
}
}

Przykład 4: Napisz skrypt wyświetlający ciąg Fibonacciego i wypisz wartość ostatniego elementu.

System.out.println("Ciąg Fibonacciego:");
n = 10;
if(n<=2) System.out.println(n + " elementem ciągu Fibonacciego jest 1");
else {
int f1 = 0;//wartość pierwszego elementu
int f2 = 1; //wartość drugiego elementu
int temp; //zmienna pomocnicza
for(i=2; i<=n; i++) {
int fn=f1+f2;
f1=f2;
f2=fn;
System.out.print(fn);;
if(i<n) System.out.print(" ");
}
System.out.println(";\n" + n + " elementem ciagu Fibonacciego jest " + f2);
}

Pętla foreach służy do wykonywania operacji na kolejnych elementach tablicy.

System.out.println("For each dla tablic:");
int[] dane = {2,3,4,5,7};
for (int d : dane) {
System.out.print(d + " ");
}

Nieskończona pętla for (niezalecane jest jej używanie).

for ( ; ; ) {
instrukcje...
break;
}
Pętlę nieskończoną przerywamy konstrukcją break;

Pętle while…

Budowa pętli while

while (warunek){
instrukcje...
}

Przykład 1: Wyświetl wszystkie liczby całkowite nieujemne, mniejsze od podanej liczby.

int x = 10;
int min = 0; //najmniejsza liczba nieujemna
System.out.println("Liczby całkowite mniejsze od " + x + ", to:");
while (min < x) //pętla wykona się dla tego warunku
{
System.out.print(min);
if(min<x-1) System.out.print(" ");
min++;
}

Przykład 2: Napisz skrypt wyznaczający NWD (największy wspólny dzielnik).

System.out.println("NWD:");
x = 15;
int y = 10;
int a=x;
int b=y;
while(a!=b) {
if(a>b) a-=b;
else b-=a;
}
int nwd = a; // lub b - obie zmienne przechowują wynik NWD(a,b)
System.out.println("Dla a = " + x + " i b = " + y + " NWD = " + nwd);
 

Pętle do… while…

Budowa pętli do… while

do{
instrukcje...
}
while(warunek);

UWAGA!!! pętla do… while zawsze wykona się przynajmniej 1 raz!

Przykład 1: Napisz skrypt wyświetlający wszystkie liczby całkowite od zera do danej liczby.

System.out.println("Liczby całkowite od 0 do podanej:");
x = 15;
min = 0;
do {
System.out.print(min);
if(min<x) System.out.print(" ");
min++;
}
while (min<=x);

 

Zatrzymywanie pętli i skryptu

Działanie pętli lub skryptu możemy przerwać w dowolnej chwili lub możemy pominąć część instrukcji do wykonania:

  • instrukcja break; powoduje natychmiastowe wyjście z pętli
  • instrukcja continue; powoduje przeskoczenie do następnego obiegu pętli

 

Przerywanie działania pętli za pomocą instrukcji break;

System.out.println("\nbreak");
for (i = 0; i <= 100; i++){
System.out.print(i + " ");
if(i>=27) {
System.out.println("...następuje przetwanie działania...");
break;
}
}
System.out.println("ta instrukcja zostanie wykonana");

Przeskok do następnej iteracji (obiegu pętli) za pomocą instrukcji continue;

System.out.println("continua");
for (i = 1; i<=100; i++){
if(i%2==0) System.out.print(i);
    else continue;
if (i<100) System.out.print(", ");
}

Zadania do samodzielnego wykonania:

Zadanie 1: Za pomocą pętli for wypisz 2 wiersze po 10 dowolnych elementów.

Zadanie 2: Za pomocą pętli for, while i do… while napisz skrypt, który będzie zwiększał, a następnie zmniejszał zmienną i od 1 do 100 o 2.

Zadanie 3: Napisz skrypt, który dla zmiennej n=10 i n>0 będzie ją zmniejszał o 1 i wypisywał: wartości kwadratów zmiennej n; następnie wartości kwadratów zmiennej n dla n parzystych.

Zadanie 4: Za pomocą pętli for, while i do… while napisz skrypt, który wypisze ilość iteracji pętli dla zmiennej i<=10. Tam gdzie to możliwe zastosuj i++, ++i, i- -, – -i.

Zadanie 5: Napisz skrypt, który sprawdzi, czy podana liczba jest liczbą pierwszą.

Zadanie 6: Za pomocą pętli for stwórz tabliczkę mnożenia i zapisz ją w tablicy.

Zadanie 7: Napisz skrypt, który za pomocą znaków * (gwiazdki) narysuje kwadrat. Gwiazdki leżące na obwodzie zamień na znak „=”, a gwiazdki leżące na przekątnych na „o”.

Zadanie 8: Napisz skrypt, który po podaniu przez użytkownika promienia koła, za pomocą znaków * (gwiazdki), narysuje je.

Zadanie 9: Sprawdź, czy podany przez użytkownika wyraz jest palindomem (czytamy tak samo od początku jak i końca np. kajak).

Zadanie 10: Napisz program, który wydrukuje do konsoli 10 pierwszych liczb pierwszych rozdzielonych przecinkiem.

W rozwiązaniu użyj pętli while oraz instrukcji break.

Oczekiwany wynik:

2,3,5,7,11,13,17,19,23,29

Zadanie 11: Wykorzystując pętlę while policz ile trzeba czekać lat, aby zwrot z poniżej opisanej inwestycji co najmniej się podwoił (pod uwagę bierzemy tylko pełne okresy).

Oznaczenia:

n – liczba okresów (w latach)

pv – present value – wartość obecna

r – stopa procentowa (roczna)

fv – future value – wartość przyszła

Opis inwestycji:

pv = 1000

r = 0.04

Oczekiwany wynik:

Wartość przyszła: 2025.82 PLN. Liczba okresów: 18 lat

Zadanie 12:

Użyj algorytmu stochastycznego spadku wzdłuż gradientu do znalezienia minimum funkcji straty określonej wzorem: L(w) = w^2-4w.

Pochodna tej funkcji to dL/dw = 2*w-4

Przybliżona zasada działania algorytmu:

  1. Zaczynamy od punktu startowego należącego do dziedziny funkcji, weźmy:

w_0 = -1

  1. Określamy z góry maksymalną liczbę iteracji:

max_iters = 10000 

  1. Określamy zmienną, która pomoże nam kontrolować rozmiar kroku w kierunku minimum, ustalmy jej wartość na 1:

previous_step_size = 1

  1. Określamy wskaźnik uczenia:

learning_rate = 0.01

  1. Określamy precyzję jaka wystarczy do znalezienia minimum:

precision = 0.000001

  1. Definiujemy pochodną jako funkcję:

derivative = lambda w: 2 * w – 4

Aby znaleźć minimum funkcji L należy poruszać się wzdłuż kierunku przeciwnego do kierunku wyznaczanego przez gradient funkcji L aktualizując wartość w_0 następująco:

w_0 = w_0 – learning_rate * derivative(w_prev)

gdzie w_prev jest punktem z poprzedniej iteracji. Dla pierwszego korku jest to po prostu w_0.

Zbuduj pętlę while, która pozwoli zatrzymać działanie algorytmu w momencie, gdy minimum zostanie odnalezione z zakładaną przez nas wartością precyzji lub gdy przekroczymy maksymalną liczbę iteracji.

Wskazówka:

    Warunek w pętli while.

while previous_step_size > precision && iters < max_iters:

    Rozmiar poprzedniego skoku:

         previous_step_size=abs(w_0-w_prev)

Oczekiwany wynik:

Minimum lokalne w punkcie: 2.00

Zadanie 13:

Napisz program, który znajdzie wszystkie liczby dwucyfrowe podzielne przez 11. Wynik wydrukuj do konsoli w postaci wartości rozdzielonych przecinkiem.

Oczekiwany wynik:

11,22,33,44,55,66,77,88,99

Zadanie 14:

Napisz program, który znajdzie wszystkie liczby dwucyfrowe podzielne przez 11 oraz niepodzielne przez 3. Wynik wydrukuj do konsoli w postaci wartości rozdzielonych przecinkiem.

Oczekiwany wynik:

11,22,44,55,77,88

 

Funkcje, czyli metody

Metoda to zbiór instrukcji, który posiada nazwę, zbiór argumentów (ale nie musi posiadać argumentów) i znajduje się pomiędzy nawiasami {}. Pozwala na wyodrębnienie fragmentu kodu programu w celu uniknięcia powtórzeń i może być wielokrotnie wywoływana w kodzie.

W celu zdefiniowania metody należy podać jej nazwę, argumenty i instrukcje:

typ_zwracany nazwa_funkcji(argument1,argument2,argument3.........) 
{
instrukcja1; 
instrukcja2; 
instrukcja3......
}

Metody mogą zwracać konkretne wartości lub wyświetlać komunikat.

Aby wywołać metodę wystarczy podać jej nazwę z nawiasami!

przykladowa_nazwa_funkcji(); // wywołanie funkcji w kodzie

void

Jeżeli z założenia metoda ma nie zwracać wartości, a np. tylko wyświetlać komunikat to nadajemy jej typ void.

public static void nazwaMetody() {....}
public class Methods {
//tworzymy metodę hello
public static void hello(){
System.out.println("Hello World!");
}

//tworzymy metodę z argumentami
public static void metodaZargumentami(int l1, int l2){
System.out.println("Podano: " + l1 + " i " + l2);
}

public static void main(String[] args) {
//wywołujemy metodę hello
hello();

//wywołujemy metodę z argumentami
metodaZargumentami(10, 11);
}
}

return

return zwraca wartość, którą możemy później wykorzystać jako zmienną.

public class Methods {

//metoda zwracając wartość
public static int suma(int l1, int l2){
return l1+l2;
}

public static void main(String[] args) {

//wyświetlamy metodę zwracającą wartość
System.out.println(suma(1,1));
}
}

Zasięg zmiennych

Zmienne zadeklarowane wewnątrz metody, nie są dostępne poza nią, gdy metoda przestaje działać zmienne „znikają”.

Przeładowywanie metod

Można zadeklarować w kodzie wiele metod o tej samej nazwie, ale muszą się one różnić ilością, typem lub kolejnością argumentów. Wtedy kompilator sam będzie wiedział, którą z metod wybrać.

Przykładowe funkcje

Funkcja kantor przeliczająca wartość kupna EUR na PLN wg podanego kursu

public static float kantor(float kurs, float kwota){
return kurs * kwota;
}
System.out.println(kantor(3.1258f,12));

Funkcja, która za pomocą znaków * (gwiazdki) narysuje „koło”.

public static void rysujKolo(int n){
final int R = n;
for (int y =-R; y<=R; y++){
for (int x =-R; x<=R; x++){
if(x*x+y*y<=(R+0.3)*(R+0.3)) System.out.print("*");
else System.out.print(" ");
System.out.print(" ");
}
System.out.println("");
}
}
rysujKolo(5);

Funkcja, która generuje tablicę z losowymi liczbami i sortuje ją metodą przez wybór.

import java.util.Arrays;
import java.util.Random;


class Tbl {
//inicjujemy tablicę
int[] tab = new int[5];

//tworzymy metodę wypełniającą tablicę
public void wypelnij() {
Random rnd = new Random();
System.out.println("Wypełniona tablica: ");
for (int i = 0; i < 5; i++) {
tab[i] = rnd.nextInt();
System.out.println(tab[i]);
}
}

public void sortuj() {
System.out.println("Posortowana tablica funkcją sort(): ");
Arrays.sort(tab);
for (int t : tab) {
System.out.println(t);
}
}

public void selectionsort() {
int min, i, j, temp;
System.out.println("Tablica posortowana przez wybór: ");
for (i = 0; i < tab.length ; i++) {
min = i;
for (j = i + 1; j < tab.length; j++)
if (tab[j] < tab[min])
min = j;
temp = tab[min];
tab[min] = tab[i];
tab[i] = temp;
System.out.println(tab[i]);
}

}
}


public class SortowaniePrzezWybor {
public static void main(String[] args) {
Tbl newTable = new Tbl();
newTable.wypelnij();
newTable.sortuj();
newTable.selectionsort();
}
}

Ćwiczenia:

Ćwiczenie 1

Napisz funkcję, która przyjmuje 3 argumenty: 2 z nich to liczby, a trzecia to znak operatora arytmetycznego. Funkcja ma wykonać działanie na liczbach w zależności od wprowadzonego znaku np. 1,2,+ wykona dodawanie, 5,6,** wykona potęgowanie itd. Tam gdzie to możliwe wykorzystaj funkcje wbudowane.

 

Ćwiczenie 2

Napisz funkcję, która dla 3 losowo wygenerowanych liczb sprawdzi, czy są one pitagorejskie (czyli spełniają warunek: a2+b2=c2). Jeżeli tak to ma wyświetlić „Wylosowane liczby są liczbami pitagorejskimi”, w przeciwnym wypadku odwrotny komunikat.

 

Ćwiczenie 3

Napisz funkcję, który policzy deltę dla równania kwadratowego: 3x2 – 4x + 1 = 0

Oczekiwany wynik:

  1. Delta wynosi: 4

 

Ćwiczenie 4

Stwórz funkcję.

Dany jest ciąg arytmetyczny: an = 10 + 4n

Oblicz sumę 10-ciu początkowych wyrazów tego ciągu.

Oczekiwany wynik:

  1. Suma pierwszych 10 wyrazów ciągu wynosi: 320.0

 

Ćwiczenie 5

Stwórz funkcję.

Dany jest ciąg geometryczny: an = 8*2n-1

Oblicz sumę 6-ciu pierwszych elementów tego ciągu.

 Oczekiwany wynik:

  1. Suma pierwszych 6 wyrazów ciągu wynosi: 504.0

 

Ćwiczenie 6

Stwórz funkcję.

Dane jest równanie kwadratowe: x2 + 5x + 4 = 0

Korzystając z wzorów Viete’a oblicz sumę oraz iloczyn pierwiastków będących rozwiązaniem równania. Wynik wydrukuj do konsoli taki jak pokazano poniżej.

Oczekiwany wynik:

  1. x1 + x2 = -5.0
  2. x1x2 = 4.0

 

Ćwiczenie 7

Stwórz funkcję.

Wyznacz środek odcinka o końcach w punktach: A = (2, 4), B = (-4, 6).

Oczekiwany wynik:

  1. Środek odcinka AB: (-1.0, 5.0)

 

Ćwiczenie 8

Stwórz funkcję.

Oblicz odległość dwóch punktów A=(3, 2), B=(-1, -1).

Oczekiwany wynik:

  1. Odległość punktów A i B wynosi: 5.0

 

Ćwiczenie 9

Stwórz funkcję.

Znajdź pierwiastki równania kwadratowego: x2 + 5x + 4 = 0

Wynik wydrukuj do konsoli tak jak pokazano poniżej.

Oczekiwany wynik:

  1. x1 = -4.0
  2. x2 = -1.0

 

Ćwiczenie 10

Stwórz funkcję.

Oblicz średnią geometryczną następujących liczb: 4, 3, 4.5, 5.

Wynik wydrukuj do konsoli tak jak pokazano poniżej.

Oczekiwany wynik:

  1. Średnia geometryczna podanych liczb: 4.05

 

Ćwiczenie 11

Stwórz funkcję.

Dany jest nieskończony ciąg geometryczny: 1, 1/2, 1/4, 1/8…

Oblicz sumę tego ciągu. Wynik wydrukuj do konsoli tak jak pokazano poniżej.

Oczekiwany wynik:

  1. Suma ciągu wynosi: 2.0

 

Ćwiczenie 12

Stwórz funkcję.

Oblicz odchylenie standardowe (estymator obciążony) następującego zestawu danych: 10, 11, 9.

Wynik wydrukuj do konsoli tak jak pokazano poniżej.

Oczekiwany wynik:

  1. Odchylenie standardowe zestawu danych wynosi: 0.82

 

Ćwiczenie 13

Napisz funkcję, która wyświetli na ekranie wszystkie trójki pitagorejskie z zakresu podanego przez użytkownika. (np. dla zakresu od 1-10 sprawdzamy trójki: 1 2 3; 2 3 4; 3 4 5; 4 5 6 itd)

 

Ćwiczenie 14

Napisz funkcję obliczającą cenę brutto dla podanej ceny netto i stawki vat. Wyświetl: cena netto, wartość vat, cena brutto.