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