Prowadzący zajęcia:

Piotr Wąsiewicz
pwasiewi@elka.pw.edu.pl
tel. 022/234 7718
Gmach Elektroniki p.227

Projekty

I. Tematy projektów: wybieramy jedno z proponowanych poniżej zadań:

  1. Szyfrowanie i deszyfrowanie metodą XTEA plików tekstowych i binarnych. Jako trzeci projekt można dodać menu graficzne.
  2. Szyfrowanie i deszyfrowanie metodą Polibiusza i łamanie szyfru metodą statystyczną
  3. Szyfrowanie/deszyfrowanie szyfrem VMPC polskiego geniusza prawie o randze przedwojennego złamania szyfru Enigmy ;). Jest to mocna odmiana niezbyt już bezpiecznego szyfru RC4. Próba zrównoleglenia algorytmu. Klucz i tekst szyfrowany wczytywane z pliku.
  4. Szyfrowanie/deszyfrowanie szyfrem Enigma. Próba zrównoleglenia algorytmu. Konkretny przykład tutaj. Klucz i tekst szyfrowany wczytywane z pliku.
  5. Szyfrowanie/deszyfrowanie szyfrem Vigenera. Próba złamania szyfru bez klucza. Klucz i tekst szyfrowany wczytywane z pliku.
  6. Szyfrowanie/deszyfrowanie szyfrem harcerskim (do wyboru w programie). Próba złamania szyfru. Klucz i tekst szyfrowany wczytywane z pliku.
  7. Szyfrowanie/deszyfrowanie szyfrem one-time pad. Opis zastosowań po polsku. Zrównoleglenie algorytmu lub próba złamania szyfru. Klucz i tekst szyfrowany wczytywane z pliku.
  8. Szyfrowanie/deszyfrowanie szyfrem Solitare. Klucz i tekst szyfrowany wczytywane z pliku.
  9. Kompresja/dekompresja algorytmem Huffmana. Strona z opisami algorytmów
  10. Kompresja/dekompresja algorytmem LZW czyli LZ-78. Strona z opisami algorytmów
  11. Kompresja/dekompresja algorytmem Shannona-Fano. Strona z opisami algorytmów
  12. Kompresja/dekompresja algorytmem kompresji arytmetycznej. Strona z opisami algorytmów
  13. Kompresja/dekompresja algorytmem LZ-77. Strona z opisami algorytmów
  14. Baza klucz-wartość wczytywana i zapisywana do plików, gdzie klucz jest hashowany.
  15. Sortowanie drzewiaste np. na B-drzewach.
  16. Znajdowanie najkrótszej ścieżki algorytmem Dijkstry na grafach.
  17. Zamiana struktury XML na JSON.
  18. Operacje na plikach excela w podanym formacie XML Spreadsheet. Wczytywanie macierzy w formacie XML(XLS), przykładowe operacje na nich i zapisywanie wyników do plików XML.
  19. Operacje na plikach excela w podanym formacie XML Spreadsheet. Wczytywanie prostych tabel w formacie XML(XLS) do zaprogramowanego silnika małej bazy, operacje na nich i zapisywanie wyników do plików XML.
  20. Operacje na plikach html w podanym formacie HTML. Wczytywanie prostych tabel w formacie html do zaprogramowanego silnika małej bazy, operacje na nich i zapisywanie wyników do plików HTML.
  21. Operacje na plikach html w podanym formacie HTML. Wczytywanie prostych macierzy w formacie html, przykładowe operacje na nich i zapisywanie wyników do plików HTML.
  22. Konwerter tabel w podanym formacie XML Spreadsheet na format html i spowrotem z HTML do XLS.
  23. Konwerter plików w formacie txt do formatu EPUB książek i gazet elektronicznych. Przykłady konwertowanych plików.
  24. Porównanie różnych algorytmów sortowania opisanych filmami na Youtube np. czasu wykonania dla różnej wielkości danych wejściowych.
  25. Implementacja filtru blooma (ang. Bloom filter). Jako czwarty projekt można dodać implementację algorytmu Karpa-Rabina, przykład na stronie.
  26. Wyszukiwanie wzorców w plikach tekstowych algorytmem Boyera i Moore'a oraz dla porównania algorytmem Knutha-Morrisa-Pratta. Dla testu rozwiązania projekt na SPOJU
  27. Dodanie menu graficznego dla parametrów algorytmów z końca strony wiki o operacjach na plikach, a dokładniej jednego przykładu generowania plików graficznych. Można także dodać okno z wyświetlanym plikiem graficznym wygenerowanym po zmianie parametrów.
  28. Przygotowanie do bezstratnej kompresji algorytmami transformaty Burrowsa-Wheelera oraz algorytmu Move To Front, a następnie kompresja i dekompresja jednym z wybranych algorytmów. Porównać kompresję plików nie przygotowanych i przygotowanych.
  29. Rozbudowanie programu z dynamiczną macierzą do zestawu programów transformujących na różny sposób macierze, czytających ze standardowego wejścia i wypisujących na standardowe wyjście np. cat macierz.txt | prog1 | prog2 | prog3 | prog4 > macierzwynikowa.txt
  30. Napisać program obliczający algorytmem Nussinov-Jacobson składanie się łańcucha RNA złożonego z czterech liter A,G,C,U. A tworzy parę z U, a G tworzy parę z C. Następnie zobrazować graficznie pętle RNA. A tworzy parę z U, a G tworzy parę z C.
  31. Napisać program obliczający algorytmem Wąsiewicz-Tomczuk składanie się łańcucha DNA złożonego z czterech liter A,G,C,T. A tworzy parę z T, a G tworzy parę z C.
  32. Pisanie wierszy. Napisać program, który pisze wiersze. Problem należy rozwiązać tak, że program ma korzystać ze słownika rzeczowników, przymiotników i czasowników, i budować wiersz na dowolnej zasadzie, np. rymy typu abab, kolejność słów: rzeczownik, przymiotnik, czasownik (lub dowolne inne zasady). Rym musi zostać tak potraktowany, aby rzeczywiście był rymem, czyli ostatnie 3-4 znaki wyrazów muszą być identyczne. Długość słownika warunkuje bogactwo języka.
  33. Gra logiczna (propozycja studenta) wybrana z gier na stałej plaszy lub rozbudowywanej za pomocą kart (Sabotażysta, Carcassone - przykład w Javie) napisana np. w bibliotece Allegro. Do wyboru biblioteki OpenGL, SDL, Allegro, mechanizmy Posix threads, openmp, shared memory i wiele innych) np.: gra w środowisku graficznym z wykorzystaniem wybranych bibliotek: SDL, OpenGL, Allegro, ClanLib, BoxD, FLATLAND, OGRE, IRRLICHT, Crystal Space, Bullet Physics, ENet, HawkNL i podobnych do nich. Przykładowy program zaliczający programowanie w C na stronie http://www.allegro.cc/depot/QuixoGame/ Gry logiczne: Lech Pijanowski "Przewodnik gier". Możliwość grania z komputerem. Uproszczone wersje tych bardziej rozbudowanych gier. Kryje się w tym punkcie, jak można się domyślić, kilka tematów projektów.
  34. Rozwiązywanie gry L za pomocą algorytmu własnego pomysłu. Strona gry L.
  35. Rozwiązywanie gry 3-spot za pomocą algorytmu własnego pomysłu.
  36. Rozwiązywanie gry w betoniarki za pomocą algorytmu własnego pomysłu. Strona wiki o grze w betoniarki. Potrzebnych co najmniej dwóch studentów zawodników.
  37. Rozwiązywanie gry w mrówki za pomocą algorytmu własnego pomysłu. Strona wiki o grze w mrówki. Potrzebnych co najmniej czterech studentów zawodników.
  38. Rozwiązywanie gry w trójkąty za pomocą algorytmu własnego pomysłu. Strona wiki o grze w trójkąty. Potrzebnych co najmniej dwóch studentów zawodników.
  39. Rozwiązywanie gry w microwars za pomocą algorytmu własnego pomysłu. Strona wiki o grze w microwars. Potrzebnych co najmniej dwóch studentów zawodników.

II. Dla chętnych dodatkowo zrównoleglanie algorytmu i testy dla różnych parametrów zrównoleglania dodają punkty, kiedy program jest zbyt ubogi w dodatkowe opcje (dynamiczne struktury, drzewa, listy grafy; wczytywanie plików; wykorzystanie graficznych bibliotek) lub wykorzystuje już istniejący algorytm ze względu na jego skomplikowanie.

Przykładowy program zaliczający programowanie w C studenta z EiTI wykorzystujący bibliotekę allegro:

Przykładowe drzewa binarne w C: