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ń:
- Szyfrowanie i deszyfrowanie
metodą XTEA plików
tekstowych i binarnych. Jako trzeci projekt można dodać menu
graficzne.
- Szyfrowanie i deszyfrowanie
metodą
Polibiusza i łamanie szyfru metodą
statystyczną
- 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.
- Szyfrowanie/deszyfrowanie
szyfrem Enigma.
Próba zrównoleglenia algorytmu.
Konkretny przykład tutaj.
Klucz i tekst szyfrowany wczytywane z pliku.
- Szyfrowanie/deszyfrowanie
szyfrem Vigenera.
Próba złamania szyfru bez klucza. Klucz i tekst szyfrowany
wczytywane z pliku.
- Szyfrowanie/deszyfrowanie
szyfrem harcerskim
(do wyboru w programie). Próba złamania szyfru. Klucz i tekst
szyfrowany wczytywane z pliku.
- 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.
- Szyfrowanie/deszyfrowanie
szyfrem Solitare.
Klucz i tekst szyfrowany wczytywane z pliku.
- Kompresja/dekompresja algorytmem
Huffmana. Strona
z opisami algorytmów
- Kompresja/dekompresja algorytmem
LZW czyli LZ-78. Strona
z opisami algorytmów
- Kompresja/dekompresja algorytmem
Shannona-Fano. Strona
z opisami algorytmów
- Kompresja/dekompresja algorytmem
kompresji arytmetycznej. Strona
z opisami algorytmów
- Kompresja/dekompresja algorytmem
LZ-77. Strona
z opisami algorytmów
- Baza klucz-wartość wczytywana
i zapisywana do plików, gdzie klucz
jest hashowany.
- Sortowanie drzewiaste np. na
B-drzewach.
- Znajdowanie najkrótszej ścieżki
algorytmem
Dijkstry na
grafach.
- Zamiana struktury XML na
JSON.
- 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.
- 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.
- 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.
- 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.
- Konwerter tabel w
podanym formacie XML Spreadsheet na format
html i spowrotem z HTML do XLS.
- Konwerter plików w formacie txt
do formatu
EPUB książek i gazet elektronicznych. Przykłady
konwertowanych plików.
- Porównanie różnych algorytmów
sortowania opisanych
filmami na Youtube np. czasu wykonania dla różnej wielkości
danych wejściowych.
- Implementacja filtru
blooma (ang. Bloom filter).
Jako czwarty projekt można dodać implementację algorytmu Karpa-Rabina, przykład na
stronie.
- 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
- 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.
- 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.
- 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
- 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.
- 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.
- 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.
- 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.
- Rozwiązywanie gry L za pomocą
algorytmu własnego pomysłu. Strona gry L.
- Rozwiązywanie gry 3-spot za
pomocą algorytmu własnego pomysłu.
- 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.
- 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.
- 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.
- 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: