Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Kod Morse'a to sposób reprezentacji liter, cyfr i znaków specjalnych za pomocą dźwięków, błysków światła lub innych znaków, określanych jako kropka i kreska. Nadawanie odbywa się za pomocą kilkuelementowych serii krótkich lub długich znaków, przy czym jeden znak długi powinien trwać co najmniej tyle, ile trzy znaki krótkie. Takie określenie składowych oraz czasu trwania każdego ze znaków pozwala na nadanie zakodowanego sygnału przy użyciu zaimprowizowanych środków.

W alfabecie Morse'a długość kodu znaku wynika z częstotliwości jego występowania w słowach w języku angielskim. Im częściej jest używana litera, tym ma krótszy kod. W tabeli zaprezentowano znaki kodu Morse'a dla liter alfabetu łacińskiego:

Znak

Kod Morse'a

Znak

Kod Morse'a

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

— — • •

1
Polecenie 1

Określ, jaka litera kryje się pod zapisem dźwiękowym. Do pobrania plik dźwiękowy w formacie ogg.

RrM9uAYQ7cy2f

Plik audio z kodem morsa.

Źródło: JoeDeRose, dostępny w internecie: pl.wikipedia.org [dostęp 10.09.2021], domena publiczna.
Plik OGG o rozmiarze 10.00 KB w języku polskim
Ważne!

W oficjalnym opisie sygnalizacji kodem Morse'a odstępy między znakami są sygnalizowane długością przerwy. Na nasze potrzeby (generowania znaków) posłużymy się znakiem # jako separatorem znaków.

1
Ćwiczenie 1

Napisz program, który podany ciąg wejściowy przedstawi w formie kodu Morse'a, bądź odkoduje napis zapisany kodem Morse'a. Aby ugruntować wiedzę o programowaniu obiektowym, użyj odpowiednio zdefiniowanej klasy.

Specyfikacja:

Dane:

  • alfabet_morse – słownik; kluczem jest napis składający się z jednego znaku (wielkiej litery pochodzącej z polskiego alfabetu); wartością jest napis składający się ze znaków: „-”, „.”; zapis znaku‑klucza w alfabecie Morse'a

  • tekst – ciąg znaków do zakodowania/odkodowania składający się z liter alfabetu polskiego, cyfr lub znaków specjalnych

Wynik:

  • Na standardowym wyjściu program wypisuje, w zależności od trybu pracy, zakodowany lub odkodowany tekst.

Zdefiniujmy klasę z polem zawierającym słownik niezbędny do zmiany znaków ASCIIASCIIASCII na kod Morse'a i odwrotnie. Napiszmy kod, który sprawdzi, czy wprowadzony napis jest zapisany kodem Morse'a – w zależności od wyniku w trakcie inicjacji obiektu wykonana zostanie odpowiednia metoda. Posłużymy się zapisem z tzw. type hintstype hintstype hints.

