czwartek, 25 sierpnia 2016

Oferta pracy: Asystent ds. Marketingu Technicznego w Vertabelo Academy

Firma, w której pracuję szuka studentów do pomocy w promocji naszego produktu, Vertabelo. 

Vertabelo to usługa pozwalająca na wizualne projektowanie baz danych w chmurze bezpośrednio przez przeglądarkę internetową. Na naszej stronie prowadzimy blog o bazach danych, który dziennie odwiedza ponad 3 tysiące osób. Ponadto tworzymy interaktywne kursy języka SQL w serwisie Vertabelo Academy.

Szukamy osób władających językiem angielskim, które pomogą nam w prowadzeniu bloga technicznego Vertabelo oraz w innych działaniach marketingowych.

Zakres obowiązków

  • Pomoc w przygotowaniu nowych kursów w Vertabelo Academy (formatowanie przygotowanych treści w HTML, testowanie nowych kursów).
  • Wsparcie w procesie przygotowania artykułów na blog (komunikacja z autorami bloga, edytorami i innymi osobami zaangażowanymi w przygotowanie treści bloga).
  • Aktualizacja treści opublikowanych na blogu.
  • Redagowanie krótkich ogłoszeń o nowych funkcjonalnościach aplikacji.

Wymagane kwalifikacje

  • Znajomość zagadnień związanych z wykorzystaniem baz danych.
  • Podstawowa znajomość języka HTML.
  • Podstawowa znajomość narzędzi deweloperskich.
  • Podstawowa znajomość systemu Linux od strony użytkownika.
  • Dobra znajomość języka angielskiego.

Dodatkowym atutem będzie:

  • Prowadzenie własnego bloga.
  • Aktywność w serwisach społecznościowych dla programistów (np. Twitter, Stackoverflow, Github).

Warunki zatrudnienia

  • Umowa-zlecenie.
  • Wynagrodzenie: 3000-4000 zł brutto za pełny etat.
  • Minimum pół etatu.
  • Miejsce pracy: Warszawa, okolice metra Wierzbno.
Oferty prosimy przesłać na adres career@vertabelo.com z dopiskiem: Asystent ds. Marketingu Technicznego

Na zgłoszeniu proszę umieścić klauzulę o następującej treści: „Wyrażam zgodę na przetwarzanie moich danych osobowych dla potrzeb niezbędnych do realizacji procesu rekrutacji (podstawa prawna DZ. U. Nr 133, poz. 883)”.

Szczegółowe ogłoszenie.

wtorek, 7 czerwca 2016

Tydzień 14: egzamin, JavaFX

Proszę o sprawdzenie, czy oceny za małe zadania (zwłaszcza zadanie z szybkością programów w Javie) zgadza się z tym, co Państwo do mnie wysyłali. 

Ćwiczenia

Żaba (egzamin z roku 2008/2009).
Egzamin z PO (egzamin z roku 2009/2010). 

Laboratorium

  1. Napisz aplikację JavaFX, która wyświetla okienko z napisem HelloWorld.
  2. Pobierz kod aplikacji wyświetlającej prosty formularz logowania. Zmodyfikuj tę aplikację w taki sposób, aby po wpisaniu nazwy użytkownika i hasła aplikacja zastąpiła formularz logowania komunikatem "Welcome, <Nazwa użytkownika>".
  3. Dodaj do aplikacji prostą walidację: poprawne hasło to odwrócona nazwa użytkownika. Jeśli użytkownik wpisze niepoprawne hasło, aplikacja powinna wyświetlić odpowiedni komunikat o błędzie.

wtorek, 31 maja 2016

Tydzień 13: strumienie

Ćwiczenia

 Portal sprzedaży nieruchomości - egzamin z roku 2014/2015.

