Propozycje programów na zaliczenie

Writing /home/grochu/public_html/wiki/data/cache/5/55b6b0682aafad351a532f753a2e5a40.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/cache/5/55b6b0682aafad351a532f753a2e5a40.metadata failed
Writing /home/grochu/public_html/wiki/data/cache/5/55b6b0682aafad351a532f753a2e5a40.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/cache/6/6f657455edec3c6c3594baa954b96825.xhtml failed

Propozycje programów na zaliczenie

Tutaj można znaleźć kilka pomysłów na projekt zaliczeniowy (z czasem powinno być ich więcej).
Własne propozycje mile widziane. Wszelkie pytania proszę przesyłać na adres: grochu@fizyka.umk.pl

Statystyka

Program czyta z pliku liczby zapisane w kolumnach.
Dla każdej kolumny wyznacza wielkości: suma, średnia, odchylenie standardowe, wariancja, wartość maksymalna i minimalna.

Baza danych

Prosta baza danych (np. danych osobowych, książka telefoniczna, baza filmów lub muzyki, itp.). Program powinien mieć możliwość dodawania, usuwania i wyszukiwania rekordów, zapisywania oraz odczytywania całej bazy danych z pliku.

Analiza tekstu 1

Program po wczytaniu danego pliku tekstowego wyświetla częstości występowania każdej litery w tekście.
Wynik w postaci procentowej powinien być zapisany do pliku tekstowego (o nazwie podanej przez użytkownika) w kolejności od najczęściej do najrzadziej występującej litery.
Dodatkowo program mógłby wyświetlać ilość liter, słów i inne statystyki związane z tekstem.

Analiza tekstu 2

Program stanowi rozszerzenie poprzedniego projektu.
Dla danego zbioru plików z wynikami programu „Analiza tekstu 1” (najlepiej pochodzących z różnych języków) program określa podobieństwo tych statystyk do dowolnego nowego teksu.
Porównując częstości występowania liter w takście można w ten sposób określić np. w jakim języku napisany jest dany tekst.

Słownik

Program odczytuje podany plik tekstowy i na jego podstawie tworzy słownik tzn. wynikiem działania programu powinien być plik zawierający wszystkie występujące w tekście wyrazy ułożone w kolejności alfabetycznej.\Dany wyraz w słowniku może wystąpić tylko raz.

Szyfrowanie

Program szyfruje podaną treść. Może to być jeden program kodujący/dekodujący lub dwa programy, jeden szyfrujący, drugi - deszyfrujący wiadomość tekstową. Algorytm szyfrowania dowolny (kilka przykładów poniżej).
Przed zaszyfrowaniem z podanego tekstu program powinien usunąć wszystkie znaki różne od liter i spacji.
Przy szyfrowaniu użytkonik podaje klucz (hasło) - dowolny ciąg znaków, który jest niezbędny do późniejszego poprawnego rozszyfrowania tekstu.

Kilka przykładów algorytmów:

szyfr Cezara
Każdemu znak tekstu jawnego zastępujemy znakiem przesuniętym o określoną, stałą liczbę znaków w alfabecie. Litery z końca alfabetu stają się literami z jego początku. Przykładowo, przesuwając o 3 znaki litera A staje się literą D, litera Z staje się literą C, itd. Podane hasło przy szyfrowaniu powinno posłużyć do wygenerowania liczby całkowitej określającej o ile przesuwamy litery.

szyfr Cardano
Każda literę zastępujemy inną według ustalonego przyporządkowania, np.:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
QWERTYUIOPASDFGHJKLZXCVBNM

gdzie literę A zastępujemy literą Q, B literą W, itd. Dla alfabetu 26 znakowego mamy więc 26! możliwości różnych przyporządkowań liter. W programie należy zaproponować metodę generowania takiego przyporządkowania z podanego przy szyfrowaniu klucza (hasła).

Szyfr Vingener'a
Jest to zmodyfikowana wersja szyfru Cezara. Kluczem jest ciąg kilku liczb. Podobnie jak w metodzie Cezara zastępujemy znaki literami przesuniętymi o pewną wartość w alfabecie, z tym, że dla każdego znaku ta wartośćjest inna. Np. dla podanych w kluczu trzech liczb 2, 15 i 4 przesuwamy pierwszy znak o 2, drugi o 15, trzeci o 4, czwarty znów o 2 itd. Ponieważ każdy znak w naturalny sposób jest liczbą całkowitą w języku C (kod ASCII) nie powinno byćproblemu z zamianą dowolnego ciągu znaków (hasła) na ciąg liczb całkowitych wymaganychwtym algorytmie.

Macierz
Szyfrowany tekst umieszczany jest w macierzy. W zaleźności od podanego hasła powinna być generowana liczba określająca liczbę kolumn. Np:

TAJN
A WI
ADOM
OŚĆ

Metoda polega na odczytaniu tekstu w kolumnach, czyli w tym przypadku otrzymamy: TAAOA DŚJWOŚNIM

XOR
Szyfrowany tekst i klucz zapisujemy w postaci binarnej. Na odpowiednich bitach tekstu i klucza wykonujemy operację XOR, czyli:

0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

Otrzymana sekwencja bitów jest zaszyfrowanym tekstem. Odszyfrowanie sprowadza się do przeprowadzenia tej samej operacji na zaszyfrowanym tekście, gdyż jak łatwo sprawdzić

  (A XOR B) XOR B = A 

Więcej o szyfrach klasycznych (W. Guzicki)

Gra Life

Symulacja życia „bakterii” na planszy o podanych przez użytkownika rozmiarach.
Rozkład początkowy organizmów jest losowany lub może być wczytany z pliku.
Życie na planszy toczy się według następujących reguł:

  • jeśli puste pole jest otoczone przez co najmniej trzy bakterie to w tym miejscu powstaje nowa bakteria
  • jeżeli bakteria jest otoczona przez więcej niż trzy bakterie - ginie z braku pożywienia
  • jeśli bakteria posiada ma mniej niż 2 sąsiadów - ginie z samotności

Program powinien wyświetlać kolejne tury z życia kolonii.

Master Mind

Gra polegająca na odgadnięciu sekwencji czterech z sześciu możliwych symboli (np cyfr lub liter) wylosowanych na początku gry przez komputer.
Po każdej próbie program wyświetla następujące informacje:

  • liczba trafionych symboli ale na złych pozycjach
  • liczba trafionych symboli położonych w dobrym miejscu

W pliku tekstowym umieszczane są najlepsze wyniki.

Piętnastka

Program umieszcza na planszy 4×4 losowo ułożone liczby od 1 do 15 (lub znaki od „a” do „m”).

9  3 	    10 	 
5  6 	13   2 	 
1 14 	10  11 	 
4  7 	 8  15 	 

Celem jest w jak najmniejszej liczbie przesunięć danej liczby na wolne pole ułożyć je w porządku rosnącym.
Program łatwo można zmodyfikować tak aby działał dla planszy o dowolnej wielkości (dla chętnych).
W pliku tekstowym umieszczane są najlepsze wyniki.