Linia 1. class Morse podkreślnik Code dwukropek. Linia 3. alfabet podkreślnik morse znak równości otwórz nawias klamrowy. Linia 4. cudzysłów A cudzysłów dwukropek cudzysłów kropka minus cudzysłów przecinek. Linia 5. cudzysłów B cudzysłów dwukropek cudzysłów minus kropka kropka kropka cudzysłów przecinek. Linia 6. cudzysłów C cudzysłów dwukropek cudzysłów minus kropka minus kropka cudzysłów przecinek. Linia 7. cudzysłów D cudzysłów dwukropek cudzysłów minus kropka kropka cudzysłów przecinek. Linia 8. cudzysłów E cudzysłów dwukropek cudzysłów kropka cudzysłów przecinek. Linia 9. cudzysłów F cudzysłów dwukropek cudzysłów kropka kropka minus kropka cudzysłów przecinek. Linia 10. cudzysłów G cudzysłów dwukropek cudzysłów minus minus kropka cudzysłów przecinek. Linia 11. cudzysłów H cudzysłów dwukropek cudzysłów kropka kropka kropka kropka cudzysłów przecinek. Linia 12. cudzysłów I cudzysłów dwukropek cudzysłów kropka kropka cudzysłów przecinek. Linia 13. cudzysłów J cudzysłów dwukropek cudzysłów kropka minus minus minus cudzysłów przecinek. Linia 14. cudzysłów K cudzysłów dwukropek cudzysłów minus kropka minus cudzysłów przecinek. Linia 15. cudzysłów L cudzysłów dwukropek cudzysłów kropka minus kropka kropka cudzysłów przecinek. Linia 16. cudzysłów M cudzysłów dwukropek cudzysłów minus minus cudzysłów przecinek. Linia 17. cudzysłów N cudzysłów dwukropek cudzysłów minus kropka cudzysłów przecinek. Linia 18. cudzysłów O cudzysłów dwukropek cudzysłów minus minus minus cudzysłów przecinek. Linia 19. cudzysłów P cudzysłów dwukropek cudzysłów kropka minus minus kropka cudzysłów przecinek. Linia 20. cudzysłów Q cudzysłów dwukropek cudzysłów minus minus kropka minus cudzysłów przecinek. Linia 21. cudzysłów R cudzysłów dwukropek cudzysłów kropka minus kropka cudzysłów przecinek. Linia 22. cudzysłów S cudzysłów dwukropek cudzysłów kropka kropka kropka cudzysłów przecinek. Linia 23. cudzysłów T cudzysłów dwukropek cudzysłów minus cudzysłów przecinek. Linia 24. cudzysłów U cudzysłów dwukropek cudzysłów kropka kropka minus cudzysłów przecinek. Linia 25. cudzysłów V cudzysłów dwukropek cudzysłów kropka kropka kropka minus cudzysłów przecinek. Linia 26. cudzysłów W cudzysłów dwukropek cudzysłów kropka minus minus cudzysłów przecinek. Linia 27. cudzysłów X cudzysłów dwukropek cudzysłów minus kropka kropka minus cudzysłów przecinek. Linia 28. cudzysłów Y cudzysłów dwukropek cudzysłów minus kropka minus minus cudzysłów przecinek. Linia 29. cudzysłów Z cudzysłów dwukropek cudzysłów minus minus kropka kropka cudzysłów przecinek. Linia 30. cudzysłów Ą cudzysłów dwukropek cudzysłów kropka minus kropka minus cudzysłów przecinek. Linia 31. cudzysłów Ć cudzysłów dwukropek cudzysłów minus kropka minus kropka kropka cudzysłów przecinek. Linia 32. cudzysłów Ę cudzysłów dwukropek cudzysłów kropka kropka minus kropka kropka cudzysłów przecinek. Linia 33. cudzysłów Ł cudzysłów dwukropek cudzysłów kropka minus kropka kropka minus cudzysłów przecinek. Linia 34. cudzysłów Ń cudzysłów dwukropek cudzysłów minus minus kropka minus minus cudzysłów przecinek. Linia 35. cudzysłów Ó cudzysłów dwukropek cudzysłów minus minus minus kropka cudzysłów przecinek. Linia 36. cudzysłów Ś cudzysłów dwukropek cudzysłów kropka kropka kropka minus kropka kropka kropka cudzysłów przecinek. Linia 37. cudzysłów Ż cudzysłów dwukropek cudzysłów minus minus kropka kropka minus kropka cudzysłów przecinek. Linia 38. cudzysłów Ź cudzysłów dwukropek cudzysłów minus minus kropka kropka minus cudzysłów przecinek. Linia 39. zamknij nawias klamrowy. Linia 41. def podkreślnik podkreślnik init podkreślnik podkreślnik otwórz nawias okrągły self przecinek ciag podkreślnik wejsciowy dwukropek str zamknij nawias okrągły minus zamknij nawias ostrokątny None dwukropek. Linia 42. self kropka ciag podkreślnik wejsciowy znak równości ciag podkreślnik wejsciowy kropka upper otwórz nawias okrągły zamknij nawias okrągły. Linia 43. self kropka ciag podkreślnik znakow znak równości None. Linia 44. self kropka ciag podkreślnik kodow znak równości None. Linia 45. if self kropka ciag podkreślnik wejsciowy kropka isalpha otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 46. self kropka kierunek znak równości cudzysłów ASCII minus Morse cudzysłów. Linia 47. self kropka ciag podkreślnik znakow znak równości self kropka ciag podkreślnik wejsciowy. Linia 48. self kropka zakoduj podkreślnik morse otwórz nawias okrągły zamknij nawias okrągły. Linia 49. else dwukropek. Linia 50. self kropka kierunek znak równości cudzysłów Morse minus ASCII cudzysłów. Linia 51. self kropka ciag podkreślnik kodow znak równości self kropka ciag podkreślnik wejsciowy. Linia 52. self kropka odkoduj podkreślnik morse otwórz nawias okrągły zamknij nawias okrągły. Linia 54. def zakoduj podkreślnik morse otwórz nawias okrągły self zamknij nawias okrągły minus zamknij nawias ostrokątny str dwukropek. Linia 55. separator znak równości cudzysłów kratka cudzysłów. Linia 56. zakodowany podkreślnik tekst znak równości cudzysłów cudzysłów. Linia 58. for znak in self kropka ciag podkreślnik znakow dwukropek. Linia 59. try dwukropek. Linia 60. zakodowany podkreślnik tekst plus znak równości Morse podkreślnik Code kropka alfabet podkreślnik morse otwórz nawias kwadratowy znak zamknij nawias kwadratowy plus separator. Linia 61. except KeyError dwukropek. Linia 62. pass. Linia 63. self kropka ciag podkreślnik kodow znak równości zakodowany podkreślnik tekst. Linia 65. def odkoduj podkreślnik morse otwórz nawias okrągły self zamknij nawias okrągły minus zamknij nawias ostrokątny str dwukropek. Linia 67. def odk podkreślnik znak otwórz nawias okrągły kod dwukropek str zamknij nawias okrągły dwukropek. Linia 68. for key przecinek ind in Morse podkreślnik Code kropka alfabet podkreślnik morse kropka items otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 69. if kod znak równości znak równości ind dwukropek. Linia 70. return key. Linia 71. else dwukropek. Linia 72. return cudzysłów cudzysłów. Linia 74. lista podkreślnik znakow znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 75. lista podkreślnik znakow znak równości self kropka ciag podkreślnik kodow kropka split otwórz nawias okrągły apostrof kratka apostrof zamknij nawias okrągły. Linia 76. odkodowany znak równości cudzysłów cudzysłów. Linia 78. for znak in lista podkreślnik znakow dwukropek. Linia 79. odkodowany plus znak równości odk podkreślnik znak otwórz nawias okrągły znak zamknij nawias okrągły. Linia 81. self kropka ciag podkreślnik znakow znak równości odkodowany. Linia 83. kratka przykład wywołania. Linia 85. kod podkreślnik 1 znak równości Morse podkreślnik Code otwórz nawias okrągły cudzysłów Linux cudzysłów zamknij nawias okrągły. Linia 86. print otwórz nawias okrągły kod podkreślnik 1 kropka ciag podkreślnik znakow zamknij nawias okrągły. Linia 87. print otwórz nawias okrągły kod podkreślnik 1 kropka ciag podkreślnik kodow zamknij nawias okrągły. Linia 88. print otwórz nawias okrągły kod podkreślnik 1 kropka kierunek zamknij nawias okrągły. Linia 90. print otwórz nawias okrągły zamknij nawias okrągły. Linia 92. kod podkreślnik 2 znak równości Morse podkreślnik Code otwórz nawias okrągły cudzysłów minus minus minus kratka kropka minus minus kropka kratka kropka kratka minus kropka kratka kropka kropka kropka kratka minus minus minus kratka kropka kropka minus kratka kropka minus kropka kratka minus kropka minus kropka kratka kropka kratka cudzysłów zamknij nawias okrągły. Linia 93. print otwórz nawias okrągły kod podkreślnik 2 kropka ciag podkreślnik znakow zamknij nawias okrągły. Linia 94. print otwórz nawias okrągły kod podkreślnik 2 kropka ciag podkreślnik kodow zamknij nawias okrągły. Linia 95. print otwórz nawias okrągły kod podkreślnik 2 kropka kierunek zamknij nawias okrągły. Linia 97. kratka efekt działania. Linia 99. LINUX. Linia 100. kropka minus kropka kropka kratka kropka kropka kratka minus kropka kratka kropka kropka minus kratka minus kropka kropka minus kratka. Linia 101. ASCII minus Morse. Linia 103. OPENSOURCE. Linia 104. minus minus minus kratka kropka minus minus kropka kratka kropka kratka minus kropka kratka kropka kropka kropka kratka minus minus minus kratka kropka kropka minus kratka kropka minus kropka kratka minus kropka minus kropka kratka kropka kratka. Linia 105. Morse minus ASCII.
Ćwiczenie 2

