Zaliczeniowe zadanie programistyczne

 

Dopuszczalne, a nawet wskazane, są dyskusje z innymi na temat zadania, a nawet wspólne opracowywanie algorytmu rozwiązania - lecz ostateczną implementację, testowanie i dokumentację programu należy wykonać samodzielnie.

Wykonanie zadań wiąże się m.in. z opanowaniem programowania operacji zapisu i odczytu plików tekstowych w języku C. W razie kłopotów ze zrozumieniem stosownego rozdziału w K&R służę konsultacjami.

Wybór zadania

Z przedstawionych do wyboru zadań, należy wybrać jedno. Tytuł wybranego zadania należy przesłać do zatwierdzenia na adres email piotr.krzyzanowski@mimuw.edu.pl. Zatwierdzenie będzie się odbywać na zasadzie FIFS, otrzymacie Państwo mail zwrotny z informacją. Gdy okaże się, że wybrane zadanie już nie jest dostępne, należy dokonać ponownego wyboru z puli aktualnie dostępnych zadań. Będę pierwszy raz zamykał zadanie, gdy zgromadzi się dwoje chętnych. Potem zadania będę otwierał i zamykał według bieżącej sytuacji, dążąc do zrównoważenia liczby osób przypisanych do zadań.

Wybór zadania jest ostateczny, nie będzie można go później zmienić na inne, ani zamienić się z inną osobą - dlatego w razie wątpliwości warto wcześniej skonsultować treść zadania z prowadzącym ćwiczenia.

Projekt programu

Po zatwierdzeniu wyboru zadania, należy sporządzić projekt programu. Projekt programu jest dla zadania tym, czym konspekt dla wypracowania z języka polskiego: to plan pracy i zarys metod wykonania jej. Projekt programu powinien zawierać:

  1. Sformułowanie zadania
  2. Ogólne omówienie projektowanego rozwiązania (wybór metody, uzasadnienie, dyskusja alternatyw)
  3. Ogólny opis struktury logicznej programu i jego podprogramów (funkcji)
  4. Opis formatu danych i wyników, ograniczenia na dane
  5. Propozycje testów programu

Projekt musi zostać zatwierdzony przez prowadzącego ćwiczenia; w przeciwnym razie należy go poprawić zgodnie ze wskazówkami. Z tego powodu wskazane jest, by dążyć do możliwie wczesnego zatwierdzenia projektu: zostanie więcej czasu na opracowywanie programu!

Rozwiązanie zadania

Następnie należy przystąpić do realizacji zadania zgodnie z zatwierdzonym projektem. W trakcie pisania programu dobrze jest go dokumentować, zamieszczając w nim (dla siebie) krótkie i treściwe komentarze przy kolejnych porcjach kodu. Gdy zajdzie uzasadniona potrzeba odejścia od zatwierdzonego projektu, należy to objaśnić w aneksie do projektu. Po opracowaniu, uruchomieniu i przetestowaniu programu, należy rozbudować dokumentujące go komentarze tak, by kod źródłowy był czytelny dla sprawdzającego. Należy pamiętać, by każdy plik kodu źródłowego miał na początku krótki komentarz dotyczący: streszczenia zawartości pliku, jego autora i daty ostatniej modyfikacji.

Konstruowany program powinien mieć budowę modułową, tzn. składać się z kilku dobrze przemyślanych funkcji, realizujących logicznie wyodrębione części algorytmu rozwiązania zadania.

Ocenie będzie podlegać program wraz z dokumentacją, na którą składają się co najmniej trzy pliki:

W/w składniki rozwiązania należy przesłać (w jednym mailu, jako załączniki) do dnia 14.01.09. na adres piotr.krzyzanowski@mimuw.edu.pl. Każdy rozpoczęty dzień opóźnienia obniża ocenę o 5 punktów.

Ocena

Oceniane będą: wartość merytoryczna, artystyczna i estetyczna przedstawionego rozwiązania. Maksymalnie można uzyskać 10 punktów. Program, który nie daje się uruchomić, będzie oceniony na 0 punktów. Elementem oceny może być także rozmowa na temat programu i jego uruchomienie "na żywo".

Zadania do wyboru

Szach-mat (N.Targosz) (dostępne)
W pliku tekstowym podane są kolejne ruchy partii szachów, w standardowej notacji szachowej, np.


e2-e4	e7-e5
Sg1-f3	d7-d6
Sf3xe5	d6xe5

...itd.
Program powinien na podstawie tego pliku wygenerować planszę przedstawiającą sytuację na szachownicy po wykonaniu ostatniego ruchu zapisanego w partii. Dodatkowo, w przypadku podania ruchu niezgodnego z regułami gry lub niezgodnego z sytuacją na szachownicy, powinien kończyć pracę drukując bieżący stan planszy i opis błędu. Ponadto, program powinien sygnalizować wygraną któregoś z graczy, o ile nastąpiła w trakcie partii.
Mega kalkulator (A.Filip, Ł.Świstek, B. Bąk) (dostępne)
Należy napisać program, który tak jak zwykły kalkulator wykonuje cztery podstawowe działania matematyczne, ale na dowolnych całkowitych liczbach 128-cyfrowych (operacja dzielenia ma więc także być operacją dzielenia całkowitego). Należy opracować wygodny i odporny na błędy interfejs użytkownika. Po zakończeniu pracy kalkulatora, na życzenie użytkownika przebieg całej sesji ma być zapisywany do pliku tekstowego.
WC+S&R (J.Czerpak, K.Turska, M.Zaremba, J.Szczawiński)
W zależności od wyboru użytkownika, w zadanym pliku tekstowym należy policzyć liczbę wierszy i słów (poza konkursem: także liczbę wszystkich znaków) (odpowiednik programu wc w Unixie), lub zastąpić podany ciąg znaków innym, także podanym przez użytkownika (odpowiednik funkcji Search and Replace w edytorze tekstowym). W tym ostatnim przypadku, należy wypisać na ekran liczbę wykonanych zamian i zapisać zmieniony plik do innego pliku o podanej przez użytkownika nazwie.
Wieczny kalendarz (W.Marat, Ł.Sobolewski, K.Knop) (dostępne)
Opracować program drukujący kalendarz na zadany miesiąc (lub tydzień) dowolnego roku w bieżącym wieku. Ważne jest sformatowanie wyniku oraz oznaczenie dni ustawowo wolnych od pracy. Kalendarz ma być albo wyświetlany na ekranie, albo zapisywany do pliku tekstowego - w zależności od decyzji użytkownika.