piątek, 3 lipca 2015

Skróty klawiszowe w Eclipse

Na tej stronie można nauczyć się skrótów klawiszowych w Eclipse.

wtorek, 2 czerwca 2015

Tydzień 15: egzamin & Swing

Ćwiczenia

Wycieczka objazdowa (Egzamin z roku 2013/2014)

Laboratorium

Przed przystąpieniem do rozwiązywania zadań pobierz archiwum ZIP z szablonami zadań na dzisiejsze laboratorium. Dzisiejsze zajęcia polegąją na uzupełnieniu pobranych szablonów zgodnie z instrukcjami w plikach.
  1. Prawie jak HelloWorld. Program uruchamia proste okienko, które umie się zamknąć.
  2. Do okienka dodaj guzik Quit, który kończy wykonanie programu (System.exit(0);). Zwróć uwagę na wykorzystanie zarządcy widoku (LayoutManager) i klasy anonimowej.
  3. Ćwiczenie na wygenerowanie ciekawego układu klawiszy.
  4. Prosta obsługa zdarzeń. Program informuje, który klawisz został naciśnięty.
  5. "Skomplikowana" obsługa zdarzeń. Aplikacja zmieniająca kolor panelu w zależności od wybranych ustawień.
  6. Napisz użyteczną aplikację z użyciem widoku klawisz z zadania 2. 
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.

wtorek, 26 maja 2015

Tydzień 14: egzamin & strumienie

Ćwiczenia

Platforma eTam (egzamin z roku 2012/2013).

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.

sobota, 16 maja 2015

Tydzień 13: kolekcje cz. 3

Ćwiczenia

Na ćwiczenia proszę rozproszyć się po innych grupach. Ćwiczenia z PO o godzinie 12:

  • sala 3130, Kazimierz Grygiel
  • sala 3140, Michał Pilipczuk
  • sala 3150, Tomasz Waleń
  • sala 3160, Krzysztof Szafran
  • sala 3230, Konrad Durnoga

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. Zaproponuj interfejs ImmutableSet<E> reprezentujący niezmienialny zbiór. Operacje wstawiania i usuwania powinny tworzyć nowy zbiór, a nie modyfikować istniejący. 
    Przygotuj implementację tego interfejsu za pomocą drzew BST. Wszystkie używane pola mogą być zadeklarowane jako final, wtedy na pewno struktura będzie niezmienialna.  Niech operacje takie jak size() i isEmpty() działają w czasie stałym.
    Jakie znasz niezmienialne klasy w bibliotece standardowej Javy? Jest ich całkiem sporo!
    Jakie są zalety użycia klasy niezmienialnej (ang. immutable)? Jakie są wady?

wtorek, 12 maja 2015

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. 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.
  2. Przy wypisywaniu zawartości katalogu domyślne sortowanie jest leksykograficzne. Zatem plik laboratorium12.txt jest wypisywany przed plikiem laboratorium2.txt. Napisz własny komparator, który sortuje tak, że nazwa laboratorium2.txt jest wcześniej niż nazwa laboratorium12.txt. Użyj go do wypisania w odpowiedniej kolejności listy plików z wybranego katalogu.
    Wskazówka. Do odczytywania zawartości katalogu można użyć klasy File.

wtorek, 5 maja 2015

Tydzień 11: kolekcje

Ćwiczenia

  1. Dany jest graf. Podzielić jego wierzchołki na możliwie najwięcej niepustych zbiorów, tak by podział miał tę własność, że każda para wierzchołków należących do różnych zbiorów jest połączona krawędzią. Dane:
    • pierwszy wiersz: liczba wierzchołków, liczba krawędzi
    • kolejne: opisy poszczególnych krawędzi (jako dwie liczby, nr pierwszego i nr drugiego wierzchołka).
    Np.:
         3 3
         1 2
         2 3
         3 1
      (graf trójkąt)

    Wynik: Posortowane niemalejąco liczby elementów poszczególnych zbiorów wierzchołków.

    W zadaniu należy zaprojektować struktury danych przechowujące graf (chcemy korzystać z kolekcji w Javie) oraz zaimplementować odpowiedni algorytm.
  2. (Merge uporządkowanych iteratorów) Dane są dwa iteratory na liczbach całkowitych, o których wiemy, że zwracają liczby w porządku rosnącym. Utworzyć uporządkowaną rosnąco listę zawierającą te same elementy, co w danych iteratorach.

Laboratorium

  1. 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.
  2. 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.  

wtorek, 28 kwietnia 2015

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.

Praca domowa nr 11 (dodatkowa) 

Zadanie o drzewie BST. Termin oddania: 6 maja 2015 r.

wtorek, 21 kwietnia 2015

