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>

Podobne dokumenty