Algorytmy - zadania



Zadanie 1

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.

Zadanie 2

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

Zadanie 3

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?

Zadanie 4

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.

Zadanie 5

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.

Zadanie 6

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

Zadanie 7

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

Zadanie 8

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]
   ..................

Zadanie 9

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