Zaliczeniowe zadanie programistyczne - semestr letni

Dopuszczalne, a nawet wskazane, s� dyskusje z innymi studentami 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 (a tak�e operacji na stringach) 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 do 12. kwietnia.

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, warto sporz�dzi� na w�asny u�ytek (nie b�dzie oceniany ani sprawdzany!) projekt programu, aby potem m�c w usystematyzowany spos�b prowadzi� implementacj�. 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 ewentualnych alternatyw)
  3. Og�lny opis struktury logicznej programu i jego podprogram�w (funkcji)
  4. Opis formatu danych i wynik�w, ograniczenia na dane
  5. Niezb�dne testy programu (i opis metod ich weryfikacji)

Rozwi�zanie zadania

Nast�pnie nale�y przyst�pi� do realizacji zadania. 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 w trakcie implementacji zajdzie uzasadniona potrzeba odej�cia od swojego pierwotnego projektu, nale�y to dobrze przemy�le� i ewentualnie przekonstruowa� projekt. W takiej chwili, porzucenie projektu i zdanie si� na wielk� improwizacj� (aby zobaczy� "co wyjdzie") jest, moim zdaniem, ma�o roztropne. 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. Konieczne jest tak�e kr�tkie obja�nienie zasad dzia�ania najwa�niejszych funkcji.

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� w kodzie �r�d�owym, na kt�r� sk�adaj� si� co najmniej trzy pliki:

W/w sk�adniki rozwi�zania nale�y przes�a� (w jednym mailu, ale ka�dy plik jako osobny za��cznik) do dnia 25.05.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� na Linuxie na students.mimuw.edu.pl (tzn. w LABie), b�dzie automatycznie oceniony na 0 punkt�w. Elementem oceny mo�e by� tak�e rozmowa na temat programu i jego uruchomienie "na �ywo" w LABie.

Zadania do wyboru

Indeksator
Program ma wczytywa� zadany plik tekstowy i generowa� alfabetyczny indeks wyst�puj�cych w nim s��w, ze wskazaniem w kt�rej linii tekstu to s�owo wyst�pi�o. Je�li wyst�pi�o wi�cej ni� raz, oczywi�cie numeru linii nie powtarzamy. W wersji ciekawszej, program m�g�by omija� nie znacz�ce s��wka takie jak np. (w j�zyku polskim) "a", "i", "lub", "�e" (brak tej cechy nie wp�ynie jednak na ocen�).

Je�li na przyk�ad plik litwa.txt zawiera nast�puj�cy tekst:

Litwo! LiTWo ty moja! Ty jestes jak zdrowie.
Ile cie trzeba cenic, ten tylko sie dowie,
Kto cie stracil. Dzis pieknosc twa w calej ozdobie

to wywo�anie programu na tym pliku


program litwa.txt

dawa�oby efekt


calej 3
cenic 2
cie 2, 3
dowie 2
dzis 3
...itd...
litwo 1
moja 1
...itd...

Program ma dzia�a� na du�ych tekstach. Zadaniem �atwym jest implementacja tego programu tak, by dzia�a� dobrze na tekstach angloj�zycznych, czy te� na tekstach polskoj�zycznych w kodowaniu Windows-1250, czy ISO-8859-2. Znacznie trudniejsze (i nie jest to obowi�zkowe, zob. akapit poni�ej) mo�e okaza� si� zaimplementowanie algorytmu tak, by dzia�a� prawid�owo na tekstach kodowanych w UTF-8 (domy�lnym w Linuxie). Wtedy mo�na skorzysta� z funkcji C dzia�aj�cych na rozszerzonym zestawie znak�w wykorzysta� funkcje C iconv_open, iconv, iconv_close.

Na szcz�cie - je�li nie chcemy wg��bia� si� w tajniki obs�ugi UTF-8 - mo�emy omin�� t� trudno��. Dowolny tekst w pliku tekst1.txt w kodowaniu XXX mo�emy przekodowa� do pliku tekst2.txt (ju� w kodowaniu YYY) zakl�ciem iconv -f XXX -t YYY tekst1.txt > tekst2.txt, na przyk�ad

iconv -f UTF-8 -t ISO-8859-2 litwa.txt > brzytwa.txt

spowoduje, �e w pliku brzytwa.txt znajdzie si� zawarto�� pliku litwa.txt, ale ju� w kodowaniu ISO-8859-2 (pod warunkiem, oczywi�cie, �e litwa.txt faktycznie by�a w kodowaniu UTF-8).

Zatem sensowna sekwencja polece� naszego programu w przypadku, gdy indeksowany plik litwa.txt jest w kodowaniu UTF-8, mog�aby wygl�da� nast�puj�co:


iconv -f UTF-8 -t ISO-8859-2 litwa.txt >  brzytwa.txt
program brzytwa.txt > sitwa.txt
iconv -f ISO-8859-2 -t UTF-8 sitwa.txt >  indeks.txt

Kalkulator (trudniejsze)
Zaimplementuj czterodzia�aniowy interpreter wyra�e� arytmetycznych (z nawiasami). Dla zadanego stringa (o d�ugo�ci nie wi�kszej ni� znany parametr MAXLEN) z napisem zawieraj�cym (by� mo�e poprawne) wyra�enie arytmetyczne, np. 3.14+5*(17.123/(-2)) funkcja ma oblicza� poprawn� warto�� tego wyra�enia lub sygnalizowa� b��d gdy wyra�enie jest b��dne, np. wtedy, gdy jest w nim niesparowany nawias: 3.14+5*(<17.123/(-2)). Oczywi�cie, mno�enie i dzielenie musz� mie� wi�kszy priorytet od dodawania i odejmowania, zatem 3.14+5*17 to to samo, co 3.14+(5*17). To zadanie jest tylko pozornie �atwe. Ale na pewno jest do zrobienia!
Dyferencjator (jeszcze trudniejsze)
Podobny jak Kalkulator, ale tym razem musi r�niczkowa� zadane wyra�enie wzgl�dem zadanej zmiennej, np. 3.14+a*x + sin(x) r�niczkowane wzgl�dem x powinno da� w wyniku 0+a*1+cos(x), cho� oczywi�cie znacznie lepiej by�oby, gdyby dawa�o a+cos(x). Podobnie, wyj�ciowe wyra�enie r�niczkowane wzgl�dem a powinno dawa� w wyniku x, a r�niczkowane wzgl�dem zmiennej q powinno dawa� zero. Nie kryj�, �e to zadanie jest trudne.
Aktualizacja: 03.03.2017, 10:43:22.
© Piotr Krzy�anowski