Zadania do wykonania

ZADANIE-1. Generator liczb pseudolosowych (max 6 punktów)

Napisać program symulujący pewien rodzaj gry w kości.
W grze bierze udział 2 graczy. Każdy z nich dysponuje zadaną sumą pieniędzy przeznaczoną na grę.
Przed każdą rundą gracze "stawiają" jakąś sumę pieniędzy (wybraną w sposób losowy z przedziału 1 - max możliwa). Pulę zgarnia gracz, który wyrzuci większą liczbę oczek.
Gra jest kontynuowana do chwili, gdy któremuś z graczy zabraknie pieniędzy lub gdy czas symulacji przekroczy zadaną liczbę sekund.

Przed zakończeniem programu należy wyprowadzić na konsolę "historię"  gry.

Np. jeśli gracze dysponują kwotami 100 i 100 i obstawili 10 i 20 w 1 rundzie oraz 20 i 80 w drugiej, to historia gry wygląda następująco

Gracz A - kwota inicjalna 100
Gracz B - kwota inicjalna 100

Runda  Stawka GraczA-oczka  GraczB-oczka  GraczA-kwota GraczB-kwota  
1          10+20                     5                     4                 120                   80
2          20+80                     3                     1                 200                     0
 



ZADANIE-2. Operacje na bitach (4 punkty)


Napisać metodę, która zwraca tablicę pozycji na których znajdują się bity jedynkowe w liczbie typu int przekazanej jako argument metody.
 
 
ZADANIE-3. Sortowanie (6 punktów)

Stworzyć klasę Input ze statycznymi metodami getIntArray() oraz getDoubleArray(), które - odpowiednio - zwracają tablice liczb całkowitych i rzeczywistych, podawanych przez użytkownika jako ciagi znaków rozdzielonych spacjami w dialogu wejściowym.

Zapewnić możliwość poprawienia danych w przypadku błędu przy wprowadzaniu danych.

Pokazać działanie klasy w programie, który:
pozwala na wprowadzenie dwóch tablic: liczb całkowitych i liczb rzeczywistych, po czym wyprowadza obie tablice posortowane odpowiednio w porządku malejącym i rosnącym.

Rozważyć inną wersję programu gdzie dane do tablic pobierane są z pliku tekstowego.



ZADANIE- 4 (max. 8 punktów)


Stworzyć klasę MonthInYear, której obiekt reprezentują wybrany miesiąc w wybranym roku  i dostarczyć w niej metodę getDays() zwracającą liczbę dni miesiąca w roku.
Klasa ma działać dla dowolnych lat i miesięcy kalendarza gregoriańskiego i juliańskiego (poprzedzającego gregoriański).

Możliwy przykład użycia (jednocześnie wyjaśnia w jaki sposob obiekty klasy mają być tworzone i jak podawać dane dotyczące lat i miesięcy) :

int year = 2002;
String month = "styczeń";
MonthInYear monthObject = new MonthInYear(month, year);
int ldni =  .... // tu wywołanie metody getDays()
System.out.println("Miesiąc " + month + " w roku " + year + " zawiera " + ldni);

Oprócz metody getDays() dostarczyć w klasie metod:
W klasie testującej TestMonth:
  miesiąc rzymski . rok (np. XII.2002)
nazwa miesiąca rok
który miesiąc roku
+ dodatkowy komunikat jeżeli rok jest przestępny.

Powinno to wyglądac tak:

 ---- jeżeli podano właściwe dane i rok nie jest przestępnyrys

 

 




---- jeżeli podano własciwe dane i rok jest przestępnyrys









 

--- jeżeli podano niewłaściwe dane (np. stuczeń, zamiast styczeń) - komunikat o błędzie (też w okienku dialogowym).

Użyć metod createMonth() i showInfo() w pętli iteracyjnej kończącej się, gdy użytkownik zrezygnuje z wprowadzania danych.

Informacja o latach przestępnych:
Rok przestępny ma 366 dni i luty w takim roku ma dni 29.
Rok jest przestępny, gdy dzieli się przez 4.
Ale -  od momentu wprowadzenia kalendarza gregoriańskiego (październik 1582) - rok nie jest przestępny, jeśli dzieli się przez 100. Ale - mimo wszystko - w kalendarzu gregoriańskim lata, dzielące się przez 100, będą przestępne, jeśli dzielą się przez 400.


ZADANIE- 5 (max. 6 punktów)

Zdefiniuj klasę Sequence a w niej zdefinuj wersje:

metody int sequence(int n) dostarczającą n-ty wyraz ciągu określonego rekurencyjnie:  

a(0) = 1, a(1) = -3 ;  a(n) = 6·a(n-1) - 9·a(n-2)  dla  n>=2

 i porównaj czasy realizacji każdej z nich dla dużej liczby n.  

Wskazówka: Do pomiaru czasu przebiegu fragmentu programu wykorzystać funkcję System.currentTimeMillis();