Zasady programowania strukturalnego II Lista projektów
Transkrypt
Zasady programowania strukturalnego II Lista projektów
Zasady programowania strukturalnego II Lista projektów Anna Sztyber, 2015/16 Każdy projekt musi zawierać (nawet, jeśli nie jest to podane w temacie projektu): podział na moduły, obsługę plików tekstowych oraz struktury dynamiczne (listy, drzewa). Lista tematów: 1. Odwrotna Notacja Polska projekt łatwy\ trudny Program pozwala użytkownikowi na wpisanie wyrażenia matematycznego (liczby, nawiasy, +-*/), a następnie przekształca je na zapis ONP (szczegóły: podręcznik Algorytmy i struktury danych - cpp). Możliwość obliczania wartości wyrażenia. Wersja na 5: Podstawowe funkcje matematyczne. Możliwość definiowania zmiennych i obliczania wartości wyrażenia dla wartości z zadanego przedziału z określonym krokiem. Zapis wyznaczonych wartości do pliku. Rysowanie wykresów w trybie graficznym. 2. Gra Hex projekt łatwy\ trudny Program umożliwiający grę w Hex dla dwóch osób. Dostępne są statystyki użytkowników i ranking. Możliwość zapisu stanu partii do pliku i późniejszej kontynuacji gry. Wersja na 5: Możliwość gry z komputerem, opracowanie odpowiedniej startegii. 3. Gra w statki projekt łatwy\ trudny Program umożliwia grę w statki z komputerem. Rozgrywka może toczyć się na planszy o dowolnym rozmiarze, istnieje możliwość wyboru liczby i rozmiaru statków. Możliwość zapisu aktualnego stanu gry do pliku i późniejszej kontynuacji rozgrywki. Dostępne są statystyki użytkowników i ranking. Wersja na 5: Opracowanie strategii gry komputera (Monte Carlo?). 4. 2048 projekt łatwy Program umożliwia grę w 2048. Rozgrywka może toczyć się na planszy o dowolnym rozmiarze, istnieje możliwość wyboru liczby docelowej. Możliwość zapisu aktualnego stanu gry do pliku i późniejszej kontynuacji rozgrywki. Dostępne są statystyki użytkowników i ranking. 5. Terminarz projekt łatwy Terminarz pozwalający na zapisywanie nadchodzących wydarzeń. Program powinien wyświetlać zadania na bieżący dzień lub na dzień podany przez użytkownika lub na dni z zadanego przedziału. Wczytywanie listy notatek z pliku, zapis do pliku. Możliwość dodawania i modyfikacji zapisków. Sortowanie listy po notatek po dacie. 6. Warcaby projekt łatwy\ trudny Program umożliwiający grę w warcaby dla dwóch osób. Dostępne są statystyki użytkowników i ranking. Możliwość zapisu stanu partii do pliku i późniejszej kontynuacji gry. Wersja na 5: Możliwość gry z komputerem, możliwość cofania ruchów o zadanej głębokości. 7. Wielopolowe kółko i krzyżyk projekt łatwy\ trudny Program umożliwia grę w kółko i krzyżyk dla dwóch osób na planszy o zadanym rozmiarze. Liczba znaków, jakie trzeba mieć w linii, aby wygrać, zależy od rozmiaru planszy. Dostępne są statystyki użytkowników i ranking. Możliwość zapisu stanu partii do pliku i późniejszej kontynuacji gry. Wersja na 5: Możliwość gry z komputerem, możliwość cofania ruchów o zadanej głębokości. 8. Labirynt projekt trudny Napisać program do wyszukiwania najkrótszej drogi pomiędzy dwoma punktami w labiryncie. Struktura labiryntu oraz punkt startowy i końcowy są wczytywane z pliku tekstowego lub podawane przez użytkownika. Umożliwić zapis do pliku labiryntu podanego przez użytkownika. 9. Układanka I projekt trudny Program umożliwia układanie obrazka na kwadratowej planszy z jednym polem pustym. Na puste pole można przesuwać kwadraty z pól sąsiednich. Program powinien zapewnić możliwość układania przez użytkownika i udostępniać algorytm układający. Algorytm powinien prawidłowo układać obrazek, ale nie musi wykonywać najmniejszej możliwej liczby ruchów. Stan początkowy planszy może być wczytany z pliku lub losowany. Wylosowany stan początkowy musi być taki, aby układankę dało się ułożyć. 10. Układanka II projekt trudny Program umożliwia układanie obrazka na kwadratowej planszy z jednym polem pustym. Na puste pole można przesuwać kwadraty z pól sąsiednich. Program powinien zapewnić możliwość układania przez użytkownika i udostępniać algorytm układający. Algorytm powinien znajdować metodę ułożenia obrazka w najmniejszej liczbie ruchów (wskazówka: A*, należy ograniczyć się do układanek 3x3 lub 4x4). Stan początkowy planszy może być wczytany z pliku lub losowany. Wylosowany stan początkowy musi być taki, aby układankę dało się ułożyć. 11. Otoczka wypukła projekt łatwy \ trudny Zadaniem programu jest wczytanie współrzędnych x, y zbioru punktów (z pliku lub podanych przez użytkownika). Na podstawie danych wejściowych program ma wyznaczyć otoczkę wypukłą. Możliwość podawania i modyfikacji zbioru punktów, zapis zbioru do pliku. Wyświetlanie zbioru punktów i wyznaczonej otoczki w trybie graficznym. Wersja na 5: Wykorzystanie dwóch różnych algorytmów wyznaczania otoczki wypukłej. Bonus: Wyznaczanie otoczki wypukłej w trzech wymiarach, wyświetlanie w trybie graficznym. 12. Problem najkrótszych ścieżek (Algorytm Dijkstry) projekt łatwy Napisać program, który dla danego grafu znajduje najkrótsze ścieżki z danego wierzchołka do pozostałych wierzchołków. Wczytywanie grafu z pliku. Możliwość zapisu wyznaczonych ścieżek do pliku. 13. Automatyczny poeta projekt łatwy \ trudny Program do automatycznej generacji wierszy z zachowaniem struktury sonetu. Tworzenie wiersza poprzez losowanie słów z określonego zbioru. Możliwość zapisu do pliku stworzonych utworów i wczytania wiersza z pliku. Wyrazy w wierszu nie powinny się powtarzać. Wersja na 5: Zachowanie odpowiedniego rytmu wiersza (odpowiedniej liczby sylab w wersie). Zachowanie odpowiedniej struktury zdań (podmiot, orzeczenie itd.). Możliwość modyfikacji tekstu przez użytkownika. Kontrola poprawności wprowadzonych zmian. 14. Perkolacja projekt trudny Nalezy stwierdzić, czy woda może przeciec przez porowatą strukturę. Dana jest kwadratowa plansza zawierająca pola puste i pełne. Woda może przepływać przez pola puste, ale nie może przez pełne. Początkowo wszystkie pola są pełne. Górna krawędź planszy podłączona jest do źródła wody. Losowo otwierane są kolejne komórki. Należy stwierdzić, kiedy woda dopłynie do dolnej krawędzi planszy. 15. Kasyno projekt łatwy Program umożliwia grę w pokera (dowolnie wybrana wersja) z komputerem. Program losuje rozdanie (należy zapewnić, aby wszystkie rozdania były jednakowo prawdopodobne) i umożliwia licytację. Dla każdego gracza umożliwić zapis i przeglądanie historii rozgrywek, zawierającej posiadane karty i rezultat rozdania. 16. Rysownik projekt łatwy \ trudny Dany jest zbiór punktów (x, y). Należy znaleźć wszystkie prostoliniowe odcinki łączące przynajmniej trzy punkty. Odcinki nie powinny się powtarzać ze względu na permutacje punktów, należy również wyeliminować odcinki zawarte w innych. Zbiór punktów jest wczytywany z pliku lub podawany przez użytkownika. Znalezione odcinki można zapisać do pliku. W trybie graficznym wyświetlanie zbioru punktów i odcinków. Wersja na 5: Zaimplementować dwa różne algorytmy znajdowania odcinków prostoliniowych (wskazówka wykorzystać sortowanie po kącie nachylenia). 17. Sortownik projekt łatwy Zadaniem programu jest sortowanie liczb. Dane mogą być wczytywane z pliku, podawane przez użytkownika lub losowane. Należy zaimplementować podstawowe algorytmy sortowania: BubbleSort, InsertionSort i SelectionSort, oraz QuickSort, MergeSort i BucketSort (szczegóły: podręcznik Algorytmy i struktury danych cpp). Algorytm MergeSort powinien działać dla liczb umieszczonych na liście dynamicznej. Należy umożliwić pomiar czasu działania i porównanie szybkości różnych algorytmów. Możliwość zapisu uporządkowanego ciągu liczb do pliku. 18. Gra w życie projekt łatwy Gra odbywa się na prostokątnej planszy o dowolnym rozmiarze. Każde pole planszy może zawierać żywą komórkę. Nowa komórka powstaje gdy ma dokładnie trzech żywych sąsiadów. Komórka zachowuje życie gdy ma trzech lub dwóch żywych sąsiadów. Komórka umiera gdy ma mniej niż dwóch lub więcej niż 3 żywych sąsiadów. Możliwość zapisu i odczytu stanu początkowego z pliku. Możliwość tworzenia i modyfikacji planszy. Wyświetlanie na ekranie kolejnych etapów rozwoju życia. 19. Saper projekt trudny Program umożliwia grę w sapera. Gra odbywa się na prostokątnej planszy, użytkownik wybiera poziom trudności. Możliwość zapisu i odczytu planszy z pliku. Statystyki użytkowników. Po wybraniu pola pustego (bez miny i bez liczby, oznaczającej liczbę sąsiednich min) powinny się odsłaniać wszystkie sąsiednie pola puste. 20. Minimalne drzewo rozpinające w grafie - problem najkrótszych autostrad projekt trudny Dany jest zbiór miast oraz długości potencjalnych dróg pomiędzy nimi. Dane mogą być wczytywane z pliku lub podawane przez użytkownika. Należy wyznaczyć sieć autostrad o najmniejszej łącznej długości, które połączą wszystkie miasta. Należy zaimplementować algorytm Prima lub Kruskala (nie jest wymagana implementacja o najmniejszej możliwej złożoności obliczeniowej). 21. Serwis randkowy projekt trudny Dany jest zbiór kobiet oraz mężczyzn (mężczyzn jest tyle samo lub więcej niż kobiet). Każda z kobiet lubi mężczyzn z pewnego podzbioru. Dane mogą być wczytywane z pliku lub podawane przez użytkownika. Należy zestawić możliwie dużo par (rozpatrujemy wyłącznie pary damsko-męskie, w których kobieta lubi swojego partnera). Wskazówki: skojarzenie w grafie dwudzielnym (matching in bipartite graph), algorytm Hopcroft’a–Karp’a. 22. Hydraulik projekt trudny Dana jest sieć wodociągowa złożona z węzłów oraz rur oraz położenie źródła wody i spływu. Każda rura ma określoną przepustowość. Należy określić jaka maksymalna ilość wody może przepłynąć przez sieć oraz które rury powinny być w tym celu użyte. Dane mogą być wczytywane z pliku lub podawane przez użytkownika. Wskazówki: problem maksymalnego przepływu, algorytm Edmondsa-Karpa.