Laboratorium

  1. Napisz program, który wypisuje na ekran zawartosc pliku tekstowego. Nazwę pliku do wypisania wczytaj ze standardowego wejścia za pomocą odpowiednich strumieni.
  2. Napisz program, który dla podanego pliku wypisze, z ilu bajtów składa się ten plik.
  3. Napisz program, który dla danego pliku tekstowego wypisze liczbę znaków oraz liczbę białych znaków w tym pliku.
  4. (a) Napisz program, który kopiuje znak po znaku pliki tekstowe.
    (b) Zmień program z poprzedniego punktu tak, aby czas kopiowania był mierzony i wypisywany na konsole. Sprawdź, jaki wpływ na efektywność ma użycie buforowania.
  5. Napisz program, który odwróci zawartość pliku tekstowego w nastepujący sposób:
    (a) Odwróci kolejność wierszy.
    (b) W każdym wierszu odwróci kolejność słów.
    (c) W nazwie pliku odwróci kolejność liter, pomijając ewentualne rozszerzenie .txt.
  6. Napisz Iterator<String>, w którym metoda next() zwraca kolejne linie wczytane z Readera. Konstruktor ma dostawać obiekt Readera. Po wczytaniu wszystkiego Reader ma zostać zamknięty. Zauważ, że Iterator nie może rzucać wyjątków IOException. Niech przechwyci taki wyjątek i pozwoli normalnie iterować po wszystkich poprawnie wczytanych liniach.
    Wskazówka: BufferedReader ma metodę readLine(); zwraca ona null, gdy napotka koniec pliku.
    Wskazówka 2: aby hasNext() działał poprawnie, trzeba zawsze mieć wczytana i spamiętaną jedną linie w przód.

wtorek, 24 maja 2016

Tydzień 12: kolekcje cz. 2

Ćwiczenia

MasterMind to gra planszowa dla dwóch osób. Gracze mają do dyspozycji pionki w sześciu kolorach. Pierwszy gra układa z pionków kod czteroelementowy, kolory w kodzie mogą się powtarzać. Zadaniem drugiego gracza jest odgadnięcie kodu wybranego przez pierwszego gracza.
Drugi gracz ma parzystą liczbę prób (zwykle 10). W każdej próbie gracz podejmuje próbę odgadnięcia kodu wybranego przez przeciwnika. Pierwszy gracz ocenia próbę drugiego gracza za pomocą białych i czarnych pionków. Za każdy pionek we właściwym kolorze i na właściwej pozycji przyznaje czarny pionek. Za każdy pionek we właściwy kolorze, ale na niewłaściwej pozycji przyznaje biały pionek. Następnie drugi gracz ma prawo podjąć kolejną próbę.
Zadanie: zaimplementować jeden krok algorytmu grającego w MasterMind. Zaimplementujemy algorytm, który trzyma zbiór możliwych jeszcze układów. Zgadywanie polega na wybraniu ze wszystkich możliwych jeszcze układów takiego, który najlepiej dzieli ten zbiór (generuje podział minimalizujący wielkość największego zbioru możliwych układów po zapytaniu). Przy parametrach standardowego MasterMinda taki algorytm radzi sobie bez problemu.

Laboratorium

  1. Uruchom programy Zagadka.java i Zagadka2.java. Wyjaśnij, dlaczego programy tak się zachowują. Co trzeba zmienić, żeby programy zachowywały się zgodnie z oczekiwaniami autora?
  2. Anagramy to słowa, które składają się z tych samych liter, ale w różnej kolejności. Napisz program, który dla danej listy słów wypisze wszystkie grupy anagramów pojawiające się na tej liście.
  3. Napisz własną implementację listy wraz z iteratorem. Twoja lista powinna mieć nastepujące operacje:
    • dodawanie nowego elementu,
    • rozmiar,
    • test niepustości,
    • iterowanie przy pomocy pętli foreach.
    Wskazówki:
    • Pętlą foreach można iterować po obiektach implementujących interfejs Iterable.
    • Do implementacji iteratora trzeba użyć klas wewnętrznych (ang. inner classes). Klasa wewnętrzna ma dostęp do prywatnych składowych otaczającego obiektu.
    • Warto przeczytać rozdział o klasach wewnętrznych z tutorialu na stronie Oracle.
    • Ściągawkę, jak napisać własny iterator można znaleźć w klasie java.util.AbstractList. W Eclipse trzeba mieć podpięte źródła Javy

