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.