Zadanie 1. (14 pkt) Algorytm Poniżej przedstawiony jest algorytm w formie schematu blokowego. Znak := oznacza przypisanie wartości. .............................................................................................................................................. c). Utwórz algorytm, który ze wszystkich powtarzających się elementów tablicy pozostawi po jednym, zagęszczając tablicę do jej początku. Przedstaw ten algorytm w postaci schematu blokowego wraz z odpowiednią specyfikacją problemu oraz opisem użytych zmiennych. Specyfikacja problemu i opis użytych zmiennych Dane wejściowe Wynik Opis użytych zmiennych Schemat blokowy Zadanie 2. (10 pkt) Średnia ocen W szkole jest N (0 < N < 1000) uczniów zapisanych w księdze uczniów od numeru 40001 do 40000+N. Każdemu uczniowi przypisana jest średnia ocen za rok szkolny 2003/2004 oznaczona przez Oi (gdzie i odpowiada numerowi ucznia). Podaj specyfikację, opis zmiennych i algorytm (w postaci krokowej i schematu blokowego) obliczania średniej ocen wszystkich uczniów w szkole i wypisujący numery par uczniów o równej średniej (każda para uczniów powinna wystąpić tylko raz). a) Specyfikacja problemu Dane wejściowe: Wynik: b) Opis użytych w algorytmie zmiennych Nazwa zmiennej Opis zmiennej a). Wpisz w tabelce specyfikację problemu i opis użytych zmiennych. Specyfikacja problemu i opis użytych zmiennych Dane wejściowe Wynik c) Postać krokowa algorytmu: d) Schemat blokowy Zadanie3. (11 pkt) Dodawanie liczb Dane są dwie liczby całkowite zawierające maksimum po 50 cyfr. Liczby te zapisano za pomocą zmiennych tekstowych. a) Opis użytych zmiennych iNkile - b). Wpisz ciąg wartości końcowych, jakie zostaną wygenerowane przez algorytm, jeżeli wprowadzone zostały następujące wartości początkowe: 1, 2, 3, 0, 0, 4, 5, 0, 6, 7. Czy możliwe jest zapisanie liczb zawierających 50 cyfr jako zmiennej całkowitej? Wpisz odpowiedź (Tak/Nie). .............................. Uzasadnij swoją odpowiedź. ...................................................................................................................................... b) Ile bajtów jest potrzeba do zapisu liczb naturalnych z zakresu <0,65535>? Wpisz odpowiedź. .............................. Uzasadnij swoją odpowiedź. c) ...................................................................................................................................... Utwórz algorytm dodawania dwóch liczb całkowitych zawierających do 50 cyfr. Liczby zapisano za pomocą zmiennych tekstowych. Przedstaw ten algorytm w formie schematu blokowego lub listy kroków wraz z odpowiednią specyfikacją problemu i opisem użytych zmiennych. Specyfikacja problemu i opis użytych zmiennych Dane wejściowe Wynik ss(5) ss(n) 1+2*(1+3*(1+…(n-2)*( )…)) n-2 Zapisz w wybranej przez siebie notacji (lista kroków, schemat blokowy lub język programowania) algorytm obliczania wartości funkcji ss(n) zgodnie ze wzorem zapisanym przez Ciebie w tabeli. Podaj specyfikację dla tego algorytmu. Dane: .......................................................................................................................................... Wynik: ......................................................................................................................................... Algorytm: Zadanie 5. 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ą. Opis użytych zmiennych Schemat blokowy lub lista kroków: Zadanie 4. Suma silni (11 pkt) Pojęcie silni dla liczb naturalnych większych od zera definiuje się następująco: 1 dla n = 1 (n -1)! * n dla n >1 n! = Rozpatrzmy funkcję ss(n) zdefiniowaną następująco: ss(n) = 1! + 2! + 3! + 4! + ... + n! (*) gdzie n jest liczbą naturalną większą od zera. a) Podaj, ile mnożeń trzeba wykonać, aby obliczyć wartość funkcji ss(n), korzystając wprost z podanych wzorów, tzn. obliczając każdą silnię we wzorze (*) oddzielnie. Uzupełnij poniższą tabelę. Wartość funkcji Liczba mnożeń ss(3) ss(4) ss(n) b) Zauważmy, że we wzorze na ss(n), czynnik 2 występuje w n–1 silniach, czynnik 3 w n– 2 silniach, ..., czynnik n w 1 silni. Korzystając z tej obserwacji przekształć wzór funkcji ss(n) tak, aby można było policzyć wartość ss(n), wykonując dokładnie n–2 mnożenia dla każdego 2 n ≥ . Uzupełnij poniższą tabelę (w ostatnim wierszu wypełnij tylko pusty prostokąt). Wartość Przekształcony wzór Liczba funkcji mnożeń ss(1) 1 0 ss(2) 1+2 0 ss(3) 1+2*(1+3) 1 ss(4) 1+2*(1+3*(1+4)) 2 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ą. Krok 1. Dla i = 2, 3, ... , N wykonuj T[i] := 0 Krok 2. i := 2 Krok 3. Jeżeli T[i] = 0 to przejdź do kroku 4, w przeciwnym razie przejdź do kroku 6 Krok 4. j := 2 * i Krok 5. 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. 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 w wybranej przez siebie notacji (lista kroków, schemat blokowy lub 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. Dla i = 2, 3, ... , N wykonuj T[i] := 0 Krok 2. i := 2 Krok 3. Jeżeli T[i] = 0 to przejdź do kroku 4, w przeciwnym razie przejdź do kroku 6 Krok 4. j := 2 * i Krok 5. Dopóki j ≤ N wykonuj T[j] := 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 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 wybranej przez siebie notacji (lista kroków, schemat blokowy lub 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. Zadanie 6. (15 pkt) Przeanalizuj działanie poniższego algorytmu, jeżeli tablica A zawiera n liczb całkowitych z zakresu <0, k>. 1. for i 0 to k 2. do B[i] 0; 3. pozycja 0; 4. for i 1 to n 5. do B[A[i]]B[A[i]] + 1; 6. for i 0 to k 7. do for j 1 to B[i] 8. do begin pozycja pozycja + 1; 9. A[pozycja] i end; a) Uzupełnij tabelę – określ typy zmiennych: i, j, A, B, pozycja i opisz ich przeznaczenie: Zmienna i,j A B pozycja Typ Przeznaczenie b) Opisz znaczenie czynności wykonywanych w wierszach o numerach: 4-5: ………………………………………………………………………. 6-9: ……………………………………………………………………….. c) Uzupełnij podane niżej zdania: Tablica B jest tablicą pomocniczą. Jeśli tablica A zawiera n liczb z zakresu <0, k>, to tablica B zawiera ……...… liczb z zakresu……………........ . Dla A = [1, 2, 4, 2, 0], po wykonaniu algorytmu, tablica B = [….., ….., ….., ….., …..]. Z uwagi na konieczność zastosowania dodatkowej tablicy, powyższego algorytmu nie można określić mianem ……………………………………………….. d) Przeprowadź analizę złożoności czasowej algorytmu i uzupełnij poniższy wniosek. Załóżmy, że k jest ustalone, np. zawsze równe 5. Wówczas: • złożoność czasowa przedstawionego algorytmu ma charakter: (podkreśl prawidłową odpowiedź) − liniowy − kwadratowy, − sześcienny, − wykładniczy; • symbolicznie złożoność taką można zapisać jako ……………………… . Zadanie 7. (12 pkt) Obliczanie wartości wielomianu dla zadanej wartości zmiennej można wykonać za pomocą tzw. schematu Hornera. Jednym z możliwych zastosowań schematu Hornera jest przeliczanie liczby zapisanej w dowolnym systemie liczbowym na jej wartość w systemie dziesiętnym. a) Opisz schemat Hornera, a następnie zapisz w wybranej przez siebie notacji (w postaci schematu blokowego, listy kroków lub w języku programowania) algorytm przeliczania liczby 10-cyfrowej zapisanej w systemie o podstawie n takiej, że n N n <2, 9>, na jej wartość w systemie dziesiętnym. W algorytmie wykorzystaj schemat Hornera. Opisz znaczenie użytych zmiennych. Dane wejściowe: n – podstawa systemu liczbowego, w którym podana jest liczba, tablica C[0..9] zawierająca 10 liczb odpowiadających kolejnym cyfrom liczby zapisanej w systemie o podstawie n. Cyfry podane są od najbardziej do najmniej znaczącej, tzn. że C[0] jest liczbą odpowiadającą najbardziej znaczącej cyfrze. Wynik: w – wartość liczby przeliczona na system dziesiętny. Przykład: Dane wejściowe: n=2 C=[1,0,0,1,0,0,1,1,1,1] Wynik: w=591 Opis schematu Hornera: Algorytm: Opis użytych zmiennych w postaci: nazwa, typ, przeznaczenie. b) Uzupełnij zdanie: Podczas obliczania wartości liczby 10-cyfrowej za pomocą schematu Hornera zostanie wykonanych .......... dodawań i ......... mnożeń . Zadanie 8. Wypłata (16 pkt) Pracownicy pewnego zakładu pracy otrzymują pensje w kwotach będących wielokrotnością 10 złotych. Kasjer, przygotowując wypłatę, przed pobraniem pieniędzy z banku musi obliczyć, ile potrzebuje banknotów o poszczególnych nominałach (10 zł, 20 zł, 50 zł, 100 zł, 200 zł) do zrealizowania wypłaty. Kasjer każdemu pracownikowi chce wypłacić pensję w możliwie najmniejszej liczbie banknotów. Przyjmijmy, że kwoty wypłat dla poszczególnych pracowników są podane w nelementowej tablicy WYPŁATY [1...n], gdzie n jest liczbą pracowników zakładu. Zaproponuj algorytm obliczania liczby banknotów w poszczególnych nominałach, które kasjer musi pobrać z banku. Wynik obliczeń należy umieścić w tablicy LICZBY [1...5], gdzie: LICZBY[1] to liczba banknotów o nominale 200 zł, LICZBY[2] to liczba banknotów o nominale 100 zł, LICZBY[3] to liczba banknotów o nominale 50 zł, LICZBY[4] to liczba banknotów o nominale 20 zł, LICZBY[5] to liczba banknotów o nominale 10 zł. Podaj specyfikację algorytmu i zapisz go w wybranej przez siebie notacji (lista kroków, schemat blokowy, język programowania). Specyfikacja algorytmu Dane: ........................................................................................................................................... Wynik: ......................................................................................................................................... Zadanie 9. Dziwny ciąg (14 pkt) Rozważamy ciąg liczb naturalnych D(n) dla n = 0,1,2,..., zdefiniowany następująco: 1 dla n =0 lub n = 1 D(n) = D(n div 4) + 1 dla parzystego n > 1 D(3 * n + 1) + 1 dla nieparzystego n > 1 Uwaga: operator div oznacza dzielenie całkowite, np.: 3 div 4 = 0, 15 div 2 = 7, 9 div 3 = 3. Na przykład: D(5) = D(16) + 1 = D(4) + 2 = D(1) + 3 = 4 a) Korzystając z powyższej definicji oblicz D(3), D(17), D(31). Zapisz poniżej swoje obliczenia. b) Przedstaw w wybranej przez siebie notacji (lista kroków, schemat blokowy lub język programowania) nierekurencyjny algorytm obliczania wartości D(n) dla danej liczby naturalnej n. Podaj specyfikację tego algorytmu. Specyfikacja algorytmu Dane: ........................................................................................................................................... Wynik: ......................................................................................................................................... Zadanie 10. Szeregi nieskończone i funkcje elementarne. (13 pkt) Wartości funkcji elementarnych, takich jak sin, cos, log, są obliczane za pomocą komputera w sposób przybliżony. Często stosuje się w tym celu wzory, które mają postać nieskończonych sum. Na przykład prawdziwy jest następujący wzór na wartość logarytmu naturalnego z liczby 2: 2 1 1 1 1 1 1 1 1 1 1 ln 2 (1 * * 2 * 3 * 4 * 5 ...) 3 3 9 5 9 7 9 9 9 11 9 W oparciu o powyższy wzór można zaprojektować i napisać program, który dla danej liczby ε (ε > 0) oblicza przybliżoną wartość ln 2, sumując jak najmniej wyrazów, aby różnica między dwoma ostatnimi przybliżeniami była mniejsza niż ε. Wprowadźmy oznaczenie: dla n ≥ 1 2 1 1 1 1 1 1 1 1 (1 * * 2 * 3 ... * n) 3 3 9 5 9 7 9 2n 1 9 2 l0 3 ln Wykonaj poniższe polecenia: a) Wypełnij tabelę: n ln 0 1 2 3 Poniżej podaj zależność pomiędzy wartościami ln i ln-1 dla każdego n=1, 2, ... Podaj wzór rekurencyjny na różnicę rn =ln – ln-1 dla n>0: b). Podaj algorytm ze specyfikacją (w postaci listy kroków, schematu blokowego lub w języku programowania), który dla danej liczby ε (ε > 0) oblicza przybliżoną wartość ln 2, sumując jak najmniej wyrazów we wzorze podanym w treści zadania, aby różnica między dwoma ostatnimi przybliżeniami była mniejsza niż ε. Zadanie 11. Ewolucja. (15 pkt) Na planecie MLAP każdy żyjący organizm ma postać napisu złożonego z dużych liter alfabetu łacińskiego. Każdy nowo powstały organizm opisywany jest literą A. Po każdym roku życia wielkość organizmu podwaja się w taki sposób, że każda z liter zostaje zastąpiona wiema literami zgodnie z pewnym ustalonym zbiorem reguł postaci: L→FS oznaczających, że literę L można zastąpić przez dwie litery: F S. O literze L mówimy ówczas, że występuje po lewej stronie reguły, a F i S występują po prawej stronie reguły. Przez wielkość organizmu rozumiemy tutaj długość odpowiedniego napisu. Rozważmy następujący zbiór reguł: A→BC A→CD B→AD C→BA D→AA D→BB Wówczas organizmy roczne mogą przyjąć jedną z postaci: BC CD zaś dwuletnie A D B A (A → B C → A D B A) B A A A (A → C D → B A A A) B A B B (A → C D → B A B B) O dwóch organizmach mówimy, że są w danym momencie odróżnialne, jeśli różne są odpowiadające im napisy (mają różne długości lub różnią się na co najmniej jednej pozycji). a) Wypisz poniżej wszystkie odróżnialne organizmy trzyletnie, które można uzyskać z organizmu dwuletniego o postaci ADBA. b) Podaj sposób sprawdzania dla danej liczby naturalnej n ≥ 1, czy mogą istnieć organizmy o długości n. W przypadku odpowiedzi pozytywnej należy również ustalić wiek organizmu o wielkości n. Podaj, ile poprawnych wielkości organizmów występuje w przedziale (n, m] dla liczb naturalnych n i m, gdzie n < m. Odpowiedź uzasadnij. c) Przyjmijmy, że każda litera pojawiająca się w regułach występuje dokładnie raz po lewej stronie reguły, przed „strzałką” (zauważmy, że powyższy przykład nie spełnia tego warunku, ponieważ litery A i D występują każda z lewej strony w dwóch regułach). Ile odróżnialnych organizmów w wieku 1, 2, 3 itd. może wówczas występować? Odpowiedź uzasadnij. d) Poniżej przedstawiona jest funkcja wspomagająca realizację następującego zadania: dla zadanego zbioru reguł, nowo powstałego organizmu start i danego napisu należy ustalić, czy napis ten przedstawia organizm, który można uzyskać przy pomocy reguł zadanych w treści zadania. Niech: L1 →F1 S1, L2 →F2 S2, ..., Lp →Fp Sp – dany zbiór reguł Specyfikacja funkcji sprawdź: Dane: napis – ................................................................................................. , start – .............................................................…................................. , Wynik: odpowiedź, czy napis przedstawia organizm, który można uzyskać przy pomocy podanych reguł, gdy nowo powstały organizm jest opisywany przez start. Treść funkcji sprawdź: - jeśli długość napisu nie jest potęgą liczby 2, to zakończ wykonywanie funkcji z odpowiedzią NIE. W przeciwnym razie wykonuj: - jeśli napis = start, to zakończ wykonywanie funkcji z odpowiedzią TAK; - jeśli długość napisu jest równa 1, to zakończ wykonywanie funkcji z odpowiedzią NIE; - podziel napis na dwie równe części: napis1 i napis2; - dla i=1, 2, ..., p wykonuj: jeśli Li = start, to - wykonaj funkcję sprawdź rekurencyjnie dla napis = napis1, start = Fi oraz dla napis = napis2 i start = Si; - jeśli oba rekurencyjne wywołania funkcji sprawdź zakończyły się odpowiedzią TAK, to zakończ wykonywanie funkcji z odpowiedzią TAK; - jeśli w powyższej pętli nie zakończyliśmy działania funkcji, to zakończ jej wykonywanie z odpowiedzią NIE. Dla podanej powyżej funkcji uzupełnij jej specyfikację. Podaj parametry wszystkich rekurencyjnych wywołań funkcji sprawdź przy uruchomieniu jej dla następującego zbioru reguł: A→BC A→CD B→AD C→BA D→AA D→BB oraz napis = B C A A A D C D i start = A. Jaką odpowiedź da funkcja w tym przypadku? Zadanie 12. Najlepsze sumy, najpopularniejsze elementy. (20 pkt) Najlepszą sumą ciągu liczb a1, a2, .., an nazywamy największą wartość wśród sum złożonych z sąsiednich elementów tego ciągu. Na przykład dla ciągu: 1, 2, –5, 7 mamy następujące sumy: 1, 1+2 = 3, 1+2+(–5) = –2, 1+2+(–5)+7 = 5, 2, 2+(–5) = –3, 2+(–5)+7 = 4, –5, –5+7 = 2, 7. Zatem najlepszą sumą jest 7 (zwróć uwagę, że jeden element też uznajemy za sumę). Do oceny oddajesz: Na nośniku WYNIKI dokument tekstowy Raport5 zawierający odpowiedzi do punktów a), b), c). Wykonaj poniższe polecenia. a) Dany jest następujący ciąg liczb całkowitych: 1, –2, 6, –5, 7, –3. Wyznacz najlepszą sumę dla tego ciągu i wpisz poniżej jej wartość: Najlepsza suma:.............................................. Czy na podstawie uzyskanego wyniku można podać wartość najlepszej sumy dla ciągu: 1, –2, 2, 2, 2, –5, 3, 3, 1, –3. Do oceny oddajesz w dokumencie Raport5 wartości najlepszej sumy dla ciągu oraz odpowiedź z uzasadnieniem na powyższe pytanie. b) Zaproponuj algorytm wyznaczania najlepszej sumy dla dowolnego ciągu liczb całkowitych. Na jego podstawie napisz program do obliczenia najlepszych sum ciągów liczb podanych w plikach dane5-1.txt, dane5-2.txt, dane5-3.txt (znajdującym się na nośniku DANE). Wpisz poniżej najlepsze sumy dla poszczególnych ciągów: Najlepsza suma dla dane5-1.txt Najlepsza suma dla dane5-2.txt Najlepsza suma dla dane5-3.txt Do oceny oddajesz także w dokumencie Raport5: • opis algorytmu zawierającego odpowiednie fragmenty kodu Twojego programu, • wartości najlepszych sum dla poszczególnych plików, które wpisałeś do powyższej tabeli. c) Wyznacz „najpopularniejszy” element w ciągu, czyli element występujący największą liczbę razy. Zaprojektuj jak najszybszy algorytm wyznaczania najpopularniejszego elementu ciągu oraz oszacuj liczbę wykonywanych przez niego operacji (czas działania) jako funkcję od liczby elementów w ciągu. Zaprogramuj swój algorytm i zastosuj go do ciągów znajdujących się w plikach dane5-1.txt, dane5-2.txt, dane5-3.txt. W przypadku, gdy w ciągu jest więcej niż jeden najpopularniejszy element, jako wynik podajemy dowolny z nich. Na przykład dla ciągu 1, 3, 5, 1, 3 poprawną odpowiedzią jest zarówno 1, jak i 3 (oba elementy występują dwa razy). Wpisz poniżej najpopularniejsze elementy dla poszczególnych ciągów: Najpopularniejszy element w dane5-1.txt Najpopularniejszy element w dane5-2.txt Najpopularniejszy element w dane5-3.txt ZADANIE 14. Ważenie (14pkt.) 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 Do oceny oddajesz w dokumencie Raport5: • najpopularniejsze elementy w plikach dane5-1.txt, dane5-2.txt, dane5-3.txt umieszczone w tabeli czytelnie prezentującej te wyniki, • opis algorytmu zawierającego odpowiednie fragmenty kodu Twojego programu oraz oszacowanie czasu jego działania. Zadanie 13. (14 pkt) Algorytm Specyfikacja problemu i użytych zmiennych: Dane wejściowe: N – liczba naturalna większa od 1 Wynik: ........................................................................................................................... .. Zmienna pomocnicza: M – liczba naturalna Opis algorytmu: Krok 1. Wczytaj liczbę N. Krok 2. Zmiennej M przypisz wartość N–1. Krok 3 . Sprawdź, czy M jest dzielnikiem N. Jeśli tak, to wypisz M i zakończ wykonywanie algorytmu. W przeciwnym razie przejdź do następnego kroku. Krok 4 . Zmniejsz o 1 wartość zmiennej M i przejdź do kroku 3 a) Jaki jest wynik działania (dane wyjściowe) powyższego algorytmu? Wpisz odpowiedź w wolne miejsce w specyfikacji problemu. b).Czy istnieją takie liczby N (zgodne ze specyfikacją problemu), dla których wykonywanie algorytmu nigdy się nie zakończy? Wpisz odpowiedź (Tak/Nie): .......................... Uzasadnij swoją odpowiedź: ....................................................................................................................... c) Dla jakich liczb N wynikiem algorytmu będzie liczba 1? Wpisz odpowiedź: .......................... Uzasadnij swoją odpowiedź: …………………………………………………………………………………………….. d) Podaj algorytm znajdowania wszystkich dzielników liczby naturalnej N>0. Przedstaw ten algorytm w formie schematu blokowego wraz z odpowiednią specyfikacją problemu i opisem użytych zmiennych. Specyfikacja problemu i użytych zmiennych Dane wejściowe: Wynik: Zmienne pomocnicze: Schemat blokowy: a Rysunek 1. Schematy 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 znalezienia najlżejszego i najcięższego przedmiotu. Odpowiedź uzasadnij. ZADANIE 15. Nagroda (14pkt.) Pływak Daniel Wodnik jest sponsorowany przez swojego wuja, który na zakończenie kariery pływackiej postanowił ufundować mu specjalną nagrodę pieniężną (w złotówkach). Daniel miał odnotowane wszystkie czasy uzyskiwane przez siebie w swojej koronnej konkurencji. Były one mierzone z dokładnością do setnych części sekundy. Wysokość nagrody będzie uzależniona od najlepszego podciągu. Najlepszym podciągiem jest najdłuższy malejący podciąg, złożony z kolejnych czasów. Nagrodą będzie tysiąckrotność długości najlepszego podciągu. Przykład Dla następującego ciągu czasów: 23,60; 23,40; 22,61; 24,42; 22,40; 22,22; 21,80; 22,80; 20,80; jego najlepszy podciąg ma długość 4 – jest nim podciąg: 24,42; 22,40; 22,22; 21,80. a) Uzupełnij specyfikację zadania: Jakiej wysokości nagrodę otrzyma Daniel? Dane: Wyniki: Tysiąckrotność długości najlepszego podciągu z ciągu danych. b) Kolega napisał Danielowi poniższy algorytm znajdowania najlepszego podciągu. Algorytm ten ma błędy. Aby się o tym przekonać, zastosuj go do ciągu z przykładu powyżej. Znajdź te błędy, podkreśl je w wydrukowanym algorytmie i popraw je. Algorytm. Poprawne fragmenty wpisz obok Krok 1: błędnych: Pobierz pierwszy czas z ciągu danych i zapamiętaj go jako aktualny czas. Ustaw długość aktualnego podciągu równą 0. Ustaw długość najlepszego podciągu równą 0. Krok 2: Powtarzaj Krok 3 dopóki w ciągu danych jest czas, którego jeszcze nie sprawdziłeś; następnie przejdź do Kroku 4. Krok 3: Aktualny czas zapamiętaj jako poprzedni czas. Pobierz kolejny czas z ciągu danych i zapamiętaj go jako aktualny czas. Jeśli aktualny czas jest mniejszy niż poprzedni czas, to zwiększ długość aktualnego podciągu o 1. W przeciwnym razie, jeśli długość aktualnego podciągu jest mniejsza od długości najlepszego podciągu, to zapamiętaj długość aktualnego podciągu jako długość najlepszego podciągu i ustaw długość aktualnego podciągu na 0. Krok 4: Jeśli długość aktualnego podciągu jest większa od długości najlepszego podciągu, to zapamiętaj długość aktualnego podciągu jako długość najlepszego podciągu. Krok 5: Ustal nagrodę jako długość najlepszego podciągu pomnożoną przez 1000 i zakończ algorytm. .......................................................... .......................................................... ……………………………………. ......................................................... ……………………………………. ......................................................... .......................................................... .......................................................... .......................................................... .......................................................... .......................................................... .......................................................... .......................................................... .......................................................... ......................................................... .......................................................... ……….............................................. .......................................................... …….................................................. ......................................................... .......................................................... .......................................................... .......................................................... …….……………………………… .......................................................... .......................................................... .......................................................... .......................................................... .......................................................... .......................................................... c) Podkreśl w poniższym ciągu danych elementy najlepszego podciągu: 22,43; 22,42; 23,29; 24,35; 25,37; 24,36; 29,25; 28,30; 26,28; 26,25; 25,21; 25,19; 24,21; 22,20; 22,17; 22,16; 23,15; 23,13; 23,10; 23,09; 23,12; 24,13; 22,12; 21,14. ZADANIE 16. Szyfrowanie tekstu Dany jest ciąg znaków, których dziesiętne kody ASCII są w przedziale od 32 do 127 (zob. tabela 1 – strona 35). Szyfrowanie z kluczem n polega na zastąpieniu każdego znaku z ciągu znakiem leżącym o n pozycji dalej (w tabeli znaków ASCII) od zastępowanego znaku. Przy szyfrowaniu znaku należy postępować w sposób cykliczny, tzn. po znaku o kodzie 127 przechodzimy do znaku o kodzie 32. a) Podaj znaki i ich kody dziesiętne ASCII otrzymane po zaszyfrowaniu znaku * (o kodzie 42) dla n = 121 i n = 1000; dla n = 1000 podaj sposób otrzymania wyniku. b) Podaj algorytm, który dla dowolnej liczby naturalnej n szyfruje (powyższą metodą) dowolne słowo złożone z m znaków (z tabeli 1). c) Kod znaku równa się 7A w układzie szesnastkowym. Podaj ten kod w układzie binarnym. Czy znak 1 i liczba 1 mają jednakową reprezentację w komputerze? Odpowiedź uzasadnij. ZADANIE 17. Algorytm Specyfikacja zadania. Dane: Uczniowie (co najmniej jeden) ustawieni w dowolnej kolejności. (W tym algorytmie, są wykorzystywane następujące dane o uczniu: nazwisko, imię oraz czas, jaki zabiera mu droga z domu do szkoły – uczeń zna ten czas). Wynik: ........................................................................................................................ . Algorytm Krok 1. Zapytaj pierwszego ucznia o jego dane, czyli jak się on nazywa (nazwisko i imię) oraz jak długo idzie do szkoły, i zapamiętaj je. Krok 2. Powtarzaj Krok 3 dopóty, dopóki w ustawieniu jest uczeń, któremu jeszcze nie zadałeś pytania. Podaj dane ostatnio zapamiętanego ucznia i zakończ wykonywanie algorytmu. Krok 3. Zapytaj kolejnego ucznia, jak długo idzie do szkoły. Jeśli krócej, niż zapamiętany uczeń, to zapamiętaj dane o nim na miejscu pamiętania danych o poprzednim uczniu. a) Uzupełnij specyfikację, czyli sformułuj, jaki jest wynik działania tego algorytmu. b) Przeformułuj ten algorytm tak, aby sprawdzał, czy wśród uczniów jest ktoś, kto idzie do szkoły dokładnie 10 min. Wynikiem są albo dane o uczniu, który idzie do szkoły 10 min., albo informacja, że takiego ucznia nie ma. c) Podaj algorytm dla specyfikacji: Dane: Uczniowie ustawieni według niemalejących czasów dojścia do szkoły, czyli od najkrócej idącego do szkoły do najdłużej idącego. Wynik: Dane o uczniu, który idzie do szkoły dokładnie 10 min., albo informacja, że takiego ucznia nie ma.