Praca domowa nr 11 (dodatkowa)

Do wyboru: zadanie 2 lub zadanie 3.

niedziela, 15 maja 2016

Tydzień 11: kolekcje

Z powodu wyjazdu na konferencję w tym tygodniu nie będzie mnie na zajęciach.

Ćwiczenia

Na ćwiczenia proszę rozproszyć się po innych grupach. Ćwiczenia z PO o godzinie 12:
  • sala 3130, Kazimierz Grygiel
  • sala 3140, Marcin Pilipczuk
  • sala 3150, Marcin Dziubiński 
  • sala 3160, Krzysztof Szafran

Laboratorium

  1.  Napisz program, który dla danego pliku tekstowego wypisze następujące informacje:
    • z ilu słów składa się plik,
    • słowo na pozycji 45,
    • z ilu różnych słów składa się plik,
    • wszystkie słowa pliku w kolejności alfabetycznej (każde słowo na liście pojawia się tylko raz),
    • dla każdego słowa, ile razy to słowo występuje w pliku,
    • wszystkie słowa, które mają więcej niż 6 liter, w kolejności alfabetycznej, bez powtórzeń.
    Do rozwiązania zadania należy użyć odpowiednich kolekcji.
    Potrzebne informacje o kolekcjach można znaleźć w notatkach z wykładu oraz rozdziale o kolekcjach w tutorialu Javy.
  2. Anagramy to słowa, które składają się z tych samych liter, ale w różnej kolejności. Napisz program, który dla danej listy słów wypisze wszystkie grupy anagramów pojawiające się na tej liście.

Praca domowa nr 10

Zadanie 2.

Rozwiązanie należy wysłać mailem. W temacie wiadomości powinien znaleźć się ciąg PO oraz numer pracy domowej (tutaj: 10). Pliki źródłowe powinny być spakowane zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora.

Termin oddania: 24.05.2016 r. 

środa, 4 maja 2016

Tydzień 10: typy uogólnione

Ćwiczenia

  1. Zaimplementuj stos parametryzowany typem elementów przechowywanych na stosie.
  2. Napisz własne drzewo BST, parametryzowane typem elementów przechowywanych w drzewie. Porządek powinien być zadany jako java.util.Comparator lub java.util.Comparable.
  3. Napisz procedurę sortującą tablicę dowolnego typu. Porządek definiujemy jak w zadaniu 2.

Laboratorium

  1. Zaimplementuj drzewo BST przechowujące wartości tego samego typu. Algorytm porównujący może być dostarczany w postaci (do wyboru) Comparatora lub interfejsu Comparable. Twoje drzewo powinno udostępniać nastepujące operacje:
    • tworzenie pustego drzewa,
    • dodawanie elementu do drzewa,
    • sprawdzenie, czy drzewo zawiera wskazany element,
    • wypisanie wszystkich elementów drzewa w kolejności rosnącej.
    Napisz prostą aplikację testującą działanie Twojego drzewa.
  2. Dla chętnych: zadanie o ONP z użyciem typów generycznych.

Praca domowa nr 9

Zadanie o BST.

Rozwiązanie należy wysłać mailem. W temacie wiadomości powinien znaleźć się ciąg PO oraz numer pracy domowej (tutaj: 9). Pliki źródłowe powinny być spakowane zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora.

Termin oddania: 17.05.2016 r. 

niedziela, 24 kwietnia 2016

Tydzień 9: klasówka treningowa, wyjątki

Przypomnienie: za tydzień na wykładzie jest klasówka.

Ćwiczenia

Głosowanie. Klasówka z roku 2013/2014.
Rozgrywki piłkarskie. Klasówka z roku 2012/2013.