Tydzień 9: wyjątki, JUnit

Ćwiczenia

URI (ang. Uniform Resource Identifier) jest standardem internetowym umożliwiającym łatwą identyfikację zasobów w sieci. Poniżej fragment odpowiedniego dokumentu RFC, który określa jak wygląda URI.
/**
* An example URI and its component parts. [rfc3986]
*
* foo://example.com:8042/over/there?name=ferret#nose
* \_/ \______________/\_________/ \_________/ \__/
*  |         |              |           |       |
* scheme authority         path       query    fragment
*
* The pattern is
* <scheme> : <authority> / <path> ? <query> # <fragment>
*/ 
oraz szkielet walidatora sprawdzającego poprawność URI.
public class CustomURIValidator {
String scheme, authority, path, query, fragment;
public void validate(String uri) throws ... {
...
validateScheme();
validateAuthority();
validatePath();
}
/** 
  * @return true if c is either ALPHA, DIGIT, ’-’, ’.’, ’_’ 
  * or ’~’ 
 **/
public static boolean isUnreservedCharacter(char c) { ... }

private void validateAuthority() throws EmptyComponentException,
   ComponentTooLongException {
   if (authority == null || authority.length() < 1)
        throw new EmptyComponentException("authority");
   if (authority.length() > 255)
        throw new ComponentTooLongException("authority",255);
}

private void validatePath() throws ComponentTooLongException,    
    IllegalCharacterException {
    //leave blank
}

private void validateScheme() throws ... { ... }
}
  1. Uzupełnij metodę validate o kod dzielący URI na składowe i przypisujący składowe do odpowiednich pól walidatora.
  2. Uzupełnij metodę validateScheme() tak, aby spełnione były następujące wymagania:
    • schemat musi być niepusty.
    • schemat nie może być dłuższy niż 255 znaków.
    • schemat może zawierać jedynie litery, cyfry, myślnik, kropkę, znak podkreślenia lub tyldę (tzw. unreserved characters).
    Jeśli któreś z powyższych wymagań nie jest spełnione, powinien być rzucony odpowiedni wyjątek.
  3. public class IllegalCharacterException extends Exception {
        public IllegalCharacterException(String msg) {
            super(msg); 
        }
    }
    public class EmptyComponentException extends Exception {
        public EmptyComponentException(String msg) { 
            super(msg); 
        }
    }
    public class ComponentTooLongException extends Exception {
        public ComponentTooLongException(String component, int expected) {
             super("The " + component + " component can not be longer than"
                   + expected);
        }
    }
    
  4. Dodajmy nowy wyjątek InvalidCustomURIException:
    public class InvalidCustomURIException extends Exception {/*...*/}
    public class IllegalCharacterException 
           extends InvalidCustomURIException {/*...*/}
    public class EmptyComponentException 
           extends InvalidCustomURIException {/*...*/}
    public class ComponentTooLongException 
           extends InvalidCustomURIException {/*...*/}
    
    Zmień kod metody validate w ten sposób, aby rzucany był jeden wyjątek InvalidCustomURIException zawierający w sobie informacje o wszystkich błędach ze wszystkich składowych. Możesz zmienić kod wyjątków.

 

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 klasę z testami JUnit dla Twojego stosu (albo dla implementacji kolegi z ławki obok).
  4. Napisz program, który wczytuje wyrażenie w odwrotnej notacji polskiej (+, −, *, /) i wylicza jego wartość używając stosu z poprzedniego zadania.

Praca domowa nr 10

Zadanie 4. 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.

wtorek, 14 kwietnia 2015

Tydzień 8: klasówka treningowa

Ćwiczenia

Majówka - klasówka z roku 2013/2014.
Głosowanie - klasówka poprawkowa z roku 2013/2014.

Laboratorium

Laboratorium jest odwołane z powodu Olimpiady Informatycznej.

Praca domowa nr 9

Rozgrywki piłkarskie - klasówka z roku 2012/2013. Rozwiązanie należy oddać w wersji papierowej, napisane ręcznie. Termin oddania: 22 kwietnia 2015 r. Tej pracy domowej nie można poprawiać.

środa, 8 kwietnia 2015

Film: Inheritance, Polymorphism, & Testing

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

wtorek, 7 kwietnia 2015

Tydzień 7: wyrażenia cz. 2

Ćwiczenia

Kontynuujemy zadanie o wyrażeniach z poprzedniego tygodnia. Dziś dodamy upraszczanie wyrażeń. Chcemy, aby wyrażenia tworzyły się w postaci uproszczonej zgodnie z takimi regułami:
  • stała + stała → stała
  • 0 + wyrażenie → wyrażenie
  • wyrażenia + 0 → wyrażenie
  • stała * stała → stała
  • 1 * wyrażenie → wyrażenie
  • wyrażenie * 1 → wyrażenie

