Proszę napisać funkcję, która wyświetla na standardowym wyjściu menu opcji i obsługuje wybór opcji.Lista opcji może mieć dowolną długość - proszę rozwiązać zadanie wykorzystując funkcje o dowolnej liczbie argumentów. Zmienną liczbę argumentów funkcji można obsłużyć, korzystając z funkcji w bibliotece stdarg.
Filtrowanie sygnałów cyfrowych (np. obrazów) było przedmiotem jednego z zadań w jednym z poprzednich zestawów (tablice). Proszę napisać funkcję przyjmującą jako argumenty obraz do przefiltrowania, rozmiar filtra i nazwę funkcji tworzącej tablicę filtru. Proszę zaimplementować i przetestować działanie funkcji dla kilku filtrów.
Przykład użycia nazwy funkcji w liście argumentów innej funkcji przedstawiono na poniższym listingu
//.....
int BinSearch (char *item, char *table[], int n, int (*Compare)(const char*, const char*))
{
int bot = 0;
int top = n - 1;
int mid, cmp;
while (bot <= top) {
mid = (bot + top) / 2;
if ((cmp = Compare(item,table[mid])) == 0)
return mid; // return item index
else if (cmp < 0)
top = mid - 1; // restrict search to lower half
else
bot = mid + 1; // restrict search to upper half
}
return -1; // not found
}
int main()
{
char *cities[] = {"Boston", "London", "Sydney", "Tokyo"};
cout << BinSearch("Sydney", cities, 4, strcmp) << '\n';
return 0;
}
Argumenty linii poleceń
Użycie argumentów linii poleceń jest zaprezentowane w poniższym kodzie.
1. #include <stdio.h>
2.
3. int main(int argc, char *argv[])
4. {
5. int i;
6. for(i=0;i<argc;i++)
7. printf("%s\n",argv[i]);
8. }
W odróżnieniu od kodów przedstawionych dotychczas, funkcja main() posiada dwa argumenty (linia 3). Argument argc (typu całkowitego) przechowuje liczbę słów wpisanych w linii poleceń, uwzględniając nazwę programu. Tablica napisowa argv[], przechowuje słowa wpisane w linii poleceń: argv[0] jest nazwą programu, argv[1] jest pierwszym argumentem wywołanego programu (tylko gdy w linii poleceń wpiszemy coś więcej niż tylko nazwę programu) itd...
Program, którego kod zapisano powyżej można wywołać z linii komend systemu operacyjnego, dodając po nazwie programu dowolne słowa (Rys. 1), które mogą zostać w programie wykorzystane do konkretnych celów.
Rys. 1 Program wywołany z argumentami linii poleceń
Do wykonania poniższych zadań mogą się przydać funkcje biblioteczne do operacji na systemie plików, opisane na stronie http://www.gnu.org/software/libc/manual. Użycie funkcji może wymagać włączenia dodatkowych bibliotek (np. unistd.h).
Proszę napisać program, który listuje zawartość zadanej kartoteki. Program przyjmuje jako argument linii poleceń ścieżkę do kartoteki. Brak argumentów linii poleceń oznacza listowanie bieżącej kartoteki.
Proszę napisać program, który szuka w zadanej kartotece i wszystkich jej podkartotekach plików o zadanym rozszerzeniu. Argumenty należy pobrać z linii poleceń.
Proszę zmodyfikować program z Zadania 4 tak, aby argumenty linii poleceń były rozpoznawane w programie przez odpowiedni zestaw opcji na przykład wywołanie:
killingListing -d "." -e ".bmp"
oznacza wypisanie wszystkich plików o rozszerzeniu bmp (opcja -e) z bieżącej kartoteki (opcja -d). Oczywiście opcje e i d mogą wystąpić w dowolnej kolejności. Poza tym program powinien przyjmować opcję -l, która spowoduje wypisanie informacji o listowanych plikach/folderach. W programie należy posłużyć się metodami przewidzianymi do parsowania linii poleceń i ewentualnie funkcją system().