Laboratorium 

  1. Zaprojektuj interfejs Stos reprezentujący stos liczb całkowitych.
  2. Zaimplementuj interfejs Stos za pomocą tablicy liczb całkowitych. Rozmiar tablicy ma być podany w konstruktorze. Twoja implementacja powinna rzucać odpowiedni wyjątki (trzeba je zdefiniować) przy próbie zdjęcia elementu z pustego stosu i położenia elementu na przepełniony stos.
  3. Napisz program, który wczytuje wyrażenie w odwrotnej notacji polskiej (z działaniami +, −, *, /) i wylicza jego wartość używając stosu z poprzedniego zadania.
W tym tygodniu nie ma pracy domowej.

wtorek, 19 kwietnia 2016

Tydzień 8: klasówka treningowa, interfejsy

Ćwiczenia

Majówka - klasówka z roku 2013/2014.

Laboratorium

  1. Zaimplementuj drzewo BST przechowujące liczby całkowite. Chcemy uniknąć dużej liczby testów (czy jest lewe dziecko, czy jest prawe dziecko,...) w kodzie. Jak będziesz reprezentować puste drzewo? Wskazówka: użyj polimorfizmu.
  2. Kolejka priorytetowa to struktura danych, do której można wstawiać elementy i z niej je pobierać. Kolejność pobierania elementów zależy od priorytetu tych elementów, najpierw wydawane są elementy o wyższym priorytecie. Zdefiniuj i zaimplementuj interfejs KolejkaPriorytetowa z operacjami:
    • void dodaj(int priorytet, String s) – dodaje do kolejki nowy napis z zadanym priorytetem.
    • String[] pobierz() – pobiera z kolejki wszystkie napisy obiekty o najmniejszej wartości priorytetu (moze byc ich wiele, stad wynikiem jest tablica). Pobrane elementy są usuwane z  kolejki.
    • boolean czyPusta() – wynikiem jest true wtedy i tylko wtedy, gdy w kolejce nie ma już elementów.
    Zdefiniuj klasę realizującą ten interfejs za pomocą jednej z metod: lista posortowana, kopiec, drzewo BST. Napisz program, który wczyta ze standardowego wejścia kilka napisów, a następnie wypisze wczytany zbiór posortowany (za pomocą KolejkiPriorytetowej) ze względu na liczbę wystąpień litery a w napisie. 

Praca domowa nr 8

Zadanie 1.

Rozwiązanie należy wysłać mailem. W temacie wiadomości powinien znaleźć się ciąg PO oraz numer pracy domowej (tutaj: 8). Pliki źródłowe powinny być spakowane zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora.

Film: Inheritance, Polymorphism, & Testing

Ciekawy wykład o programowaniu bez if-ów, między innymi na przykładzie wyrażeń.

wtorek, 12 kwietnia 2016

Tydzień 7: wyrażenia cz. 2 + duże zadanie zaliczeniowe

Ćwiczenia

Kontynuacja zadania z poprzedniego tygodnia:
Chcemy zdefiniować klasę obiektów reprezentujących wyrażenia arytmetyczne jednej zmiennej rzeczywistej (x). Interesują nas następujące operacje:

  • policzenie wartości w zadanym punkcie,
  • policzenie (symboliczne) pochodnej,
  • policzenie (numeryczne) całki oznaczonej,
  • wypisywanie,
  • upraszczanie.
Wyrażenia mogą zawierać:
  • stałe liczbowe,
  • wystąpienia zmiennej x,
  • operatory arytmetyczne (dwuargumentowe): +, -, *, /, ...
  • funkcje jednoargumentowe: sin, cos, lg, ...
  • nawiasy okrągłe.
 Laboratorium jest odwołane (Olimpiada Informatyczna)

Zadanie domowe nr 1

W moodle'u pojawiła się treść pierwszego dużego zadania zaliczeniowego.
Moje wymagania formalne co do rozwiązania:
  • Proszę przysłać wyłącznie pliki źródłowe, z zachowaniem struktury pakietów. Proszę nie przysyłać projektów z Eclipse ani plików .class.
  • Plik z rozwiązaniem powinien mieć nazwę postaci ImięNazwisko.zip