Napisz program, który dla podanego przez użytkownika, na stronie internetowej, ciągu wejściowego wygeneruje kod Morse'a.

Specyfikacja:

Dane:

  • Wprowadzony przez użytkownika do formularza ciąg znaków.

Wynik:

  • Program generuje stronę internetową z zakodowanym przy pomocy kodu Morse'a ciągiem wejściowym.

Do zbudowania strony użyjemy modułu FlaskFlaskFlask. Funkcjonalność strony będzie następująca:

  • na stronie głównej będziemy mogli przez pole formularza podać tekst do zakodowania,

  • poprzez URL "/koduj/xxxxx" będziemy mogli wywołać automatycznie zakodowanie ciągu xxxxx.

1
Przykład 1

Przygotujmy kod, który pozwoli zrealizować te założenia. W celu zmniejszenia objętości kodu założymy, że definicja klasy Morse_Code znajduje się w pliku o nazwie Morse_Code.py, który jest zapisany w tym samym katalogu na dysku komputera.

Linia 1. from flask import Flask. Linia 2. kratka request minus obiekt przecinek który pozwala sprawdzić m kropka in kropka jakiego protokołu otwórz nawias okrągły POST prawy ukośnik GET zamknij nawias okrągły używa przeglądarka w wywołaniach HTTP średnik jest inicjowany przez bibliotekę Flask. Linia 3. from flask import request. Linia 5. kratka importujemy definicję klasy z pliku. Linia 6. from Morse podkreślnik Code import asterysk. Linia 9. kratka tworzymy główny obiekt aplikacji. Linia 10. app znak równości Flask otwórz nawias okrągły cudzysłów Alfabet podkreślnik Morse cudzysłów zamknij nawias okrągły. Linia 12. kratka definiujemy akcję związaną z URL dwukropek cudzysłów prawy ukośnik cudzysłów. Linia 13. at app kropka route otwórz nawias okrągły apostrof prawy ukośnik apostrof przecinek methods znak równości otwórz nawias kwadratowy apostrof POST apostrof przecinek cudzysłów GET cudzysłów zamknij nawias kwadratowy zamknij nawias okrągły. Linia 14. def koduj podkreślnik formularz otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 15. cudzysłów cudzysłów cudzysłów Wyświetla formularz HTML dla metody GET przecinek a dla metody POST przetwarza dane i wyświetla ciąg zapisany kodem Morse apostrof a cudzysłów cudzysłów cudzysłów. Linia 16. post znak równości cudzysłów cudzysłów cudzysłów. Linia 17. otwórz nawias ostrokątny h1 zamknij nawias ostrokątny Kodowanie Morse apostrof a otwórz nawias ostrokątny prawy ukośnik h1 zamknij nawias ostrokątny otwórz nawias ostrokątny hr zamknij nawias ostrokątny. Linia 18. otwórz nawias ostrokątny form method znak równości cudzysłów POST cudzysłów action znak równości cudzysłów prawy ukośnik cudzysłów zamknij nawias ostrokątny. Linia 19. Wpisz tekst do zakodowania dwukropek otwórz nawias ostrokątny input type znak równości cudzysłów text cudzysłów name znak równości cudzysłów ciag podkreślnik znakow cudzysłów zamknij nawias ostrokątny otwórz nawias ostrokątny br zamknij nawias ostrokątny. Linia 20. otwórz nawias ostrokątny input type znak równości cudzysłów submit cudzysłów value znak równości cudzysłów Zakoduj cudzysłów zamknij nawias ostrokątny. Linia 21. otwórz nawias ostrokątny prawy ukośnik form zamknij nawias ostrokątny cudzysłów cudzysłów cudzysłów. Linia 23. if request kropka method znak równości znak równości apostrof GET apostrof dwukropek. Linia 24. return post. Linia 25. else dwukropek. Linia 26. kod znak równości Morse podkreślnik Code otwórz nawias okrągły request kropka form otwórz nawias kwadratowy apostrof ciag podkreślnik znakow apostrof zamknij nawias kwadratowy zamknij nawias okrągły. Linia 27. tekst znak równości f cudzysłów cudzysłów cudzysłów. Linia 28. otwórz nawias ostrokątny h1 zamknij nawias ostrokątny Kodowanie Morse apostrof a otwórz nawias ostrokątny prawy ukośnik h1 zamknij nawias ostrokątny otwórz nawias ostrokątny hr zamknij nawias ostrokątny. Linia 29. Podano do zakodowania ciąg znaków dwukropek otwórz nawias ostrokątny pre zamknij nawias ostrokątny otwórz nawias klamrowy request kropka form otwórz nawias kwadratowy apostrof ciag podkreślnik znakow apostrof zamknij nawias kwadratowy zamknij nawias klamrowy otwórz nawias ostrokątny prawy ukośnik pre zamknij nawias ostrokątny otwórz nawias ostrokątny br zamknij nawias ostrokątny. Linia 30. Zakodowany w kodach Morse apostrof a dwukropek otwórz nawias ostrokątny br zamknij nawias ostrokątny otwórz nawias ostrokątny pre zamknij nawias ostrokątny otwórz nawias klamrowy kod kropka ciag podkreślnik kodow zamknij nawias klamrowy otwórz nawias ostrokątny prawy ukośnik pre zamknij nawias ostrokątny. Linia 31. cudzysłów cudzysłów cudzysłów. Linia 32. return tekst. Linia 34. kratka definiujemy akcję związaną z URL dwukropek cudzysłów prawy ukośnik koduj cudzysłów. Linia 35. at app kropka route otwórz nawias okrągły apostrof prawy ukośnik koduj prawy ukośnik otwórz nawias ostrokątny name zamknij nawias ostrokątny apostrof przecinek methods znak równości otwórz nawias kwadratowy apostrof GET apostrof zamknij nawias kwadratowy zamknij nawias okrągły. Linia 36. def zakoduj podkreślnik morse otwórz nawias okrągły name zamknij nawias okrągły dwukropek. Linia 37. cudzysłów cudzysłów cudzysłów Wyświetla ciąg zapisany kodem Morse apostrof a dla napisu podanego jako część URL cudzysłów cudzysłów cudzysłów. Linia 38. kod znak równości Morse podkreślnik Code otwórz nawias okrągły name zamknij nawias okrągły. Linia 39. tekst znak równości f cudzysłów cudzysłów cudzysłów. Linia 40. otwórz nawias ostrokątny h1 zamknij nawias ostrokątny Kodowanie Morse apostrof a otwórz nawias ostrokątny prawy ukośnik h1 zamknij nawias ostrokątny otwórz nawias ostrokątny hr zamknij nawias ostrokątny. Linia 41. Podano do zakodowania ciąg znaków dwukropek otwórz nawias ostrokątny pre zamknij nawias ostrokątny otwórz nawias klamrowy name zamknij nawias klamrowy otwórz nawias ostrokątny prawy ukośnik pre zamknij nawias ostrokątny otwórz nawias ostrokątny br zamknij nawias ostrokątny. Linia 42. Zakodowany w kodach Morse apostrof a dwukropek otwórz nawias ostrokątny br zamknij nawias ostrokątny otwórz nawias ostrokątny pre zamknij nawias ostrokątny otwórz nawias klamrowy kod kropka ciag podkreślnik kodow zamknij nawias klamrowy otwórz nawias ostrokątny prawy ukośnik pre zamknij nawias ostrokątny. Linia 43. cudzysłów cudzysłów cudzysłów. Linia 44. return tekst. Linia 46. kratka start minus uruchamiamy serwer WWW pod adresem http dwukropek prawy ukośnik prawy ukośnik 127 kropka 0 kropka 0 kropka 1 dwukropek 5000. Linia 47. app kropka run otwórz nawias okrągły zamknij nawias okrągły.
Dla zainteresowanych

