ZADANIE 1. Ważenie (14 pkt)

Transkrypt

ZADANIE 1. Ważenie (14 pkt)
ZADANIE 1.
Ważenie (14 pkt)
Danych jest n przedmiotów o niewielkich gabarytach i różnych wagach. Jest też do
dyspozycji waga z dwiema szalkami, ale nie ma odważników. Kładąc na wadze przedmioty
a i b, za pomocą jednego ważenia można ustalić, który przedmiot jest lżejszy (zob. rys. 1).
b
a
Rysunek 1. Schemat ważenia
Trzeba wybrać najlżejszy i najcięższy przedmiot spośród n przedmiotów, posługując się tylko
taką wagą.
a) Jaka jest najmniejsza liczba ważeń, którą trzeba wykonać, aby znaleźć najlżejszy
przedmiot? Odpowiedź uzasadnij.
b) Podaj specyfikację zadania jednoczesnego znajdowania najlżejszego i najcięższego
przedmiotu za pomocą tej wagi. Zapisz algorytm (w postaci listy kroków, schematu
blokowego lub wykorzystując język programowania) dla tego zadania, który wykonuje
możliwie najmniej ważeń.
c) Podaj, jaka jest liczba ważeń, którą trzeba wykonać w podanym przez Ciebie algorytmie
jednoczesnego znajdowania najlżejszego i najcięższego przedmiotu. Odpowiedź
uzasadnij.
Punktacja:
Części zadania
Maks.
a
3
b
8
c
3
14
Razem:
ZADANIE 2.
Układanie monet
Michał jest kolekcjonerem monet. Posiada ich ponad 500 z różnych epok i okresów
historycznych. Na odwrocie każdej z posiadanych przez niego monet wygrawerowano
informację o roku, w którym została ona wytłoczona.
Pewnego popołudnia Michał ułożył na podłodze w szeregu jedna obok drugiej 100 monet
i zaczął je przekładać według pewnego dość ścisłego algorytmu. Opis tego algorytmu
w postaci schematu blokowego jest zawarty na następnej stronie arkusza (pozycję monety
określamy odliczając od lewej strony szeregu monet).
a)
Przeanalizuj ten schemat, a następnie uzupełnij specyfikację tego algorytmu:
Dane: 100 monet ułożonych obok siebie na podłodze w przypadkowej kolejności.
Wynik:...........................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
..................................
b)
Jaki będzie wynik działania tego algorytmu, jeśli pierwsze pytanie w załączonym schemacie blokowym
otrzyma brzmienie: Czy moneta, którą trzymasz jest „starsza” niż sąsiednia moneta po lewej stronie?
Odpowiedź:..................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
..............................................................
START
k:=2
pozycja:=100
Weź do ręki ostatnią monetę
w szeregu (na pozycji 100)
Czy moneta, którą
trzymasz jest
„młodsza” niż
sąsiednia moneta po
lewej stronie?
N
Zamień miejscami
w szeregu
trzymaną monetę
oraz monetę po jej
lewej stronie
T
Odłóż trzymaną monetę na pozycję, na
której się znajdowała
pozycja:= pozycja – 1
Weź do ręki
monetę
znajdującą się
w szeregu na
numerze pozycja
Czy
pozycja < k?
N
T
k:=k+1
Czy
k>100?
N
T
KONIECC
c)
Ilu porównań wieku dwóch monet dokonuje ten algorytm? Podaj
ale opisz krótko rozumowanie i obliczenia, które Cię do tego wyniku doprowadziły.
nie
tylko
wynik,
Wskazówka: Zauważ, że wartość pozycja zawsze maleje o 1 począwszy od 100,
a kończy na wartości jaką właśnie ma k, a tymczasem k przyjmuje kolejno wartości 2, 3, ...,
itd.
Odpowiedź:
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
.....................................................................................................................................................................................
..........................................................................................................................................................
Michał opuścił na chwilę pokój, a po powrocie zobaczył, że młodszy brat rozrzucił monety po podłodze. Z
żalem stwierdził, iż nie ma już czasu, aby ponownie układać monety w sposób opisany w algorytmie z punktu
a). Chciałby jedynie odnaleźć wśród tych 100 monet monetę najstarszą oraz monetę najmłodszą.
d)
Pomóż Michałowi i przygotuj algorytm, który pozwoli mu zrealizować to zadanie. Zapisz go w języku
programowania.. Algorytm ten powinien przewidywać wykonanie jak najmniejszej liczby operacji.
Odpowiedź:
Zadanie 23.
Liczby pierwsze (13 pkt)
Poniżej przedstawiono algorytm wyznaczający wszystkie liczby pierwsze z przedziału [2, N],
wykorzystujący metodę Sita Eratostenesa. Po zakończeniu wykonywania tego algorytmu, dla
każdego i = 2, 3, ... , N, zachodzi T[i]=0, jeśli i jest liczbą pierwszą, natomiast T[i]=1,
gdy i jest liczbą złożoną.
Dane: Liczba naturalna N  2 .
Wynik: Tablica T[2...N], w której T[i] = 0, jeśli i jest liczbą pierwszą, natomiast T[i]=1,
gdy i jest liczbą złożoną.
Dla i = 2, 3, ... , N wykonuj T[i] := 0
i := 2
Jeżeli T[i] = 0 to przejdź do kroku 4, w przeciwnym razie przejdź do kroku 6
j := 2 * i
Dopóki j  N wykonuj
T[j] := 1
j := j + i
Krok 6.
i := i + 1
Krok 7.
Jeżeli i < N, to przejdź do kroku 3, w przeciwnym razie zakończ wykonywanie
algorytmu
Uwaga: „:=” oznacza instrukcję przypisania.
Krok 1.
Krok 2.
Krok 3.
Krok 4.
Krok 5.
a)
Dane są: liczba naturalna M  1 i tablica A[1...M] zawierająca M liczb naturalnych z przedziału [2, N].
Korzystając z powyższego algorytmu, zaprojektuj algorytm, wyznaczający te liczby z przedziału [2, N],
które nie są podzielne przez żadną z liczb A[1],...,A[M]. Zapisz go język programowania wraz
ze specyfikacją.
b) Do algorytmu opisanego na początku zadania wprowadzamy modyfikacje, po których ma on następującą
postać:
Krok 1.
Krok 2.
Krok 3.
Krok 4.
Krok 5.
Krok 6.
Krok 7.
Dla i = 2, 3, ... , N wykonuj T[i] := 0
i := 2
Jeżeli T[i] = 0 to przejdź do kroku 4, w przeciwnym razie przejdź do kroku 6
j := 2 * i
Dopóki j  N wykonuj
T[j] := T[j] + 1
j := j + i
i := i + 1
Jeżeli i < N, to przejdź do kroku 3, w przeciwnym razie zakończ wykonywanie
algorytmu
Podaj, jakie będą wartości T[13], T[24], T[33] po uruchomieniu tak zmodyfikowanego algorytmu dla N=100.
Podaj, dla jakiej wartości T[i], dla i z przedziału [2, N], i jest liczbą pierwszą.
Napisz, jaką własność liczb i = 2,...,N określają wartości T[i] po wykonaniu tak zmodyfikowanego algorytmu.
c)
Sito Eratostenesa służy do wyznaczania wszystkich liczb pierwszych z zadanego przedziału [2, N]. Podaj w
język programowania inny algorytm, który sprawdza, czy podana liczba naturalna L>1 jest liczbą pierwszą.
Zauważ, że chcemy sprawdzać pierwszość tylko liczby L, natomiast nie jest konieczne sprawdzanie
pierwszości liczb mniejszych od L. Przy ocenie Twojego algorytmu będzie brana pod uwagę jego złożoność
czasowa.
Specyfikacja:
Dane: Liczba naturalna L  1 .
Wynik: Komunikat „Tak”, jeśli L jest liczbą pierwszą, komunikat „Nie” w przeciwnym razie.
Punktacja:
Maks.
Części zadania
a
b
c
Razem
4
3
6
13
Zadanie 4.
Największy wspólny dzielnik – NWD (10 pkt)
Algorytm opisany w Księdze VII Elementów Euklidesa pozwala szybko obliczyć największy wspólny dzielnik
dwóch liczb naturalnych a i b –
sposób obliczania
nwd  a, b  , z których co najmniej jedna jest większa od 0. Oto rekurencyjny
nwd  a, b  :
a dla b  0
nwd (a, b)  
nwd ( b, a mod b ) dla b  1
gdzie: mod – operator dzielenia modulo; wynikiem jego działania jest reszta z dzielenia a przez b, na
przykład 19 mod 7 = 5.
Przykład:
nwd 16,12   nwd 12, 4   nwd  4, 0   4 – funkcja nwd jest wywoływana w tym przypadku
3 razy:
a)
Podaj liczbę wywołań funkcji dla a  56 i b  72 oraz dla a  72 i b  56 .
b) Podaj w język programowania nierekurencyjny algorytm obliczania wartości funkcji
nwd  a, b  wraz ze
specyfikacją.
Specyfikacja:
Dane: ............................................................................................................................................
............................................................................................................................................
Wynik: ...........................................................................................................................................
............................................................................................................................................
Nr zadania
Wypełnia
Maksymalna liczba pkt
egzaminator!
Uzyskana liczba pkt
3a)
2
3 b)
8
Zadanie 5. Pierwiastek kwadratowy (6 pkt)
Zauważmy, że pierwiastek kwadratowy liczby rzeczywistej a  1 należy do przedziału
a  [l , r ] wówczas możemy ograniczyć przedział zawierający
a
s  (l  r ) / 2 w środku przedziału [l , r ] jest mniejsza od pierwiastka z a:
s 2  a , wówczas