Rozwiązania należy wysłać za pomocą moodle'a. 

środa, 6 kwietnia 2016

Tydzień 6: wyrażenia cz. 1

Ćwiczenia

Chcemy zdefiniować klasę obiektów reprezentujących wyrażenia arytmetyczne jednej zmiennej rzeczywistej (x). Interesują nas następujące operacje:

  • policzenie wartości w zadanym punkcie,
  • policzenie (symboliczne) pochodnej,
  • policzenie (numeryczne) całki oznaczonej,
  • wypisywanie.
Wyrażenia mogą zawierać:
  • stałe liczbowe,
  • wystąpienia zmiennej x,
  • operatory arytmetyczne (dwuargumentowe): +, -, *, /, ...
  • funkcje jednoargumentowe: sin, cos, lg, ...
  • nawiasy okrągłe.

 Laboratorium

  1. Bitwa robotów wojennych odbywa się na polu bitwy reprezentowanym przez planszę o rozmiarze 8 na 8. Uczestniczą w niej dwa roboty, których celem jest zniszczenie się nawzajem.
    Początkowo roboty ustawione są tak, jak na poniższym diagramie, gdzie 'vA' oraz '^B' reprezentują roboty A i B skierowane odpowiednio na południe (v) i na północ (^).
     _ _ _ _ _ _ _ _
     _ _ _ vA_ _ _ _
     _ _ _ _ _ _ _ _
     _ _ _ _ _ _ _ _
     _ _ _ _ _ _ _ _

     _ _ _ _ _ _ _ _

     _ _ _ _ ^B_ _ _

     _ _ _ _ _ _ _ _

    Zaprojektuj klasy reprezentujące pole bitwy oraz roboty. Zaimplementuj wypisywanie aktualnego stanu pola bitwy.
  2. (Ciąg dalszy zadania 1) Każda tura bitwy składa się z akcji wykonywanych kolejno przez roboty A i B. Możliwe akcje dla każdego robota:
    • obrót w lewo lub w prawo
    • krok do przodu. Wykonanie jest możliwe tylko wtedy, gdy docelowe pole jest wolne.
    • strzał. Robot strzela przed siebie laserem mającym zasięg wzdłuż całej linii.
  3. Wszystkie akcje odbywają się względem aktualnego kierunku robota. Jeżeli w wyniku strzału w jego zasięgu znalazł się robot-przeciwnik, zostaje on zniszczony i gra kończy się.

    Bitwa trwa 20 tur lub do czasu, gdy jeden robot zniszczy drugiego.

    Do klas z poprzedniego zadania dopisz symulację bitwy robotoów. Każda akcja robota powinna zostać wypisana na ekranie. Program powinien wypisywać stan pola bitwy po każdej turze. Zadbaj o właściwy podział odpowiedzialności między klasami.
  4. (Kontynuacja zadania 2) Bitwa robotów - pełna treść klasówki z roku 2007/2008

Praca domowa nr 6

Do wyboru: zadanie 1+2 lub zadanie 1+3. Zadanie 1 musi być zrobione osobno.

Rozwiązanie należy wysłać mailem. W temacie wiadomości powinien znaleźć się ciąg PO oraz numer pracy domowej (tutaj: 6). Pliki źródłowe powinny być spakowane zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora

wtorek, 29 marca 2016

Tydzień 5: dziedziczenie

Ćwiczenia

  1. Program graficzny umożliwia rysowanie następujących figur geometrycznych: prostokąt, koło, trójkąt, równoległobok, sześciokąt. Zaprojektować klasy reprezentujące figury geometryczne. Zaimplementować metodę liczącą pole powierzchni tablicy figur.
  2. Zaprojektować i zaimplementować klasę Student, przechowującą imię, nazwisko, nr indeksu, nr roku, listę przedmiotów studenta. Zaprojektować konstruktory oraz inne metody.
  3. Wydzielić ze Studenta nadklasę Osoba, z odpowiednimi atrybutami, konstruktorami i metodami.