Dla języka Python istnieje ciekawy moduł o nazwie morse‑talk – pozwala on na kodowanie i rozkodowywanie znaków ASCII i Morse'a, jak również na graficzną reprezentację kodów Morse'a za pomocą biblioteki matplotlib.

Już wiesz

Podsumujmy:

  • podczas pisania programu wykorzystaliśmy słownik, który umożliwił przypisanie kluczowi (literze alfabetu polskiego) odpowiednik zapisany w kodzie Morse'a,

  • kodowanie Morse'a można uznać za pewien rodzaj szyfrowania,

  • programowanie obiektowe pozwala tworzyć czytelniejszy kod, który może być wielokrotnie wykorzystywany; jest to ważne, gdy projekt tworzy wielu programistów.

Słownik

ASCII
ASCII

(ang. American Standard Code for Information Interchange) pierwotnie siedmiobitowy system kodowania znaków (współcześnie rozszerzony do ośmiu bitów); w oryginalnej wersji kodom z zakresu 0–127 przyporządkowano 26 liter łacińskich, 10 cyfr (0...9) oraz dodatkowe znaki

Flask
Flask

moduł pozwalający szybko i efektywnie tworzyć strony internetowe; Flask nie jest dostępny w standardowej instalacji języka Python; należy go zainstalować, korzystając z mechanizmu pip

type hints
type hints

informacja o typie danego obiektu zapisana literalnie w kodzie programu; z uwagi na dynamiczną naturę języka Python pomaga w zrozumieniu kodu programu i w sprawdzeniu kodu przez różne programy IDE, np. PyCharm, SublimeText lub Atom; przykład użycia takiego zapisu: zmienna: int = 10; type hints zostały dokładnie opisane w dokumencie PEP 484, inną nazwą są annotations opisane w dokumencie PEP 3107