Przeczytaj
Zadanie 1. Gra w literki
Na planecie Morsjusz wszyscy obywatele komunikują się ze sobą pisemnie, kodując komunikaty z wykorzystaniem alfabetu Morse'a. Używają przy tym tylko pięciu liter:
A – w alfabecie Morse'a: .-
P – w alfabecie Morse'a: .--.
M – w alfabecie Morse'a: --
L – w alfabecie Morse'a: .-..
K – w alfabecie Morse'a: -.-
Państwo Kowalscy lubią grać w grę w literki. Każde wykorzystane w rozgrywce słowo zapisują przy użyciu pięciu liter zakodowanych za pomocą alfabetu Morse'a (przy czym litery w danym wyrazie mogą się powtarzać).
Plik literki.txt
zawiera
Przykładowe dane:
10.– .–.. .––. .– –.– .–
.–.. .– –– .––. –.– .–
.––. .–.. .– ––
–– .– .––. –.– .–
–.– .– .–.. –.– .–
–.– .–
–– .– .––. .–
.– .–.. .–
.– ––
–– .– –.– .– –.–
Zadanie 1.1
Napisz program, który odkoduje sekwencje sygnałów alfabetu Morse'a z pliku literki.txt
, oznaczające wykorzystane w grze słowa, a następnie zapisze je do pliku literki_odkodowane.txt
. Każdy odkodowany wyraz powinien być zawarty w osobnej linii pliku wyjściowego.
Poprawny wynik dla przykładowych danych wejściowych:
10ALPAKA
LAMPKA
PLAM
MAPKA
KALKA
KA
MAPA
ALA
AM
MAKAK
Do oceny oddajesz:
plik
literki_odkodowane.txt
, zawierający odpowiedź do zadania (odkodowane sekwencje sygnałów),plik(i) z kodem źródłowym programu.
Przedstaw rozwiązanie zadania w postaci programu napisanego w wybranym języku programowania (C++, Java lub Python). Zadbaj o prawidłowy odczyt i zapis danych z/do pliku tekstowego. Odpowiedź do zadania znajdziesz pod omówieniem rozwiązania.
Rozwiązanie
Rozpoczynamy od wczytania danych z pliku literki.txt
do tablicy literki
.
Tablica literki
to tablica jednowymiarowa, która będzie przechowywać wszystkie słowa (łańcuchy znaków) zapisane za pomocą alfabetu Morse'a z pliku.
Następnie deklarujemy zmienne linia
, podciag
oraz odkodowane
.
linia
– zmienna przechowująca kolejne słowa do odkodowania zapisane alfabetem Morse'a z tablicyliterki
;odkodowane
– zmienna, do której dopisywane są kolejne odkodowane litery; po odkodowaniu całego kodu Morse'a dla danego słowa w zmiennej znajdzie się słowo składające się z kolejnych odkodowanych liter;podciag
– zmienna służąca do odczytywania kolejnych znaków danego słowa.
4literki[0..99] ⟵ wczytaj dane z pliku "literki.txt"
linia ⟵ ""
odkodowane ⟵ ""
podciag ⟵ ""
Kolejnym krokiem jest utworzenie pętli. W każdej iteracji zostanie przetworzone pojedyncze słowo zapisane w tablicy literki
. Liczba cykli będzie zatem odpowiadać liczbie wierszy w pliku literki.txt
.
Pierwszą operacją wykonywaną w pętli będzie przypisanie zmiennej linia
i
-tego elementu tablicy literki
(czyli i
-tego zakodowanego słowa). Za ciągiem symboli alfabetu Morse'a umieszczony zostanie znak odstępu.
3dla i = 0, 1, … 99 wykonuj
linia ← literki[i]
linia ← linia + " "
Tworzymy pętlę wewnętrzną. Będziemy sprawdzać kolejne znaki przechowywane w zmiennej linia
. Przed wejściem do pętli należy jednak pamiętać o wyzerowaniu zmiennej podciąg
.
6dla i = 0, 1, … 99 wykonuj
linia ← literki[i]
linia ← linia + " "
podciag ← ""
dla j = 0, 1, … długość(linia) - 1 wykonuj
Zapisujemy instrukcję warunkową sprawdzającą, czy aktualnie analizowany element jest znakiem odstępu.
W momencie napotkania znaku odstępu następuje odkodowanie kodu Morse'a dla danej litery. Wykorzystywany jest przy tym zestaw zagnieżdżonych instrukcji warunkowych, pozwalający zinterpretować ciągi znaków alfabetu Morse'a jako litery A, M, K, L, P. Jeśli analizowany podciąg jest jedną z tych liter zakodowaną alfabetem Morse'a, litera to zostaje dopisana do zmiennej odkodowane
.
Po odkodowaniu kodu dla danej litery wartość zmiennej podciag
zostaje wyzerowana.
Jeżeli odczytany znak z ciągu linia
nie jest znakiem spacji, to znak ten jest dopisywany do zmiennej podciag
. W ten sposób do zmiennej podciag
dopisywane są kolejne znaki kodu Morse'a dla jednej litery (tak długo, dopóki odczytany znak nie będzie spacją).
Na przykład, jeżeli kodem Morse'a dla litery jest .--., to znaki te są sukcesywnie dopisywane do zmiennej podciag
dopóki nie napotkamy na spację, która sygnalizuje koniec kodu danej litery. Następnie program sprawdza, jaką literę zakodowano za pomocą znaków przechowywanych w zmiennej podciag
.
Po zakończeniu działania pętli wewnętrznej łańcuch znaków przechowywany w zmiennej odkodowane
jest zapisywany do pliku literki_odkodowane.txt
. Jest to odkodowane słowo z pliku.
Następnie wartość tej zmiennej jest zerowana.
Zamykamy pliki.
xxxxxxxxxx
tablica literki[0..99] <- wczytaj dane z pliku "literki.txt"
linia ← ""
litera ← ""
odkodowane ← ""
dla i = 0, 1, … 99 wykonuj
linia ← literki[i]
linia ← linia + " "
podciag ← ""
dla j = 0, 1, … długość(linia) - 1 wykonuj
jeżeli linia[j] = " " wykonuj
jeżeli podciag = ".-" wykonuj
odkodowane ← odkodowane + "A"
w przeciwnym razie jeżeli podciag = "--" wykonuj
odkodowane ← odkodowane + "M"
w przeciwnym razie jeżeli podciag = "-.-" wykonuj
odkodowane ← odkodowane + "K"
w przeciwnym razie jeżeli podciag = ".-.." wykonuj
odkodowane ← odkodowane + "L"
w przeciwnym razie jeżeli podciag = ".--." wykonuj
odkodowane ← odkodowane + "P"
podciag ← ""
w przeciwnym razie
podciag ← podciag + linia[j]
zapisz odkodowane do pliku literki_odkodowane.txt
odkodowane = ""
zamknij plik "literki.txt"
zamknij plik "literki_odkodowane.txt"
W programie wykorzystaliśmy funkcję długość(x)
. Funkcja długość(x)
zwraca długość łańcucha znaków x
. Ma ona swoje odpowiedniki w językach programowania.
Język C++
1x.length()
Język Java
1x.length()
Język Python
1len(x)
Odpowiedź
Poprawna odpowiedź do zadania dla danych z pliku:
literki_odkodowane.txt
Słownik
alfabet składający się z 26 liter: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z; należy pamiętać o tym, że mogą być to zarówno małe, jak i wielkie litery
sposób reprezentacji alfabetu, cyfr i znaków specjalnych za pomocą dźwięków, błysków światła, impulsów elektrycznych lub znaków popularnie zwanych kreską i kropką