Laboratorium

Zaprojektuj hierarchię klas opisujących pojazdy komunikacji miejskiej. Wyraź w tej hierarchii następujące fakty:

  • wszystkie pojazdy komunikacji miejskiej (k. m.) są pojazdami,
  • komunikacja miejska używa tramwajów i autobusów,
  • pojazdy są garażowane w zajezdniach,
  • każdy pojazd zna swoją szybkość maksymalną,
  • każdy pojazd k. m. zna swój numer,
  • każdy pojazd k. m. zna swoją zajezdnię,
  • każdy tramwaj jest zestawem 1 do 3 wagonów (i wie, z ilu wagonów się składa),
  • każdy autobus wie, ile zużył paliwa w bieżącym miesiącu,
  • każda zajezdnia zna swoja nazwę,
  • każda zajezdnia wie, jakie pojazdy do niej należą.
Każdy pojazd musi umieć podać swój opis w postaci napisu. Opis ma zawierać wszystkie informacje, które zna dany pojazd (np. numer, czy szybkość maksymalną). Opis zajezdni to nazwa zajezdni i opisy poszczególnych pojazdów.

Praca domowa nr 5

Zadanie o tramwajach. Rozwiązanie należy wysłać mailem. W temacie wiadomości powinien znaleźć się ciąg PO oraz numer pracy domowej (tutaj: 5). Pliki źródłowe powinny być spakowane zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora.

Oferta pracy: Asystent Redaktora Naczelnego

Firma, w której pracuję szuka studentów do pomocy w promocji naszego produktu, Vertabelo. 

Vertabelo to usługa pozwalająca na wizualne projektowanie baz danych w chmurze bezpośrednio przez przeglądarkę internetową. Na naszej stronie prowadzimy blog o bazach danych, który dziennie odwiedza ponad 3 tysiące osób. Ponadto tworzymy interaktywne kursy języka SQL w serwisie Vertabelo Academy.

Szukamy osób władających językiem angielskim, które pomogą nam w prowadzeniu bloga technicznego Vertabelo oraz w innych działaniach marketingowych.

Zakres obowiązków

  • Wsparcie w procesie przygotowania artykułów na blog (komunikacja z autorami bloga, edytorami i innymi osobami zaangażowanymi w przygotowanie treści bloga).
  • Aktualizacja treści opublikowanych na blogu.
  • Pomoc w przygotowaniu nowych kursów w Vertabelo Academy (formatowanie przygotowanych treści w HTML, testowanie nowych kursów).
  • Redagowanie krótkich ogłoszeń o nowych funkcjonalnościach aplikacji.

Wymagane kwalifikacje

  • Znajomość zagadnień związanych z wykorzystaniem baz danych.
  • Podstawowa znajomość języka HTML.
  • Podstawowa znajomość narzędzi deweloperskich.
  • Podstawowa znajomość systemu Linux od strony użytkownika.
  • Dobra znajomość języka angielskiego.

Dodatkowym atutem będzie:

  • Prowadzenie własnego bloga.
  • Aktywność w serwisach społecznościowych dla programistów (np. Twitter, Stackoverflow, Github).

Warunki zatrudnienia

  • Umowa-zlecenie.
  • Wynagrodzenie: 3000-4000 zł brutto za pełny etat.
  • Minimum pół etatu.
  • Miejsce pracy: Warszawa, okolice metra Wierzbno.
Oferty prosimy przesłać na adres career@vertabelo.com

Na zgłoszeniu proszę umieścić klauzulę o następującej treści: „Wyrażam zgodę na przetwarzanie moich danych osobowych dla potrzeb niezbędnych do realizacji procesu rekrutacji (podstawa prawna DZ. U. Nr 133, poz. 883)”.

Szczegółowe ogłoszenie.

poniedziałek, 21 marca 2016

Tydzień 4: klasy

