Lista 6 (29 listopada 2005): 11 punktów.
Jeszcze raz przeczytaj z książki B.W.Kernighana i
D.M.Ritchiego Język ANSI C rozdział 4:
Funkcje i struktura programu.
Zwróć szczególną uwagę na dyrektywy dla preprocesora.
- (11 punktów)
W pliku nagłówkowym zadeklaruj dwie funkcje:
fibonacci_iter (int n) i fibonacci_rek (int n),
które będą wyliczać zadaną liczbę Fibonacciego w sposób
iteracyjny i rekurencyjny.
Implementację tych funkcji umieść w pliku pliku źródłowym,
w którym na początku włączysz wspomniany plik nagłówkowy dyrektywą
#include (dyrektywy włączania warunkowego #ifndef
i #endif umieść tylko w pliku nagłówkowym).
W kolejnym pliku źródłowym napisz program, który będzie
testował czas działania (najlepiej z dokładnościa do milisekund) obu
funkcji wyliczających liczby Fibonacciego i wypisywał na bieżąco te
czasy na standardowym wyjściu w formie tabelarycznej dla kolejnych
wartości poczynając od 1.
Uwaga:
Liczby Fibonacciego są zdefiniowane wzorem rekurencyjnym:
F0=0, F1=1
i Fn=Fn-1+Fn-2 dla
n≥2.
Uwaga:
Do mierzenia czasu wykonania określonego fragmentu programu
skorzystaj z funkcji ftime(struct timeb *tp) zadeklarowanej
w pliku nagłówkowym sys/timeb.h, wywołując ją dwukrotnie
(tuż przed uruchomieniem procedury oraz tuż po jej zakończeniu)
i wyliczając różnicę czasów.
- (11 punktów)
W pliku nagłówkowym zadeklaruj funkcję
porownajizamien (double *p1, double *p2), która ma porównać
ze sobą dwie liczby rzeczywiste wskazywane przez argumenty funkcji,
a jeśli pierwsza z nich będzie większa od drugiej, to zamienia je
miejscami.
Implementację tej funkcji umieść w pliku pliku źródłowym,
w którym na początku włączysz wspomniany plik nagłówkowy dyrektywą
#include (dyrektywy włączania warunkowego #ifndef
i #endif umieść tylko w pliku nagłówkowym).
Implementując funkcję porownajizamien() skorzystaj z dwóch
funkcji pomocniczych: porownaj (double d1, double d2)
i zamien (double *p1, double *p2).
Funkcja porownaj() ma porównywać dwie liczby rzeczywiste
i odpowiadać wartością -1, 0 lub 1 gdy liczba pierwsza jest
w stosunku do drugiej odpowiednio mniejsza, równa lub większa.
Natomiast funkcja zamien() ma zamieniać miejscami wskazywane
przez argumenty liczby rzeczywiste.
Ogranicz zasięg widoczności tych funkcji tylko do tego pliku,
w którym są one zdefiniowane.
W kolejnym pliku źródłowym napisz program, który będzie
wypełniał tablicę liczb rzeczywistych o określonym rozmiarze
(dyrektywa #define) losowymi wartościami z zakresu od -99
do 99, sortował je metodą bąbelkową i wypisywał już
uporządkowane na standarowym wyjściu.
Wypełnanie tablicy losowymi wartościami powinno być zaprogramowane
w osobnej funkcji losuj (int rozm, double *tab).
Do sortowania tablicy liczb także napisz osobną funkcję
sortowaniebabelkowe (int rozm, double *tab), która będzie
korzystała z funkcji porownajizamien() zadeklarowanej
w pliku nagłówkowym.
Zmierz czas działania (z dokładnością do milisekund) samego procesu
sortowania i wypisz go na standardowym wyjściu dla błędów.
Uwaga:
Do mierzenia czasu wykonania określonego fragmentu programu
skorzystaj z funkcji ftime(struct timeb *tp) zadeklarowanej
w pliku nagłówkowym sys/timeb.h, wywołując ją dwukrotnie
(tuż przed uruchomieniem procedury oraz tuż po jej zakończeniu)
i wyliczając różnicę czasów.
|