Monika Dekster

Laboratorium 4: Tablice 2D, klasy

Zadania:

  1. Dana jest macierz 9X9 reprezentująca planszę Sudoku. Napisz program, który sprawdza, czy plansza jest poprawna, czyli:
    • każdy wiersz zawiera cyfry 1-9 bez powtórek
    • każda kolumna zawiera cyfry 1-9 bez powtórek
    • każdy z 9 kwadratów 3X3 zawiera cyfry 1-9 bez powtórek
    Plansza ma być poprawna, ale niekoniecznie rozwiązywalna. Należy uwzględnić tylko wypełnione kratki.
  2. Przykładowa plansza:

    Image Sudoku

    Odpowiedź: plansza jest poprawna

  3. Gra w życie:

    Gra toczy się na planszy o rozmiarze nXn podzielonej na nXn kwadratowych komórek. Każda komórka ma ośmiu "sąsiadów", czyli komórki przylegające do niej bokami i rogami. Każda komórka może znajdować się w jednym z dwóch stanów: może być albo "żywa" (włączona), albo "martwa" (wyłączona). Stany komórek zmieniają się w pewnych jednostkach czasu. Stan wszystkich komórek w pewnej jednostce czasu jest używany do obliczenia stanu wszystkich komórek w następnej jednostce. Po obliczeniu wszystkie komórki zmieniają swój stan dokładnie w tym samym momencie. Stan komórki zależy tylko od liczby jej żywych sąsiadów.

    Reguły gry według Conwaya:

    1. Martwa komórka, która ma dokładnie 3 żywych sąsiadów, staje się żywa w następnej jednostce czasu (rodzi się)
    2. Żywa komórka z 2 albo 3 żywymi sąsiadami pozostaje nadal żywa; przy innej liczbie sąsiadów umiera (z "samotności" albo "zatłoczenia").

    Napisz program symulujący stan gry w kolejnych chwilach czasu. Rozmiar planszy n jest podany parametrem programu. Stan początkowy generowany jest losowo z udziałem "żywych" komórek 30%. Kolejne stany wyświetlają się po naciśnięciu Enter.

  4. Napisz klasę Polynomial opisującą wielomian n-tego stopnia.

    Pola klasy to:

    1. int n - stopień wielomianu
    2. double[] coefficients - tablica współczynników wielomianu skonstruowana tak, że coefficients[0] oznacza wyraz wolny, coefficients[1] jest współczynnikiem przy pierwszej potędze x itd.

    Zaimplementuj następujące funkcje składowe klasy:

    1. Konstruktor, przyjmujący jeden parametr typu całkowitego (określający stopień wielomianu) powinien zainicjalizować współczynniki wielomianu wartościami losowymi
    2. String toString()
    3. Polynomial derivative() - zwraca wielomian będący pochodną argumentu
    4. Polynomial add(Polynomial p) - zwraca sumę 2 wielomianów
    5. Polynomial multiply(Polynomial p) - zwraca iloczyn 2 wielomianów

    Funkcja main() tworzy dwa obiekty typu Polynomial, p1 i p2, a następnie drukuje współczynniki wielomianów:

    1. p1(x)
    2. p2(x)
    3. p1'(x)
    4. p2'(x)
    5. p1(x) + p2(x)
    6. p1(x) * p2(x)
  5. Zaimplementuj klasę Student, zawierającą następujące pola:

    1. id (string składający się z dokładnie 6 cyfr bez wiodącego 0
    2. firstName
    3. lastName
    4. faculty
    5. kolekcję par (subject, mark), ocena ma być liczbą całkowitą z przedziału $[2,\, 5]$
    6. averageMark

    Napisz odpowiedni konstruktor, gettery, settery. Konstruktor i settery mają sprawdzać poprawność danych. Zaimplementuj metody:

    1. calculateAverage()
    2. changeMark()
    3. toString()

    Metoda main() powinna stworzyć tablicę kilku studentów (wykorzystując losowe wartości), wypisać ją i przetestować pozostałe metody

  6. Napisz program, który definiuje klasę Vector3D a następnie klasę Tetrahedron (definiującą czworościan o krawędziach danych przez trzy wektory - obiekty składowe klasy Vector3D).

    Klasa Vector3D powinna zawierać:

    1. trzy współrzędne typu double
    2. konstruktor, inicjalizujący te współrzędne
    3. funkcję toString()
    4. funkcję obliczającą iloczyn skalarny dwóch wektorów
    5. funkcję obliczającą iloczyn wektorowy dwóch wektorów

    Iloczyn wektorowy:

    $$\begin{aligned}\mathbf {a\times b} &={\begin{vmatrix}a_{y}&a_{z}\\b_{y}&b_{z}\end{vmatrix}}\mathbf {i} -{\begin{vmatrix}a_{x}&a_{z}\\b_{x}&b_{z}\end{vmatrix}}\mathbf {j} +{\begin{vmatrix}a_{x}&a_{y}\\b_{x}&b_{y}\end{vmatrix}}\mathbf {k} \\&=(a_{y}b_{z}-a_{z}b_{y})\mathbf {i} -(a_{x}b_{z}-a_{z}b_{x})\mathbf {j} +(a_{x}b_{y}-a_{y}b_{x})\mathbf {k} ,\end{aligned}$$ Klasa Tetrahedron powinna zawierać:
    1. trzy wektory definiujące krawędzie typu Vector3D
    2. konstruktor
    3. funkcję obliczającą objętość czworościanu ze wzoru: $V = |(v_1 \times v_2) \cdot v_3| / 6$
    4. funkcję drukującą współrzędne wektorów składowych i objętość czworościanu (wyznaczoną przez funkcję z poprzedniego punktu)