Doskonała inaczej
Poniższy algorytm wyznacza wszystkie dzielniki liczby naturalnej n ≥ 1 , mniejsze od n.
Specyfikacja algorytmu:
Dane: liczba naturalna n ≥ 1 ,
Wynik: ciąg liczb, które są dzielnikami liczby n, mniejszymi od n.
Algorytm:
1. d ←1
2. dopóki d < n wykonuj
2.1. jeżeli n mod d = 0, to wypisz d
2.2. d ← d+1
Uwaga: „n mod d” oznacza resztę z dzielenia liczby n przez d, np. 5 mod 2 = 1, 6 mod 2 = 0.
Zadanie A. Uzupełnij poniższą tabelę – podaj wyniki działania algorytmu dla wskazanych argumentów:
n | Wynik algorytu |
6 | 1 2 3 |
35 | |
56 | |
81 |
Zadanie B. Dla argumentu n instrukcja przypisania d←d+1 jest wykonywana w każdym przebiegu algorytmu n–1 razy. Zmień warunek pętli dopóki tak, aby liczba wykonań tej instrukcji była nie większa od n/2. Nowy warunek wpisz w wykropkowane miejsce.
1. d ← 1
2. dopóki ............................................. wykonuj
2.1. jeżeli n mod d = 0, to wypisz d
2.2. d ← d+1
Zadanie C. Liczbą doskonałą II rzędu nazywamy liczbę naturalną n, która jest równa iloczynowi wszystkich swoich dzielników mniejszych od niej samej. Liczba 6 jest taką liczbą, ponieważ 6 = 1·2·3. Podaj algorytm sprawdzający, czy liczba naturalna n>1 jest liczbą doskonałą II rzędu.
Specyfikacja:
Dane: liczba naturalna n > 1
Wynik: „TAK”, gdy liczba n jest liczbą doskonałą II rzędu,
bądź „NIE”, gdy liczba n nie jest liczbą doskonałą II rzędu.
Napisz algorytm.
Min-Max
Dana jest parzysta, dodatnia liczba całkowita n oraz n-elementowa tablica a[1..n] liczb całkowitych. Rozważ poniższy algorytm działający na tej tablicy.
Algorytm:
1. i ← 1
2. dopóki i < n wykonuj
2.1. jeżeli a[i] > a[i+1], to zamień zawartości a[i] oraz a[i+1]
2.2. i ← i+2
Zadanie A. Przeanalizuj podany algorytm i podaj wynik jego działania dla poniższych danych – wpisz odpowiednie liczby w wykropkowane miejsca.
dla n = 6, a = [ 45, 12, 7, 39, 20, 1 ]:
po wykonaniu algorytmu a = [ ......, ......, ......, ......, ......, ...... ]
dla n = 8, a = [ 21, 1, 56, 90, 8, 8, 19, 47 ]:
po wykonaniu algorytmu a = [ ......, ......, ......, ......, ......, ......, ......, ...... ]
Zadanie B. Uzupełnij poniższe zdanie tak, aby poprawnie opisywało ono zawartość tablicy a po wykonaniu algorytmu. Wstaw w pusty szary prostokąt poniżej jeden ze znaków „<”, „>”, „≤”, „≥”:
Dla każdego i = 1, 3, ..., n-1 mamy a[i] a[i+1]
Zadanie C. W poniższym algorytmie uzupełnij luki tak, aby znajdował on minimalną i maksymalną wartość w tablicy a[1..n] liczb całkowitych, gdzie n to parzysta liczba całkowita dodatnia. Wykorzystaj fakt, że z pary porównywanych ze sobą elementów ciągu tylko jeden warto brać pod uwagę jako kandydata na minimum i tylko jeden jako kandydata na maksimum.
Algorytm:
1. i ← 1
2. dopóki i < n wykonuj
2.1. jeżeli a[i] > a[i+1], to zamień zawartości a[i] oraz a[i+1]
2.2. i ← i+2
3. min ← ...................
4. max ← ...................
5. i ← 3
6. dopóki ......................................... wykonuj
6.1. jeżeli ..............................., to min ← ...............................
6.2. jeżeli ..............................., to max ← ...............................
6.3. i ← i+2
Rozważmy bazę danych z jedną tabelą Firma. Tabela ta zawiera następujące informacje (w nawiasach są nazwy kolumn): nazwa firmy (Nazwa), adres firmy (Adres), nazwa towaru (Towar), cena (Cena).
Przykładowe rekordy z tabeli:
Nazwa | Adres | Towar | Cena |
---|---|---|---|
Antena | Zapolska 71 | Telewizor S-11 | 2800 |
Kwak | Matejki 23 | Radio Q-989 | 590 |
Kwak | Matejki 23 | Telewizor | 1999 |
Moc | Nowa 87 | Bateria R-6-4 | 18 |
Antena | Zapolska 71 | Radio P-0219 | 560 |
Na przykładzie tej tabeli opisz następujące zjawiska:
1. Redundancja
2. Anomalia przy modyfikacji
Jak Twoim zdaniem powinien wyglądać schemat tabel?
Systemy pozycyjne.
W szóstkowym systemie pozycyjnym liczby reprezentujemy za pomocą cyfr od 0 do 5. Poniżej przedstawiono przykłady liczb zapisanych w systemie dziesiętnym oraz szóstkowym:
System dziesiętny | System szóstkowy |
---|---|
4 | 4 |
8 | 12 |
39 | 103 |
216 | 1000 |
Zadanie A. W poniższych działaniach wszystkie liczby są zapisane w systemie szóstkowym. Uzupełnij brakujące argumenty działań (liczbami zapisanymi w systemie szóstkowym), tak aby ichwyniki były poprawne.
10 6 * .................. = 1000 6
425 6 – .................. = 41 6
154 6 / .................. = 55 6
Zadanie B. Zapisz w wybranej przez siebie notacji (lista kroków, schemat blokowy, wybrany język programowania) algorytm obliczający wartość liczby zapisanej w systemie szóstkowym. Twój algorytm powinien być zgodny z poniższą specyfikacją.
Specyfikacja:
Dane:
d – dodatnia liczba całkowita, długość zapisu pewnej liczby w systemie szóstkowym
C[1..d] – tablica d-elementowa zawierająca kolejne cyfry szóstkowego zapisu tej liczby, poczynając od cyfry najmniej znaczącej.
Wynik:
w – wartość liczby
Przykład:
Dla d = 4 i C[0,0,0,1] wynikiem jest w = 216.
Dwie tablice
Rozważ następujący algorytm, który jest zgodny z poniższą niepełną specyfikacją:
Dane:
n, k – dodatnie liczby całkowite,
A[1..n] – tablica n liczb całkowitych z przedziału <1, k>
Wynik:
T[1..k] – tablica k liczb całkowitych z przedziału <0, n> i takich, że dla 1 ≤ i ≤ k wartości T[i] oznacza ...............................................................................
...................................................................................................................
Krok 1. dla kolejnych i = 1, 2..., k wykonaj T [i] ← 0
Krok 2. dla kolejnych i = 1, 2..., n wykonaj
pozycja ← A[i]
T [pozycja] ← T [pozycja]+1
Zadanie A. Podaj w tabeli wyniki działania powyższego algorytmu dla podanych liczb naturalnych n i k oraz tablic A. Uzupełnij opis wyniku w specyfikacji.
n | k | A | T |
---|---|---|---|
6 | 6 | [3, 5, 6, 2, 1, 4] | |
7 | 4 | [2, 3, 4, 2, 3, 1, 2] | |
7 | 3 | [3, 2, 3, 2, 3, 2, 3] | |
5 | 8 | [3, 3, 1, 5, 8] |
Zadanie B. Wykorzystując algorytm z zadania A., zapisz w wybranej przez siebie notacji algorytm, który w danej tablicy A znajdzie element występujący najczęściej w tej tablicy.
Uwaga: element występujący najczęściej to taki, którego liczba wystąpień jest większa od liczby wystąpień każdego innego elementu. Na potrzeby tego zadania przyjmijmy, że w tablicy A zawsze istnieje taki element. Twój algorytm powinien być zgodny z poniższą specyfikacją.
Przykład:
W tablicy [1, 2, 3, 2, 2] elementem występującym najczęściej jest 2.
W tablicy [1, 2, 3, 3, 2, 3, 3, 3] elementem występującym najczęściej jest 3.
Specyfikacja:
Dane:
n, k – dodatnie liczby całkowite
A[1..n] – tablica n liczb całkowitych z przedziału <1, k>
Wynik:
y – element występujący w tablicy A najczęściej.
Kompresja
Rozważmy algorytm kompresji, który zlicza liczbę kolejnych wystąpień tego samego znaku, a następnie zamiast całej grupy identycznych znaków podaje ten znak tylko jeden raz, poprzedzając go liczbą jego kolejnych wystąpień. Liczba kolejnych wystąpień każdego znaku nie przekracza 9, więc do zapisania tej liczby wystarczy jeden znak.
Przykład:
tekst źródłowy | tekst skompresowany |
rozmiar tekstu w liczbie znaków | |
źródłowego | skompresowanego | ||
FFFYYYYYYYYYFFFHAAAAA | 3F9Y3F1H5A | 21 | 10 |
Zadanie A. Skompresuj powyższym algorytmem tekst podany w tabeli, oblicz rozmiar tekstu przed kompresją i po kompresji.
tekst źródłowy | tekst skompresowany |
rozmiar tekstu w liczbie znaków | |
źródłowego | skompresowanego | ||
***##!!* |
Zadanie B. Ile powinna wynosić minimalna liczba kolejnych znaków w grupie, aby jej kompresja była opłacalna?
Zadanie C. Czy opisana metoda kompresji jest stratna, czy – bezstratna?
Zadanie D. Napisz (w postaci listy kroków, schematu blokowego, pseudokodu lub w wybranym języku programowania) algorytm obliczający rozmiar skompresowanego tekstu.
Specyfikacja:
Dane:
n – dodatnia liczba całkowita, długość kompresowanego tekstu
T[1..n] – tablica zawierająca tekst do skompresowania; T[i] – i-ty znak w tekście
Wynik:
b – rozmiar skompresowanego tekstu T
Zapis liczb.
Dowolną liczbę n ∈ N można zapisać za pomocą sumy: sumy jej cyfr i iloczynu pewnego współczynnika k oraz liczby 9, gdzie k ∈ N .
Przykłady:
19 = 1 + 9 + (1 * 9)
123 = 1 + 2 + 3 + (13 * 9)
Zadanie A. Uzupełnij tabelę – wpisz dla podanej liczby n jej rozkład i współczynnik k.
n | Rozkład liczby | k |
---|---|---|
11 | 1 | |
42 | ||
375 | ||
913 |
Zadanie B. Zapisz algorytm w wybranej przez siebie notacji obliczający sumę cyfr w zapisie dziesiętnym danej liczby n ∈ N . W zapisie algorytmu możesz korzystać tylko z następujących operacji arytmetycznych: dodawania, odejmowania, mnożenia, dzielenia całkowitego i obliczania reszty z dzielenia.
Specyfikacja:
Dane:
n ∈ N
Wynik:
s – suma cyfr liczby n
Zadanie C. Zapisz algorytm w wybranej przez siebie notacji, który oblicza współczynnik k dla n ∈ N . W zapisie algorytmu możesz korzystać tylko z następujących operacji arytmetycznych: dodawania, odejmowania, mnożenia, dzielenia całkowitego i obliczania reszty z dzielenia. Możesz również zastosować funkcję suma_cyfr(n) obliczającą sumę cyfr liczby n.
Specyfikacja:
Dane:
n ∈ N
Wynik:
współczynnik k w rozkładzie liczby n
Szyfrowanie.
Dany jest algorytm szyfrujący tekst jawny s o następującej specyfikacji:
Dane:
d – długość tekstu do zaszyfrowania, d > 1
s[1..d] – tekst jawny, ciąg znaków o długości d
k – liczba całkowita dodatnia taka, że k < d
n – liczba całkowita dodatnia taka, że n < d
Wynik:
szyfr [1..d] – zaszyfrowany tekst s
Algorytm:
od j=1 do d
szyfr[j] ← s[j]
i ← 1
dopóki i ≤ d – k
szyfr[i] ↔ szyfr[i+k]
i ← i+n
Operacja szyfr[a] ↔ szyfr[b] oznacza zamianę w ciągu szyfr znaku z pozycji a na znak z pozycji b – i na odwrót.
Zadanie A. Uzupełnij tabelę – wpisz zaszyfrowany tekst, który otrzymasz w wyniku wykonania algorytmu.
s | d | k | n | Szyfr |
---|---|---|---|---|
ataknadranem | 12 | 4 | 2 | |
maturazinformatyki | 18 | 3 | 5 | |
stokrotka | 9 | 1 | 2 |
Zadanie B. W kolumnie szyfr zapisano zaszyfrowany tekst s. Odszyfruj tekst i zapisz go w kolumnie s.
szyfr | d | k | n | s |
---|---|---|---|---|
eiindaezotinwezssyktpo | 22 | 2 | 2 |
Zadanie C. Uzupełnij zapis algorytmu tak, aby w wyniku jego działania otrzymać odszyfrowany tekst s.
Uwaga: W zapisie możesz wykorzystać operacje dodawania, odejmowania, mnożenia, dzielenia, dzielenia całkowitego i brania reszty z dzielenia całkowitego, operację zamiany dwóch znaków ↔ oraz samodzielnie napisane funkcje.
Specyfikacja:
Dane:
d – długość zaszyfrowanego tekstu, d > 1
szyfr [1..d] – zaszyfrowany tekst o długości d
k – liczba całkowita dodatnia taka, że k < d
n – liczba całkowita dodatnia taka, że n < d
Wynik:
s [1..d] – tekst jawny
Algorytm:
od j=1 do d
s[j] ← szyfr[j]
i ← 1
dopóki ..................
i ← i+n
dopóki i >= 1
s[i] ↔ s[i+k]
..................
Liczby pierwsze.
Parą liczb bliźniaczych nazwiemy dwie liczby pierwsze różniące się o 2. Liczbami bliźniaczymi są 11 i 13, gdyż obie liczby są pierwsze i różnica pomiędzy nimi wynosi 2. Para 13 i 15 nie jest parą liczb bliźniaczych, gdyż 15 jest liczbą złożoną.
Zadanie A. Uzupełnij poniższą tabelę. Wykonaj obliczenia i podaj odpowiedź, czy istnieje taka liczba, z którą liczba a tworzy parę liczb bliźniaczych.
Liczba a |
Czy liczba a jest pierwsza? |
Liczba b1=a+2 |
Czy liczba b1 jest pierwsza? |
Liczba b2=a-2 |
Czy liczba b2 jest pierwsza? |
Czy istnieje taka liczba b, z którą liczba a tworzy parę liczb bliźniaczych? |
---|---|---|---|---|---|---|
17 | tak | 19 | tak | 15 | nie | TAK |
5 | tak | 7 | tak | 3 | tak | TAK |
31 | ||||||
41 | ||||||
49 |
Zadanie B. Zapisz algorytm (w postaci listy kroków, schematu blokowego lub w wybranym języku programowania) sprawdzający, czy dana liczba należy do pary liczb bliźniaczych. Twój algorytm powinien być zgodny z poniższą specyfikacją.
Uwaga: w zapisie możesz wykorzystać tylko operacje dodawania, odejmowania, mnożenia, dzielenia, dzielenia całkowitego i brania reszty z dzielenia całkowitego, operacje logiczne oraz samodzielnie napisane funkcje.
Specyfikacja algorytmu:
Dane:
a – dodatnia liczba całkowita, a ≥ 3
Wynik:
komunikat TAK, jeżeli a należy do pary liczb bliźniaczych
komunikat NIE, jeżeli a nie należy do pary liczb bliźniaczych