Programowanie proceduralne w j˛ezyku C

Transkrypt

Programowanie proceduralne w j˛ezyku C
Programowanie proceduralne w j˛ezyku C projekty 2006/2007
1
Zestaw funkcji (biblioteka) umożliwiajacy
˛ zarzadza˛
niem prostym testem wielotematycznym
Rezultatem jest program, którego celem jest przeprowadzenie prostego testu. Opis
testu znajduje si˛e w pliku opisu testu (np. plik tekstowy), którego format należy opracować samodzielnie. Plik powinien zawierać grupy tematyczne, oraz zbiór pytań wraz
z odpowiedziami należacymi
˛
do do każdej z grup. Przebieg testu powinien wygladać
˛
nast˛epujaco:
˛
losowanie tematu, informacja na ekranie o wybranej grupie, losowanie
pytania z grupy, oczekiwanie na odpowiedź, porównanie odpowiedzi ze wzorcem. Po
zadanej z góry liczbie powtórzeń należy zaprezentować statystyk˛e odpowiedzi (poprawne, niepoprawne) z podziałem na grupy tematyczne.
2
Biblioteka umożliwiajace
˛ operacje na liczba całkowitych o dowolnej precyzji.
Zestaw funkcji umożliwiajacych
˛
wykonywanie podstawowych operacji arytmetycznych (dodawanie, odejmowanie, mnożenie, dzielenie) na liczbach całkowitych.
Założenie: precyzja (wielkość liczb) jest nieograniczona. Projektujac
˛ funkcj˛e należy
opracować mechanizm przechowywania liczb w pami˛eci, uwzgl˛edniajac
˛ fakt, że ich
długość nie jest znana i może przyjmować dowolnie duża˛ wartość. Optymalnym rozwiazaniem
˛
jest przechowywanie liczb w pami˛eci w postaci pól bitowych, lecz dla potrzeb tego projektu można posłużyć si˛e rozwiazaniem
˛
opartym na założeniu, że każda
cyfr przechowywana jest w pojedynczym bajcie (zmiennej typu char), czyli cała˛ liczba
może być przechowywana w tablicy elementów tego typu. Najprostszym rozwiaza˛
niem jest wi˛ec posłużenie si˛e rozwiazaniem
˛
opartym na łańcuchach. W zwiazku
˛
z faktem, że rozmiar łańcuchów zmienia si˛e dynamicznie należy posłużyć si˛e dynamiczna˛
alokacja˛ pami˛eci.
Wszystkie wymienione wyżej operacje maja˛ dawać dawać dokładne wyniki. Wyjatkiem
˛
jest funkcja wykonujaca
˛ dzielenie, której wynikiem działania jest tylko cz˛eść
całkowita rezultatu.
Rozwiazanie
˛
problemu można oprzeć na prostej metodzie mnemotechnicznej operacji arytmetycznej – tzw. słupki (zakres szkoły podstawowej).
1
Programowanie proceduralne - J˛ezyk C. Projekty 2006/2007
3
2
Biblioteka umożliwiajace
˛ operacje na liczba zmiennoprzecinkowych o dowolnej precyzji.
Założenia analogiczne jak w punkcie 2. Operacje jednak maja˛ dotyczyć liczb rzeczywistych. Jako separator cz˛eści dziesi˛etnej należy wybrać sobie jeden ze znaków
ASCII, np. kropka lub przecinek. W zwiazku
˛
z tym, że wynik dzielenia dla liczb rzeczywistych może mieć nieskończone rozwini˛ecie, należy wyposażyć funkcj˛e wykonujac
˛ a˛ dzielenie w dodatkowy parametr określajacy
˛ maksymalna˛ długość rozwini˛ecia
(liczba cyfr rezultatu).
4
Biblioteka służaca
˛
do prostego przetwarzania
dźwi˛eku zapisanego w formacie WAV
Celem projektu jest stworzenie prostej biblioteki (zbioru funkcji) służacej
˛ do wykonywania prostych operacji na danych odczytanych z pliku typu WAV. Oprócz takich
operacji jak: echo, modulacja amplitudowa (vibrato), łaczenie
˛
(miksowanie) należy
zaimplementować także zapis przetworzonych danych do pliku WAV o takich samych
parametrach jak pliki wejściowe. W celu uproszczenia problemu można ograniczyć si˛e
do jednego rodzaju plików (np. próbki 8-bitowe, monofoniczne).
5
Biblioteka umożliwiajaca
˛ obsług˛e plików MIDI (format 0,1)
Prosta biblioteka (zbiór funkcji) umożliwiajacych
˛
operacje na plikach zawieraja˛
cych dane w formacie MIDI. Należy ograniczyć si˛e do standardu akceptowanego przez
popularne telefony komórkowe (format 0 ewentualnie format 1). Operacje: łaczenie,
˛
zmiana tempa itp. Ponadto konwersja z i do plików tekstowego zawierajacego
˛
zapis
nutowy, Format pliku tekstowego należy opracować samodzielnie.
Formaty plików typu MIDI można znaleźć pod nast˛epujacym
˛
adresem:
http://www.wotsit.org
6
Obsługa prostych metod steganograficznych w oparciu o format plików WAV
Napisać program, którego celem jest ukrywanie danych tekstowych w plikach
dźwi˛ekowych WAV (format bez kompresji). W celu uproszczenia problemu można
zdecydować si˛e jeden, wybrany format kodowania dźwi˛eku (liczba bitów, cz˛estotliwość próbkowania).
Założenia algorytmu steganograficznego można oprzeć na idei zmiany tylko najmłodszego bitu (najmniej znaczacego)
˛
słowa/bajtu zwiazanego
˛
z dana˛ próbka˛ dźwi˛ekowa.˛ Kodujac
˛ tekst można rozłożyć każdy ze znaków na sekwencj˛e 8 bitów i zakodować je w kolejnych próbkach.
Formaty plików typu WAV można znaleźć pod nast˛epujacym
˛
adresem:
http://www.wotsit.org
Programowanie proceduralne - J˛ezyk C. Projekty 2006/2007
3
Aby uzyskać ocen˛e b. dobra˛ należy uwzgl˛ednić zapisywanie w pliku dźwi˛ekowym
informacji o tym, że znajduja˛ si˛e tam zakodowane dane (aby uniknać
˛ wielokrotnego
ukrywania danych).
7
Prosta wektoryzacja plików bitmapowych BMP
Zbiór funkcji oraz program z nich korzystajacy,
˛ którego celem jest zamiana graficznego pliku binarnego na postać wektorowa.˛ Wyjściowy format może być jednym z
wybranych formatów wektorowych. W celu uproszczenia problemu można zastosować
format HPGL (proste komendy PU, PD, na takim poziomie problem jest trywialny).
Rozwiazanie
˛
problemu można oprzeć na idei przekształcenia obrazu bitmapy
na tablic˛e dwuwymiarowa˛ zawierajac
˛ a˛ jasności poszczególnych pikseli odpowiednio w wierszach i kolumnach, nast˛epnie wyszukiwaniu wierszami (dla wektoryzacji
poziomej–horyzontalnej) ciagów
˛
pikseli ciemnych i zamiana ich na wektor (lini˛e) rozpoczynajacy
˛ si˛e we współrz˛ednych poczatku
˛
sekwencji ciemnych pikseli i w analogicznym punkcie majacy
˛ swój koniec. Wektor taki można zapisać w j˛ezyku HPGL
jako sekwencja komend PU <wspx>,<wspy> i Pd <wspx>,<wspy>.
Formaty plików typu BMP i HPGL można znaleźć pod nast˛epujacym
˛
adresem:
http://www.wotsit.org
8
Program wspomagajacych
˛
rozwiazywanie
˛
krzyżówek
Należy napisać zestaw funkcji i w oparciu o nie program, którego celem jest wyszukiwanie w bazie wyrazów, takiego, który jest zgodny z zadanym wzorcem. Zasady stosowania wzorców sa˛ analogiczne jak te opisane w p. ??. Przykładowo, zapis:
’a?z??[e,i,o,u]*’ oznacza wyraz którego pierwsza˛ litera˛ jest ’a’, druga dowolna, trzecia ’z’, czwarta i piata
˛ dowolna, szósta: ’e’,’i’, ’o’ lub ’u’, pozostałe znaki zaś moga˛
być dowolne oraz dowolna też może być ich liczba.
List˛e wyrazów dla j˛ezyka polskiego (oraz innych) można znaleźć pod adresem:
http://www.winedt.org/Dict
9
Program dokonujacy
˛ prognozowania w oparciu o
metod˛e dekompozycji wskaźników (wahania przypadkowe, trend, wahania okresowe)
Dane wejściowe: plik tekstowy zawierajacy
˛ szereg czasowy, na podstawie którego należy dokonać prognozowania oraz okres czasu prognozy. Założenia dodatkowe:
trend liniowy (regresja liniowa), okres zmian okresowych ustalany r˛ecznie.
Dodatkowe materiały (slajdy 82–91):
http://www.ki.uni.lodz.pl/~cbolek/prognozowanie/Prognozowanie-mat(2).pdf
Przykład rozwiazania
˛
problemu w oparciu o arkusz Excel:
http://www.ki.uni.lodz.pl/~cbolek/prognozowanie/5-sezonowe.xls
Programowanie proceduralne - J˛ezyk C. Projekty 2006/2007
10
4
Generator liczb pseudolosowych
Napisać zestaw funkcji i przykładowy program je wykorzystujacy,
˛ którego celem
jest generowanie ciagu
˛ liczb losowych o zadanej liczności: Należy uwzgl˛ednić nast˛epujace
˛ rozkłady prawdopodobieństwa:
• równomierny
• normalny
• wykładniczy
• Studenta
• Poissona
• geometryczny
Dane wejściowe: liczba wygenerowanych liczb. Dane wyjściowe: tablica, plik
tekstowy)
11
Zarzadzanie
˛
zakładkami programu Netscape, Mozilla, FireFox
Napisać zestaw funkcji (bibliotek˛e) umożliwiajac
˛ a˛ proste operacje na plikach zakładek w/w programów: sortowanie alfabetyczne według nazwy strony i adresu, daty
utworzenia oraz ostatniej wizyty. Dodatkowe funkcje to: usuwanie odnośników starszych niż zadana data oraz odwiedzanych dawniej niż podana data, pozycjonowanie
stron z domeny ’pl’ na poczatku
˛ listy.
Biblioteka musi oczywiście uwzgl˛edniać zapis danych wyjściowych w formacie
w/w programów.
12
Symulacja stanu wagi tensometrycznej przy dozowaniu komponentów sypkich
Rozwiazanie
˛
prostego równania różniczkowego drugiego rz˛edu.
Pełniejsze informacje można znaleźć pod adresem:
http://ki.uni.lodz.pl/~cbolek/c/Tensometr.pdf
13
Wyszukiwanie i grupowanie danych dotyczacych
˛
kontraktów terminowych
Napisać program, wyszukujacy
˛ i grupujacy
˛ notowania kontraktów terminów na
GPW. Przykładowe dane:
http://ki.uni.lodz.pl/~cbolek/c/future.zip
Celem programu jest wyszukanie wszystkich rekordów (linii) w pliku tekstowym,
które zawieraja˛ taki sam kod operacji (KODN) i zapisanie ich do osobnego pliku (którego nazwa mo˛e być taka jak kod operacji). Należy tak postapić
˛ ze wszystkimi kontraktami, czyli utworzyć tyle plików ile jest kontraktów. Dodatkowe punkty można
Programowanie proceduralne - J˛ezyk C. Projekty 2006/2007
5
uzyskać przeprowadzajac
˛ analiz˛e statystyczna˛ kontraktów (max otwarcia, zamkni˛ecia,
średnia, itp)
14
Symulacja oddziaływań grawitacyjnych dowolnej
liczby ciał
Napisać program, którego celem jest generacja danych dotyczacych
˛
pr˛edkości i położenia zbioru ciał w przestrzeni. Należy założyć, że znana jest masa wszystkich ciał
oraz ich położenia i pr˛edkości poczatkowe.
˛
Dane te należy odczytać z pliku tekstowego
(format dowolny). Wynik symulacji należy zapisać do pliku type CSV, tak aby kolejne
kolumny zawierały odpowiednio informacje: położenia w trzech płaszczyznach i składowe pr˛edkości w trzech płaszczyznach. Rozwiazuj
˛ ac
˛ zadanie można posłużyć si˛e
metoda˛ Eulera.
15
Prosty analizator kodu w j˛ezyku C
Napisać program dokonujacy
˛ prostej analizy statystycznej kodów źródłowych programów napisanych w jezyku
˛
C. Statystyka powinna obejmować: list˛e wszystkich
funkcji (wraz z parametrami i zwracanymi wartościami), list˛e zmiennych globalnych,
list˛e zmiennych lokalnych (także tablice i struktury) itp.
16
Prosty analizator kodu w Pascal
Napisać program dokonuj+cy prostej analizy statystycznej kodów źródłowych programów napisanych w j˛ezyku Pascal. Statystyka powinna obejmować: list˛e wszystkich funkcji (wraz z parametrami i zwracanymi wartościami), list˛e zmiennych globalnych, list˛e zmiennych lokalnych (także tablice i struktury) itp.
17
Program wykonujacy
˛ statystyk˛e plików określonych typów na dysku
Napisać program analizujacy
˛ podany przez użytkownika katalog pod katem
˛
liczby
oraz wielkości plików. Efektem działania programu jest wykaz zawierajacy
˛ list˛e
wszystkich plików określonych typów w podanym katalogu i jego podkatalogach. Jako
typ pliku rozumiane jest jego rozszerzenie (czyli wszystkie znaki po ostatniej kropce
w jego nazwie, brak kropki w nazwie pliku oznacza plik bez określonego typu i taki
rodzaj też musi zostać wyszczególniony w spisie). Wydruk działania programu powinien zawierać co najmniej: rozszerzenie, liczb˛e wszystkich plików o tym rozszerzeniu
oraz i łaczny
˛
rozmiar.
W celu wyszukiwania plików można skorzystać z funkcji zawartych w bibliotece
<io.h>: _findfirst(. . . ), _findnext(. . . ).
Programowanie proceduralne - J˛ezyk C. Projekty 2006/2007
18
6
Biblioteka umożliwiajaca
˛ operacje na plikach zawierajace
˛ napisy do filmów
Napisać zestaw procedur i program, który służy do operacji na plikach zawierajacy
˛
napisy do filmów w popularnych standardach. Operacje: konwersja mi˛edzy wszystkimi formatami, zmiana skali czasowej, przesuni˛ecie itp.
Biblioteka powinna zawierać mi˛edzy innymi takie funkcje jak: załadowanie napisów do pami˛eci (tablica, lub lista struktur dynamicznie zaalokowanych, pojedyncza
struktura zawiera pełne informacje o pojedynczym napisie: tekst, czas itp), zapis danych z pami˛eci do pliku w określonym formacie, konwersja danych w pami˛eci.
Należy wybrać kilka (co najmniej trzy) popularne standardy formatów plików zawierajacych
˛
napisy.
19
Uzupełnianie plików tekstowych o polskie znaki diakrytyczne
Napisać program, który dokonuje analizy plików tekstowych zawierajacy
˛ tekst w
j˛ezyku polskim zapisany bez polskich znaków (polskie znaki zastapione
˛
ich łacińskimi
odpowiednikami a->a,
˛
ń->n itp) i dokonujacy
˛ ich konwersji do pliku, w którym wszystkie „ułomne” polskie wyrazy zostana˛ zastapione
˛
ich ortograficznie poprawnymi odpowiednikami (np. zoladek -> żoładek).
˛
Aby dokonać takiej konwersji należy posłużyć
si˛e lista˛ wszystkich słów w j˛ezyku polskim. Po załadowaniu jej do pami˛eci, należy
dokonać prostej analizy każdego wyrazu pod katem
˛
jego podobieństwa do wyrazów o
takiej samej długości znajdujacych
˛
si˛e w pami˛eci.
List˛e wyrazów dla j˛ezyka polskiego (oraz innych) można znaleźć pod adresem:
http://www.winedt.org/Dict