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.