jeśli

w przeciwnym razie
[1, a ] . Jeśli wiemy, że
sprawdzając, czy wartość
a  [ s, r ] ;
a  [l , s ] .
W ten sposób możemy stopniowo zawężać przedział zawierający wartość a .
Zawężanie przedziałów wykonujemy max razy, gdzie max to parametr wejściowy pozwalający dopasowywać do
potrzeb czas i dokładność obliczeń. Na koniec za przybliżenie wartości pierwiastka możemy przyjąć środek
ostatniego przedziału.
Przykład:
Dla a = 30 oraz max = 3, kolejne kroki wyglądają następująco:
Zawężenie
0
1
2
3
l
1
1
1
4,625
r
30,00
15,50
8,25
8,25
s = (l+r) / 2
15,500
8,250
4,625
6,4375
s2  a ?
Nie
Nie
Tak
Przybliżona wartość pierwiastka: 6,4375
Twoje zadanie:
a) Prześledź działanie powyżej opisanej metody dla a = 29 oraz max = 5. Wyniki zapisz w poniższej tabelce:
Zawężenie
l
r
0
1
29
s = (l+r) / 2
s2  a ?
1
2
3
4
5
Przybliżona wartość pierwiastka: .................................................................................................
b) Podaj algorytm zgodny z poniższą specyfikacją, który wyznacza przybliżenie wartości pierwiastka danej
liczby rzeczywistej a według opisanej powyżej metody. Swój algorytm zapisz w języku programowania.
Specyfikacja
Dane: liczba rzeczywista a  1 oraz liczba całkowita max > 0
Wynik: Przybliżona wartość a
Algorytm
Nr zadania
Wypełnia Maks. liczba pkt
egzaminator!
Uzyskana liczba pkt
1a)
2
1b)
4