Lista 3 (25 października 2005): 12 punktów.
Przeczytaj z książki B.W.Kernighana i D.M.Ritchiego
Język ANSI C rozdział 2:
Typy, operatory i wyrażenia.
- (2 punkty)
Napisz program, który wczytuje liczbę całkowitą reprezentującą rok.
Program ma sprawdzić, czy podany rok jest przestępny i wypisać
odpowiedni komunikat. Do testowania przestępności roku użyj funkcji
czyPrzestepny(int), która zwraca 1 gdy rok jest przestępny,
albo 0 w przeciwnym przypadku.
- (2 punkty, kontynuacja poprzednego zadania)
Napisz program, który wczytuje dwie liczby całkowite reprezentujące
odpowiednio miesiąc i rok. Program ma sprawdzić, ile dni ma zadany
miesiąc (luty ma różną liczbę dni w zależności od roku). Skorzystaj
z dwuwymiarowej tablicy dniWMiesiacu, w której są zapisane
liczby dni w poszczególnych miesiącach, osobno dla lat zwykłych
i przestępnych. Do tablicy tej powinieneś się odwoływać
w nastepujacy sposób:
dniWMiesiacu[czyPrzestepny(rok)][mies].
- (2 punkty, kontynuacja poprzednego zadania)
Napisz program, który wczytuje trzy liczby całkowite reprezentujące
odpowiednio dzień, miesiąc i rok. Program ma wyliczyć, ile dni
upłynęło do zadanego dnia od początku roku, oraz ile dni zostało
jeszcze do jego końca włącznie z tym dniem. Skorzystaj z pomocniczej
tablicy dwuwymiarowej dniOdPoczRoku, która będzie zawierała
informacje o liczbie dni od poczatku roku do końca poprzedniego
miesiąca minus jeden dzień. Obie wartości będziesz mógł wtedy bardzo
prosto wyliczyć. Przykładowo, dystans czasowy od początku roku do
1 stycznia wynosi 0 dni, a od 1 grudnia do końca
roku 31 dni.
- (3 punkty, kontynuacja poprzednego zadania)
Napisz program, który wczytuje trzy liczby całkowite reprezentujące
odpowiednio dzień, miesiąc i rok. Program ma sprawdzić czy podana
data jest prawidłowa (miesiąc z zakresu 1...12, dzień 1...). Weź też
pod uwagę fakt, że kalendarz Gregoriański obowiązuje od
15 października 1582. W swoim programie koniecznie
zaimplementuj funkcję
porownanieDat(int,int,int,int,int,int) porównującą dwie
daty, która będzie odpowiadać wartością -1 gdy pierwsza data jest
późniejsza niż druga, 0 gdy daty są takie same, 1 gdy pierwsza data
jest wcześniejsza niż druga.
- (3 punkty, kontynuacja poprzednego zadania)
Napisz program, który dwukrotnie wczytuje trzy liczby całkowite
reprezentujące odpowiednio dzień, miesiąc i rok (wczytujemy dwie
daty). Program ma sprawdzić, czy podane daty są poprawne, a potem
wyliczyć, ile dni upłynęło od pierwszej daty do drugiej. Liczba tych
dni ma wynieść 0 gdy obie daty są takie same, a w przypadku gdy
pierwsza data jest późniejsza niż druga program powinien wypisać
liczbę ujemną.
- (5 punktów)
Napisz program, który wczyta najpierw liczbę rzeczywistą
r≥0 a potem liczbę naturalną k<50.
Następnie program ma
stablicować wartości pi dla i=0...k-1
określone następującym wzorem rekurencyjnym:
p0 = 1 pi =
(r/pi-1+pi-1)/2 : i>0
Na koniec program ma wypisać w dwóch kolumnach wszystkie wyniki:
w pierwszej kolumnie wartości pi a w drugiej
różnicę pomiędzy pi a pierwiastkiem kwadratowym
z r (użyj funkcji sqrt z biblioteki
matematycznej).
- (7 punktów, kontynuacja poprzednego zadania)
Napisz program, który będzie w pętli wczytywał liczby rzeczywiste
i obliczał ich pierwiastki kwadratowe. Program ma działać, dopóki
użytkownik nie wpisze liczby ujemnej albo ciągu znaków, który nie
reprezentuje liczby (funkcja scanf zwraca liczbę poprawnie
dopasowanych wzorców). Do wyliczenia pierwiastka z zadanej liczby
n napisz własną rekurencyjną funkcję
pierwiastek(double,double), która będzie korzystała
z podanego w poprzednim zadaniu wzoru. W kolejnych wywołaniach
rekurencyjnych obliczana wartość zbiega właśnie do pierwiastka
kwadratowego z n. Obliczenia należy kontynuować, dopóki
|pi-pi-1| / pi-1 ≥
10-6.
|