Laboratorium

  1. Zaimplementuj drzewo BST przechowujace 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ę realizujacą 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ę wystapień litery a w napisie.

Praca domowa nr8

Zadanie o drzewie BST. Termin oddania: 15 kwietnia 2015 r.

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.

wtorek, 31 marca 2015

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

Zaprojektuj hierarchię klas opisujących pojazdy komunikacji miejskiej. Wyraź w tej hierarchii nastepują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ą zajezdnieę,
  • 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żda zajezdnia ma nazwę.
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 6

Zadanie o tramwajach. Termin oddania: 8 kwietnia 2015 r.

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, 24 marca 2015

Tydzień 5: klasy cz. 2

Ćwiczenia

Zaimplementuj liczby całkowite dowolnego rozmiaru. Operacje do zaimplementowania: dodawanie, odejmowanie, mnożenie przez liczbę typu int, tworzenie.

Laboratorium

Zaimplementuj klasę Wielomian. Wielomian powinien mieć:
  • konstruktor bezargumentowy tworzący wielomian zerowy;
  • konstruktor tworzący jednomian;
  • konstruktor tworzący wielomian na podstawie tablicy współczynników; nie marnujemy pamięci – trzymamy tablice długości stopień wielomianu + 1;
  • metodę liczącą wartość wielomianu w punkcie;
  • metody dodaj(Wielomian) i odejmij(Wielomian) zwracającą nowy wielomian będący sumą (różnicą) pierwszego i drugiego argumentu;
  • (dla chętnych) metodę pomnóż(Wielomian) zwracającą iloczyn pierwszego i drugiego argumentu.
W nowym pakiecie utwórz klasę Program korzystającą z Wielomianu. Program bierze jako argumenty wiersza poleceń listę współczynników pierwszego wielomianu, nastepnie symbol działania, a potem listę współczynników drugiego wielomianu. Program wypisuje podanego wynik działania na standardowe wyjście. Np.
java main.Program 1 0 1 + 1 1 -1 1
daje w wyniku
2+x^1+x^3

Praca domowa nr 5

Zadanie o wielomianie. Termin oddania: 1 kwietnia 2015 r.

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

wtorek, 17 marca 2015

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. Zdefiniuj klasę opisującą datę. Zastanów się nad wyborem wewnętrznej reprezentacji dat. Zdefiniuj metody pozwalające na odczytywanie bieżącej daty i przestawianie jej o jeden tydzień w przód i w tył. Zadbaj o dobranie odpowiednich modyfikatorów dostępu do składowych.

Laboratorium

  1. Napisz klasę Osoba. Każda osoba ma imię, nazwisko oraz płeć. W innej klasie napisz program, który wczytuje listę 10 osób, a następnie wypisuje ich dane w odwrotnej kolejności. Skompiluj i uruchom program a) pod Eclipse b) z linii komend.
  2. Zmień klasę Osoba z poprzedniego zadania tak, aby każda osoba miała matkę i ojca. Stwórz kilka osób i powiązań pomiędzy nimi. Dodaj metodę, która zwraca imię i nazwisko ojca lub napis „Nieznany”, jeśli referencja do ojca jest nullem. Dodaj metodę, która przyjmuje parametr typu Osoba i zwraca informacje, czy podane osoby mają tę sama matkę.
  3. 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.

 Praca domowa nr 4

Do wyboru: zadanie 1+2 lub zadanie 3.

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

wtorek, 10 marca 2015

Tydzień 3: tablice w Javie

