Scala (cz. 1)
Transkrypt
Scala (cz. 1)
Języki i środowiska przetwarzania danych rozproszonych (Scala, lab. 1) 1. (0.5 pkt) Dany jest string postaci "-3 + 4 - 1 + 1 + 13 - 5 + 6", tj. liczby całkowite, między nimi operator + lub -, do tego rozdzielające spacje. Policz wartość tego wyrażenia korzystając z mechanizmu pasowania wzorców (ang. pattern matching). Jeśli zamiast poprawnego operatora jest inny napis (np. # lub ABC), to wtedy należy rzucić stosowny wyjątek. 2. (0.75 pkt) Napisz funkcję sprawdzającą, czy przekazana liczba całkowita (Int) jest doskonała. Liczba doskonała to taka, dla której suma jej dzielników właściwych równa jest tej liczbie. Np. 6 = 1 + 2 + 3. Algorytm: dzielimy daną liczbę n przez liczby mniejsze od pierwiastka z niej, w przypadku dzielenia bez reszty dodajemy też dzielnik „dopełniający” – tj. jeśli np. 30 dzieli się przez 2, to „w jednym kroku” dodajemy do sumy 2 oraz 30 / 2 = 15. Uważaj na liczby będące kwadratami (np. 16) – zastanów się jak je poprawnie obsłużyć. Przetestuj tę funkcję korzystając z println(…) oraz assert(…). Wstaw do wektora wszystkie liczby doskonałe < 10000, tj. 6, 28, 496, 8128 i przetestuj na nich poprawność swojej funkcji przy użyciu pojedynczej asercji. 3. (0.75 pkt) Zaprojektuj klasę Poseł zawierającą następujące inf. o pośle: - imię, - nazwisko, - wiek, - partia (PiS, PO... – jako scala.Enumeration), - funkcja (marszałek, wicemarszałek, szef klubu lub brak funkcji – jako String), - udział w komisjach (żadnej, jednej lub kilku). Zakładamy następujące komisje: ds. Edukacji, Kultury, Sportu, UE – reprezentowane jako scala.Enumeration). Pamiętaj o metodzie toString. Następnie utwórz kolekcję co najmniej 5 posłów i przefiltruj ją wg predykatów. Testy: - posłowie w wieku < 40 lat, - posłowie o nazwisku na literę z zakresu D..K, - posłowie uczestniczący w danej komisji, - posłowie uczestniczący w co najmniej 2 komisjach, - marszałek (sprawdź czy zwrócona kolekcja ma co najwyżej 1 element), - złożenie (w sensie AND) dwóch pierwszych predykatów. Wypisz dane posłów (toString) ze zwróconej kolekcji. 4. (0.5 pkt) Napisz i przetestuj funkcję, która przyjmuje Vector stringów i zwraca string łączący elementy Vectora w następujący sposób: - jeśli mamy 0 elementów, to na wyjściu jest "{}", - jeśli jest 1 element (np. A), to na wyjściu jest "{A}", - jeśli są 2 elementy (np. A, B), to na wyjściu jest "{A i B}", - jeśli są 3+ elementy (np. A, B, C), to na wyjściu jest "{A, B i C}" (jeśli więcej niż 3 elementy, to oczywiście przecinki pomiędzy nimi, za wyjątkiem ostatnich dwóch). Wykorzystaj mechanizm dopasowywania wzorców. 5. (0.75 pkt) Napisz w Scali funkcję sprawdzającą poprawność podanego numeru PESEL. Algorytm: https://pl.wikipedia.org/wiki/PESEL Dodatkowo, jeśli PESEL jest poprawny, wypisz dane (data urodzenia, płeć) jego posiadacza. 6. XML (0.75 pkt) Dany jest poniższy plik studenci.xml. Wygeneruj następujące pliki XML: zero.xml, one.xml, two.xml, three.xml, many.xml, zawierające podzbiory poniższych studentów (ale element główny musi nazywać się <studenci>, w skrajnym przypadku może być on pusty) w zależności od liczby znajomych (tj. jeśli dany student ma 2 znajomych, to zapisany będzie do pliku two.xml itp. many.xml dotyczy 4 lub więcej znajomych). W obrębie danego pliku decyduje rok urodzenia studenta (kolejność od najstarszych), czyli np. w pliku many.xml będzie Kamil Weteran, a za nim Jakub Bolecki. Użyj funkcjonalności Scali dotyczących przetwarzania XML. <studenci> <student ur="1992"> <imie_nazwisko>Jan Kowalski</imie_nazwisko> <znajomy>X</znajomy> <znajomy>Y</znajomy> </student> <student ur="1995"> <imie_nazwisko>Onufry Odludek</imie_nazwisko> </student> <student ur="1991"> <imie_nazwisko>Magda Malinowska</imie_nazwisko> <znajomy>X</znajomy> <znajomy>Z</znajomy> <znajomy>Z ZZZ</znajomy> </student> <student ur="1992"> <imie_nazwisko>Jakub Bolecki</imie_nazwisko> <znajomy>A</znajomy> <znajomy>B</znajomy> <znajomy>C</znajomy> <znajomy>D</znajomy> <znajomy>E</znajomy> </student> <student ur="1994"> <imie_nazwisko>Marcin Woźniak</imie_nazwisko> <znajomy>A</znajomy> <znajomy>C</znajomy> </student> <student ur="1992"> <imie_nazwisko>Agnieszka Kot</imie_nazwisko> <znajomy>B</znajomy> </student> <student ur="1988"> <imie_nazwisko>Kamil Weteran</imie_nazwisko> <znajomy>A</znajomy> <znajomy>B</znajomy> <znajomy>C</znajomy> <znajomy>E</znajomy> <znajomy>X</znajomy> <znajomy>Y</znajomy> </student> </studenci>