Laboratoria 9-13

Transkrypt

Laboratoria 9-13
UWAGA: Realizacja projektów wymaga zdefiniowania własnych typów danych za pomocą struktur i słowa
kluczowego typedef oraz stosowania dynamicznej alokacji pamięci. Ponadto wymagane jest podzielenie
kodu programu na funkcje, pogrupowane w osobnych plikach. Mile widziane utworzenie pliku makefile.
1. Biblioteka funkcji umożliwiających wykonywanie operacji na macierzach o elementach rzeczywistych i
dowolnym wymiarze. Wymagane operacje: tworzenie i niszczenie macierzy, dostęp do poszczególnych
elementów a także całych wierszy i kolumn, dodawanie, odejmowanie, mnożenie macierzowe, mnożenie
i dzielenie “z kropką” (element po elemencie), mnożenie i dzielenie przez skalar, transpozycja, odczyt i
zapis z pliku tekstowego. Aby zademonstrować działanie biblioteki należy napisać program
implementujący prosty interpreter umożliwiający wykonanie wszystkich operacji (np. na trzech
macierzach: dwóch wejściowych i jednej wynikowej).
2. Biblioteka funkcji umożliwiających wykonywanie operacji na macierzach rzadkich o elementach
rzeczywistych. Macierze przechowywane przy użyciu odpowiedniego typu danych. Wymagane
operacje: tworzenie i niszczenie macierzy, dostęp do poszczególnych elementów, dodawanie,
odejmowanie, mnożenie macierzowe, mnożenie i dzielenie “z kropką” (element po elemencie),
mnożenie i dzielenie przez skalar, transpozycja, odczyt i zapis z pliku tekstowego. Aby zademonstrować
działanie biblioteki należy napisać program implementujący prosty interpreter umożliwiający wykonanie
wszystkich operacji (np. na trzech macierzach: dwóch wejściowych i jednej wynikowej).
3. Odwracanie macierzy o elementach rzeczywistych (wymiar macierzy nie jest ograniczany przez
strukturę programu). W celu zademonstrowania działania funkcji należy napisać program
implementujący prosty interpreter pozwalający na zdefiniowanie elementów macierzy z klawiatury lub
wczytanie ich z pliku tekstowego. Wynik operacji wyświetlany na ekranie z możliwością zapisania w
pliku tekstowym.
4. Znajdowanie minimalnego drzewa rozpinającego z grafie algorytmem Prima. Graf o dowolnej liczbie
wierzchołków i krawędzi wczytywany z pliku. Wynik zapisywany do pliku.
5. Znajdowanie minimalnego drzewa rozpinającego z grafie algorytmem Kruskala. Graf o dowolnej liczbie
wierzchołków i krawędzi wczytywany z pliku. Wynik zapisywany do pliku.
6. Wyznaczanie najmniejszej odległości w grafie od wskazanego wierzchołka do wszystkich pozostałych
algorytmem Forda-Bellmana. Graf o dowolnej liczbie wierzchołków i krawędzi wczytywany z pliku.
Wynik zapisywany do pliku.
7. Wyznaczanie najmniejszej odległości w grafie od wskazanego wierzchołka do wszystkich pozostałych
algorytmem Dijkstry. Graf o dowolnej liczbie wierzchołków i krawędzi wczytywany z pliku. Wynik
zapisywany do pliku.
8. Implementacja gry w życie (The Game of Life) na planszy o nieograniczonym przez strukturę programu
rozmiarze. Parametry programu (rozmiar planszy, liczba pokoleń i sposób generacji stanu
początkowego) odczytywane z pliku konfiguracyjnego. Program powinien mieć możliwość zapisu i
odtworzenia stanu gry z pliku tekstowego. Dla małych plansz powinna zostać zapewniona możliwość
wizualizacji obecnego stanu gry.
9. Kompresja i dekompresja pliku za pomocą algorytmu Huffmana.
10. Filtracja liniowa obrazu w skali szarości. Odczyt i zapis wybranego formatu plików graficznych (np.
tekstowego PGM 8-bit lub PNG przy użyciu biblioteki libpng). Program powinien mieć możliwość
odczytu maski filtru z pliku tekstowego. Sterowanie pracą programu za pomocą parametrów
przekazywanych z linii komend.
11. Filtracja nieliniowa obrazu w skali szarości (filtr medianowy, maksymalny i minimalny). Odczyt i zapis
wybranego formatu plików graficznych (np. tekstowy PGM 8-bit lub PNG przy użyciu biblioteki
libpng). Sterowanie pracą programu za pomocą parametrów przekazywanych z linii komend.
12. Skalowanie i obrót obrazu w skali szarości z interpolacją biliniowa. Odczyt i zapis wybranego formatu
plików graficznych (np. tekstowy PGM 8-bit lub PNG przy użyciu biblioteki libpng). Sterowanie pracą
programu za pomocą parametrów przekazywanych z linii komend.
13. Zmniejszenie liczby poziomów szarości w obrazie (np. algorytmem Floyda-Steinberga). Odczyt i zapis
wybranego formatu plików graficznych (np. tekstowy PGM 8-bit lub PNG przy użyciu biblioteki
libpng). Sterowanie pracą programu za pomocą parametrów przekazywanych z linii komend.
14. Generator fraktali na płaszczyźnie liczb zespolonych (np. zbiory Mandelbrota i Julii). Program ma
umożliwiać wygenerowanie zbioru o parametrach wczytanych z tekstowego pliku konfiguracyjnego oraz
zapisanie wynikowego obrazu w skali szarości w wybranym formacie graficznym (np. tekstowy PGM
8-bit lub PNG przy użyciu biblioteki libpng).
15. Generator fraktalnych map terenu o zadanym stopniu pofałdowania. Program ma umożliwiać
wygenerowanie mapy terenu o parametrach wczytywanych z tekstowego pliku konfiguracyjnego oraz
zapisanie wynikowego obrazu w skali szarości w wybranym formacie graficznym (np. tekstowy PGM
8-bit lub PNG przy użyciu biblioteki libpng).
16. Generator fraktali typu IFS (tworzonych za pomocą losowo wybieranych transformat afinicznych).
Program ma umożliwiać wygenerowanie fraktala na podstawie pliku tekstowego zawierającego
współczynniki transformat afinicznych wraz z prawdopodobieństwami ich wyboru oraz zapisanie
wynikowego obrazu w wybranym formacie graficznym (np. tekstowy PGM 8-bit lub PNG przy użyciu
biblioteki libpng).
17. Baza adresowa z nieograniczoną liczbą wpisów (wymagane zastosowanie odpowiedniej struktury
danych). Obsługa programu z poziomu prostego menu umożliwiającego wykonanie podstawowych
operacji, typu: tworzenie nowych wpisów oraz wyszukiwanie, modyfikacja i usuwanie już istniejących.
Baza odczytywana i zapisywana do domyślnego pliku (powinna istnieć możliwość wybrania również
innego pliku, np. przez podanie jego nazwy jako parametru wywołania programu).
18. Słownik polsko-angielski. Wymagane jest zastosowanie odpowiedniej struktury danych pozwalającej na
szybkie przeszukiwanie zawartości słownika. Obsługa programu z poziomu prostego menu
umożliwiającego wykonanie podstawowych operacji, typu: dodawanie nowych słów oraz wyszukiwanie,
modyfikacja i usuwanie już istniejących. Słownik odczytywany i zapisywany do domyślnego pliku
(powinna istnieć możliwość wybrania również innego pliku, np. przez podanie jego nazwy jako
parametru wywołania programu).
19. Program obsługi wypożyczalni płyt DVD. Liczba wpisów w bazach płyt i klientów nieograniczona
(wymagane zastosowanie odpowiedniej struktury danych). Obsługa programu z poziomu prostego menu
umożliwiającego wykonanie podstawowych operacji, typu: dodawanie nowych płyt i klientów,
wyszukiwanie, modyfikacja i usuwanie już istniejących oraz wypożyczanie. Bazy odczytywane i
zapisywane do domyślnych plików (z zapewnieniem możliwości odczytu i zapisu innych, wybranych
przez użytkownika plików).
20. Klasyfikacja wektorów danych w przestrzeni RN algorytmem k najbliższych sąsiadów (k-NN). Liczba
klas, wektorów danych i wymiar przestrzeni bez ograniczeń. Dane (zbiory uczący i testowy)
odczytywane z pliku tekstowego z kolumnami rozdzielonymi znakami tabulacji, w którym i-ta kolumna
oznacza i-ty wektor, a j-ty wiersz oznacza j-tą współrzędną wektora. Parametry działania programu
odczytywane z pliku konfiguracyjnego. Wynik (indeksy klas, do których zostały przypisane wektory za
zbioru testowego) zapisywany w pliku tekstowym.
21. Klasteryzacja zbioru wektorów danych w przestrzeni RN algorytmem k-średnich (k-means). Liczba
klastrów, wektorów danych i wymiar przestrzeni bez ograniczeń. Parametry działania algorytmu
odczytywane z pliku konfiguracyjnego. Dane odczytywane z pliku tekstowego z kolumnami
rozdzielonymi znakami tabulacji, w którym i-ta kolumna oznacza i-ty wektor, a j-ty wiersz oznacza j-tą
współrzędną wektora. Wynik (indeksy klastrów, do których zostały przypisane wektory) zapisywany w
pliku tekstowym.
22. Poszukiwanie maksimum/minimum funkcji w przedziale za pomocą algorytmu genetycznego. Liczby
reprezentowane w systemie dwójkowym. Wymagana implementacja najprostszego schematu
ewolucyjnego zaczynającego się od losowej generacji populacji początkowej po której w pętli
powtarzane są: wyznaczenie dopasowania osobników, selekcja i utworzenie populacji potomnej poprzez
krzyżowanie i mutacja. Warunkiem stopu jest brak poprawy dopasowania najlepszego osobnika z
populacji przez N pokoleń. Parametry algorytmu (liczba osobników w populacji, długość chromosomu,
liczba pokoleń, po których następuje zatrzymanie) odczytywane z pliku konfiguracyjnego.