Ćwiczenia

  1. Zdefiniuj klasę Pracownik (podobnie do klasy Osoba z wykładu, dodając jeszcze tekstową informację o zajmowanym przez pracownika stanowisku). Następnie zdefiniuj klasę Firma, która przechowuje w tablicy spis wszystkich pracowników (możesz założyć, że liczba pracowników nie przekracza 100). Zdefiniuj metody dodawania nowych pracowników do firmy oraz wypisywania aktualnego spisu pracowników. Zastanów się, jak przy tym ostatnim zadaniu rozdzielić odpowiedzialności pomiędzy obie klasy.
  2. Zaimplementuj liczby całkowite dowolnego rozmiaru. Operacje do zaimplementowania: dodawanie, odejmowanie, mnożenie przez liczbę typu int, tworzenie. 

Laboratorium

  1.  Utwórz klasę Ulamek reprezentującą ułamek zwykły. Klasa ma udostępniać operacje dodawania, odejmowania, mnożenia, dzielenia oraz wypisywania ułamków (metoda toString()). Ułamki powinny być przechowywane w postaci uproszczonej (zadbaj o to w konstruktorze). W innej klasie napisz program, który wczyta 10 ułamków ze standardowego wejścia, a następnie policzy ich sumę oraz iloczyn.
  2. Bitwa robotów wojennych odbywa się na polu bitwy reprezentowanym przez planszę o rozmiarze 8 na 8. Uczestniczą w niej dwa roboty, których celem jest zniszczenie się nawzajem.
    Początkowo roboty ustawione są tak, jak na poniższym diagramie, gdzie 'vA' oraz '^B' reprezentują roboty A i B skierowane odpowiednio na południe (v) i na północ (^).
     _ _ _ _ _ _ _ _
     _ _ _ vA_ _ _ _
     _ _ _ _ _ _ _ _
     _ _ _ _ _ _ _ _
     _ _ _ _ _ _ _ _

     _ _ _ _ _ _ _ _

     _ _ _ _ ^B_ _ _

     _ _ _ _ _ _ _ _


    Każda tura bitwy składa się z akcji wykonywanych kolejno przez roboty A i B. Możliwe akcje dla każdego robota:
    • obrót w lewo lub w prawo
    • krok do przodu. Wykonanie jest możliwe tylko wtedy, gdy docelowe pole jest wolne.
    • strzał. Robot strzela przed siebie laserem mającym zasięg wzdłuż całej linii.
    Wszystkie akcje odbywają się względem aktualnego kierunku robota. Jeżeli w wyniku strzału w jego zasięgu znalazł się robot-przeciwnik, zostaje on zniszczony i gra kończy się.
    Bitwa trwa 20 tur lub do czasu, gdy jeden robot zniszczy drugiego. Napisz klasy symulujące bitwę robotów. Każda akcja robota powinna zostać wypisana na ekranie. Program powinien wypisywać stan pola bitwy po każdej turze. Zadbaj o właściwy podział odpowiedzialności między klasami.

Praca domowa nr 4

Do wyboru: zadanie 1 lub 2.

wtorek, 15 marca 2016

Tydzień 3: tablice

Ćwiczenia

  1. Powtórzenie z nieobiektowej Javy.
  2. Dane są dwie tablice posortowane rosnąco. Traktujemy je jako zawartości dwu zbiorów. Wypisać na wyjście część wspólną obu zbiorów.
  3. Dane są dwie tablice reprezentujące współczynniki dwóch wielomianów. Policzyć sumę podanych wielomianów. Wynikowa tablica powinna zajmować jak najmniej miejsca.
  4. Pakiety w Javie.

Laboratorium

  1. Umieścić program HelloWorld w pakiecie. Skompilować i uruchomić program z linii poleceń.
  2. Zapoznać się ze środowiskiem Eclipse. Skompilować i uruchomić w Eclipse program HelloWorld.
  3. W Eclipse podpiąć źródła Javy.
  4. Probably a Fire Hazard (dzień 6 ze strony Advent of Code).
    Po zalogowaniu na stronie Advent of Code można pobrać przykładowe dane, na których można przetestować program. Po zrobieniu części 1 dostaje się dostęp do drugiej części zadania.