Ćwiczenia

  1. Napisz fragment kodu, który wpisuje do tablicy liczb całkowitych kolejne cyfry rozwinięcia dziesiętnego liczby pi.
  2. Napisz funkcję fizzBuzz implementującą popularną anglosaską grę dla dzieci. Funkcja bierze jako argumenty dwie liczby całkowite a i b. Jako wynik funkcja zwraca tablicę napisów reprezentujących liczby od a do b, ale
    • jeśli dana liczba dzieli się przez 3, zamiast niej w tablicy ma być napis "Fizz";
    • jeśli dana liczba dzieli się przez 5, zamiast niej w tablicy ma być napis "Buzz";
    • jeśli dana liczba dzieli się przez 3 i przez 5, zamiast w niej w tablicy ma być napis "FizzBuzz".
    Podobno to zadanie jest popularne na rozmowach kwalifikacyjnych. (Moje osobiste doświadczenia tego nie potwierdzają.)
  3. Wygeneruj tablicę napisów długości 52, zawierającą nazwy wszystkich kart z talii. Jakie są możliwe podejścia do tego zadania?
  4. Dane są dwie tablice liczb całkowitych posortowane rosnąco. Traktujemy je jako reprezentacje dwóch zbiorów. Napisać fragment kodu w Javie, który wypisze na wyjście część wspólną
    obu zbiorów. 
  5. Dane są dwie tablice liczb całkowitych. Tablice reprezentują dwa wielomiany. Napisz fragment kodu w Javie, który policzy sumę tych wielomianów. Zadbaj o to, by rozmiar tablicy wynikowej był optymalny.
  6. Dana jest tablica dwuwymiarowa. Napisz fragment kodu w Javie, który zamieni tę tablicę w prawdziwą tablicę prostokątną. Elementy tablicy wejściowej, które są za krótkie powinny zostać uzupełnione zerami.
  7. Dane są dwie tablice prostokątne o takich samych wymiarach. Tablice reprezentują macierze. Napisz fragment kodu w Javie, który policzy sumę tych macierzy.
  8. Dane są dwie tablice kwadratowe o takich samych wymiarach. Tablice reprezentują macierze. Napisz fragment kodu w Javie, który policzy iloczyn tych macierzy.
  9. Dana jest tablica n na n wartości logicznych, reprezentująca graf znajomości między n osobami: zna[i][j] oznacza, że i-ta osoba zna j-ta osobę. Osobistość to osoba, którą każdy zna, ale ona nie zna nikogo. Sprawdzić, czy w danej tablicy jest jakaś osobistość.
  10. (Głosowanie większościowe) W tablicy n-elementowej są liczby z przedziału od 1 do k oznaczające głosy na kandydatów.  W głosowaniu zwycięża osoba, która dostała więcej niż n/2 głosów. Dla danej tablicy głosów wskazać zwycięzcę lub 0, gdy w głosowaniu nie ma zwycięzcy.

Laboratorium

  1. Skompiluj i uruchom w Eclipse program HelloWorld z poprzednich zajęć.
  2. Podepnij w Eclipse źródła Javy.
  3. Umieść program HelloWorld w pakiecie helloworld. Skompiluj i uruchom program:
    • z linii poleceń,
    • z Eclipse.
  4. Zadania z ćwiczeń.

Praca domowa nr 3

Do wyboru co najmniej dwa zadania spośród zadań 4-10 z ćwiczeń.

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

czwartek, 5 marca 2015

Oferta pracy: Technical Writer

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ą. Szukamy osób władających językiem angielskim, które pomogą nam w rozwoju produktu.

Zakres obowiązków

  • Tworzenie krótkich tutoriali dla użytkowników.
  • Tworzenie dokumentacji produktu.

Wymagane kwalifikacje

  • Dobra znajomość języka angielskiego (swoboda formułowania pisemnych wypowiedzi).
  • Podstawowe doświadczenie w korzystaniu z wizualnych narzędzi deweloperskich.
  • Podstawowa znajomość zagadnień związanych z wykorzystaniem relacyjnych baz danych.

Warunki zatrudnienia

  • Praca czasowa na umowę zlecenia.
  • Możliwość pracy zdalnej w niepełnym wymiarze godzin.
  • Wynagrodzenie 25 złotych brutto za godzinę.
Oferty prosimy przesłać na adres contact@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

wtorek, 3 marca 2015

Zajęcia 2: abstrakcyjne typy danych, wstęp do Javy

Ćwiczenia

  1. Abstrakcyjne typy danych: stos, kolejka, graf. 
  2. Model dziedziny dla systemu rejestracji kurdli.

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.
Parametry działania programu można czytać ze standardowego wejścia lub brać z argumentów linii poleceń.

 Ściągawki:

  1. Czytanie ze standardowego wejścia: użyj klasy java.util.Scanner.
    // import
    import java.util.Scanner; 
    
    // użycie
    Scanner s = new Scanner(System.in);
    String input = s.next();
    ...
    s.close();
    
  2. 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.

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

wtorek, 24 lutego 2015

Zajęcia 1: modelowanie pojęciowe

Ćwiczenia

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

Laboratorium

  1.  Zarejestrować się na Programowanie obiektowe na moodle'u.
  2. Przygotować model dziedziny dla biblioteki. Do wyboru:
    • w programie Visual Paradigm (licencja do wersji 11, której niestety nie ma jeszcze w laboratorium) lub
    • w programie Dia.

Praca domowa nr 1

W dowolnie wybranym programie przygotować model dziedziny dla biblioteki. Proszę umieścić w modelu także imię i nazwisko autora (np. w postaci notatki tekstowej).

Należy wysłać obrazek (png, gif, jpg lub pdf) z modelem, a nie projekt z Visual Paradigma. Nazwa pliku powinna zawierać imię i nazwisko autora.

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