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