Przeczytaj
Zadanie 1. Kod Graya
Kod Graya jest to kod dwubitowy niepozycyjnyniepozycyjny, charakteryzujący się tym, że każde dwa kolejne jego słowa różnią się dokładnie jednym bitem. Pierwsze i ostatnie słowa również spełniają tę zasadę.
W 1‑bitowym kodzie Graya występują jedynie dwa słowa: 0 oraz 1.
W 2‑bitowym kodzie Graya występują następujące słowa: 00, 01, 11 i 10.
Jeżeli chcemy rozszerzyć kod Graya o 1 bit, posługujemy się następującym algorytmem:
Do istniejących słów w kodzie Graya dopisz te same słowa, lecz w odwrotnej kolejności (jak w odbiciu lustrzanym).
Na początku pierwszej połowy słów zapisz 0, natomiast na początku drugiej: 1.
Rozszerzenie 2‑bitowego kodu Graya do kodu 3‑bitowego:
Treść polecenia
Zapisz w wybranej przez siebie notacji (w postaci pseudokodu lub w wybranym języku programowania) algorytm, który wygeneruje n-bitowy kod Graya.
Specyfikacja problemu:
Dane:
n– liczba naturalna
Wynik:
kod[]– tablica napisów zawierająca słowan-bitowego kodu Graya
W zapisie algorytmu możesz wykorzystać tylko operacje arytmetyczne: dodawanie, odejmowanie, mnożenie, dzielenie, dzielenie całkowite, resztę z dzielenia, oraz porównywanie liczb; instrukcje sterujące i przypisania do zmiennych lub samodzielnie napisane funkcje zawierające wyżej wymienione operacje.
Możesz skorzystać z funkcji tablica.dopisz(x), która zwiększa rozmiar tablicy tablica o 1 i w dodanym miejscu umieszcza napis x, oraz funkcji pot(x,y) zwracającej operację podnoszenia liczby x do potęgi y.
Możesz przeprowadzać konkatenację (łączenie) napisów za pomocą wyrażenia +. Przykładowo zapis 0 + 1 będzie oznaczał połączenie tych dwóch napisów i zwróci wartość 01.
Przedstaw rozwiązanie zadania w postaci programu napisanego w wybranym języku programowania (C++, Java lub Python).
Rozwiązanie
Do wygenerowania kodu używamy algorytmu zawartego w treści zadania. Stosujemy jedynie dozwolone operacje. Rozwiązanie zapisane za pomocą pseudokodu prezentuje się następująco:
Na początku inicjujemy tablicę kody wartościami 0 oraz 1. Następnie, dopóki nie osiągniemy oczekiwanego rozmiaru kodu Graya, tworzymy kolejne słowa wedle algorytmu. Ponieważ nie uwzględniono w treści zadania żadnych wymagań dotyczących złożoności obliczeniowej, nie bierzemy jej pod uwagę.
Słownik
kod niepozycyjny to taki system liczbowy, w którym znaczenie cyfry (wartości) jest niezależne od zajmowanej pozycji w liczbie