DLL
Wersja B
Przetworzenie danych z pliku z wykorzystaniem funkcji zawartej w bibliotece
DLL.
- Zadanie:
- stworzyć bibliotekę DLL z jedną funkcją (wg poniższej specyfikacji)
znajdującą odpowiedź na podany niżej problem algorytmiczny
- użyć dołączonego do zadania programu wywołującego funkcję o spodziewanym
nagłówku i sprawdzającego wynik oraz czas działania funkcji
- poprawność merytoryczna i estetyczna kodu będzie oceniana
- konieczne jest pisanie komentarzy, ich styl i jakość będzie
oceniana
- dokonać analizy (w komentarzu w kodzie) złożoności zaimplementowanego
algorytmu dla przypadku optymistycznego, średniego i pesymistycznego
danych wejściowych (wystarczy podać złożoności i bardzo krótko uzasadnić)
- jeśli najlepszy wymyślony algorytm przekracza możliwości czasowe
zajęć, zaimplementować prostszy, ten lepszy opisać krótko w komentarzu
- może to zostać policzone na plus
- na otrzymaną liczbę punktów będzie miała wpływ szybkość działania
zaimplementowanego algorytmu na tle wszystkich wyników oraz optymalność
wykorzystania pamięci
- w przypadku jednakowych wyników czasowych żaden program nie zostanie
oceniony maksymalnie
- alokacja niepotrzebnej pamięci będzie obniżała ocenę
- Opis problemu algorytmicznego:
- w pierwszej linii pliku wejściowego znajduje się liczba wartości
zawartych w pliku, w każdej następnej linii znajduje się jedna liczba
całkowita ze znakiem
- liczb w pliku może być dowolnie dużo, każda z nich jest liczbą
całkowitą z przedziału [-40000,40000]
- problem polega na znalezieniu k-tej największej wartości spośród
wszystkich występujących w pliku
- na potrzeby tego zadania przyjąć, że szukana jest setna wartość,
ale algorytm ma zostać napisany uniwersalnie, z przyjęciem liczby
100 jako wartości pewnego parametru
- Funkcja postaci:
- BOOL DoLab8( LPCTSTR
lpszInputFile, int *nResult );
gdzie:
- lpszInputFile
WEJŚCIE: nazwa pliku wejściowego zawierającego dane
- nResult
WYJŚCIE: wartość obliczona przez funkcję dla danych z podanego
pliku
- zwracana wartość: TRUE jeśli wartość została obliczona, FALSE
w przypadku błędów
- UWAGA: poprawnie obsłużyć wszystkie sytuacje awaryjne, np. brak
pliku lub błąd przydziału pamięci
- W dołączonym do zadania pliku ZIP znajdują
się następujące pliki:
- Lab8Tester.exe - program wczytujący wskazaną bibliotekę DLL, sprawdzający
istnienie funkcji wg powyższego nagłówka i wykonujący funkcję dla
danych zawartych w plikach test1.dat, test2.dat, test3.dat
- wszystkie potrzebne opcje znajdują się w menu
- wczytywanie funkcji z DLL'a odbywa się w następujący sposób:
LoadLibrary( sDLLName
);
GetProcAddress( hDLL, "DoLab8" );
- UNICODE nie jest wykorzystywany
- test1.dat, test2.dat, test3.dat - przykładowe pliki z danymi wejściowymi
wykorzystywanymi przez program Lab8Tester.exe