Podpowiedzi: 
  1. Czytanie ze standardowego wejścia:
    import java.util.Scanner;
    ...
    Scanner s = new Scanner(System.in);
    while (s.hasNextLine()) {
      s.nextLine();
    }
    s.close();
  2. Czytanie z pliku
    Scanner s = new Scanner(new File("sciezka_do_pliku"));
  3. Czytanie z pliku ze Scannera powoduje błąd kompilacji. Kompilator oczekuje, że obsłużymy wyjątki, które może rzucić Scanner. Na razie można dodać w metodzie main deklarację:
    public static void main(String[] args) throws Exception { ... }
    W dalszej części semestru nauczymy się, w jaki sposób właściwie obsługiwać wyjątki.
  4. Klasa String ma metodę replace, która zastępuje podany ciąg znaków innym:
    "Ala".replace("A","O");
  5. zamieni Alę w Olę.
  6. Klasa String ma metodę split, która dzieli podany napis w miejscach wystąpienia innego napisu:
    "Ala ma kota".split(" ");
    da w wyniku tablicę:
    {"Ala","ma", "kota"}
  7. Parsowanie napisu do liczby całkowitej:
    Integer.parseInt("123");

Praca domowa nr 3

Rozwiązanie zadania Probably a Fire Hazard ze strony Advent of Code (do wyboru: część 1 lub część 2).

 

wtorek, 8 marca 2016

Tydzień 2: karty CRC, wstęp do Javy

Ćwiczenia

  1. Karty CRC (Class-Responsibility-Collaboration) dla biblioteki.
  2. Karty CRC opisujące działanie bankomatu. Scenariusze:
    • Klient wypłaca z bankomatu gotówkę za pomocą karty bankomatowej i drukuje papierowe potwierdzenie transakcji. (Należy pamiętać o różnych możliwościach, np. brak pieniędzy na koncie klienta, kilkakrotnie podany błędny numer PIN, itp.)
    • Klient sprawdza w bankomacie saldo swojego konta.
    • (Opcjonalnie: wpłatomat) Klient wpłaca gotówkę za pomocą karty bankomatowej.
    • (Opcjonalnie) Obsługa panelu administracyjnego bankomatu.

Laboratorium

  1. Skompiluj i uruchom na swoim komputerze program HelloWorld.
  2. Napisz program wypisujący na ekran wszystkie argumenty z wiersza polecenia.
  3. Napisz program wyliczający wartość największego wspólnego dzielnika dwu zadanych wartości.
  4. Napisz program wypisujący rozkład zadanej liczby naturalnej większej od zera na czynniki pierwsze.
  5. Napisz program wypisujący pierwszych n liczb Fibonacciego.
  6. Napisz program wypisujący pierwszych n liczb pierwszych. Użyj sita Eratostenesa.
  7. Dla chętnych: zadania ze strony Advent of Code.
Parametry działania programu należy wziąć z argumentów linii poleceń.

Wskazówka:
Konwersja napisu na liczbę:
int number = Integer.parseInt("123");

Praca domowa nr 2

Do wyboru jedno zadanie spośród: zadanie 3, zadanie 4, zadanie 5, zadanie 6, ewentualnie jedno z zadań ze strony Advent of Code (proszę napisać które).

Rozwiązanie należy wysłać mailem. W temacie wiadomości powinien znaleźć się ciąg PO oraz numer pracy domowej (tutaj: 2). 
 

wtorek, 1 marca 2016

Tydzień 1: modelowanie pojęciowe

Ćwiczenia

  1. Model dziedziny dla gry w szachy.
  2. Model dziedziny dla biblioteki.

Laboratorium

  1. Zarejestrować się na Programowanie obiektowe na moodle'u.
  2. Przygotować w programie Dia model dziedziny dla wypożyczalni w bibliotece wydziałowej.

Praca domowa nr 1

Przygotować model dziedziny dla biblioteki. Wydrukowane modele proszę przynieść na następne zajęcia.