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

Alfabet Morse'a – przypomnienie

Zanim przystąpimy do analizy programu dokonującego kodowania zadanego przez użytkownika ciągu znaków na system kodowania alfabetem Morse'a, przypomnijmy, w jaki sposób dokonuje się kodowania.

Tabela kodowań alfabetem Morse'a

Litery, cyfry oraz inne znaki kodowane za pomocą alfabetu Morse'a są zastępowane określonymi ciągami kresek i kropek. Kreska oznacza dłuższy sygnał, kropka krótszy. Poniżej umieszczona została tabela kodowań liter alfabetu łacińskiego, której znajomość okaże się bardzo pomocna przy późniejszej implementacjiimplementacjaimplementacji programów: kodującego i odkodowującego.

Litera alfabetu

Oznaczenie w alfabecie Morse'a

Litera alfabetu

Oznaczenie w alfabecie Morse'a

A

• —

N

— •

B

— • • •

O

— — —

C

— • — •

P

• — — •

D

— • •

Q

— — • —

E

R

• — •

F

• • — •

S

• • •

G

— — •

T

H

• • • •

U

• • —

I

• •

V

• • • —

J

• — — —

W

• — —

K

— • —

X

— • • —

L

• — • •

Y

— • — —

M

— —

Z

— — • •

Przykład 1

Spróbujmy zakodować zadany ciąg znaków: „KODOWANIE”. Zwróćmy uwagę na kodowania poszczególnych liter:

Litera alfabetu

Oznaczenie w alfabecie Morse'a

Litera alfabetu

Oznaczenie w alfabecie Morse'a

A

• —

N

— •

B

— • • •

O

— — —

C

— • — •

P

• — — •

D

— • •

Q

— — • —

E

R

• — •

F

• • — •

S

• • •

G

— — •

T

H

• • • •

U

• • —

I

• •

V

• • • —

J

• — — —

W

• — —

K

— • —

X

— • • —

L

• — • •

Y

— • — —

M

— —

Z

— — • •

Zakodowany zadany ciąg znaków w alfabecie Morse'a:

— • — — — — — • • — — — • — — • — — • • • •

Implementacja w C++

Przejdźmy teraz do implementacji programu w języku C++.

Kodowanie zadanego ciągu znaków będzie się odbywać w funkcji o nazwie zakodujCiag(). Funkcja będzie przyjmować jeden argument – ciąg znaków, który ma zostać poddany kodowaniu. Zarówno zwracana przez funkcję wartość, jak i przyjmowany parametr będą więc łańcuchami znaków string.

Ważne!

W przypadku używania w programie łańcuchu znaków string, musimy pamiętać o dodaniu odpowiedniej biblioteki:

Linia 1. kratka include otwórz nawias ostrokątny string zamknij nawias ostrokątny.

Następnie, wewnątrz funkcji, zadeklarujmy zmienną, w której będzie przechowywany wynik końcowy kodowania – ciąg kresek i kropek. Od razu dopisujemy instrukcję return, która będzie zwracać wygenerowany napis.

Linia 1. std dwukropek dwukropek string zakodujCiag otwórz nawias okrągły std dwukropek dwukropek string doZakodowania zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. std dwukropek dwukropek string zakodowane znak równości cudzysłów cudzysłów średnik. Linia 4. return zakodowane średnik. Linia 5. zamknij nawias klamrowy.

Kolejnym krokiem będzie zadeklarowanie pętli, w której będzie się odbywała iteracja po kolejnych literach. Wewnątrz pętli zadeklarowana została zmienna o nazwie litera – będzie ona przechowywać kolejne znaki łańcucha znaków doZakodowania.

Linia 1. std dwukropek dwukropek string zakodujCiag otwórz nawias okrągły std dwukropek dwukropek string doZakodowania zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. std dwukropek dwukropek string zakodowane znak równości cudzysłów cudzysłów średnik. Linia 4. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny doZakodowania kropka size otwórz nawias okrągły zamknij nawias okrągły średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. char litera znak równości doZakodowania otwórz nawias kwadratowy i zamknij nawias kwadratowy średnik. Linia 6. zamknij nawias klamrowy. Linia 8. return zakodowane średnik. Linia 9. zamknij nawias klamrowy.
Ważne!

Funkcja wbudowana size() zwraca wartość liczbową, równą długości łańcucha znaków.

Za pomocą instrukcji switch definiujemy wszystkie kodowania znaków alfabetu Morse'a - dla każdej litery alfabetu łacińskiegoalfabet łacińskialfabetu łacińskiego przypisany jest odpowiadający ciąg kresek i kropek. Wewnątrz kolejnych bloków instrukcji case, dokonywana jest konkatenacja (dołączenie za pomocą znaku +) ciągów kresek i kropek odpowiadających przetwarzanej literze do zmiennej wynikowej zakodowane.

Linia 1. std dwukropek dwukropek string zakodujCiag otwórz nawias okrągły std dwukropek dwukropek string doZakodowania zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. std dwukropek dwukropek string zakodowane znak równości cudzysłów cudzysłów średnik. Linia 4. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny doZakodowania kropka size otwórz nawias okrągły zamknij nawias okrągły średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. char litera znak równości doZakodowania otwórz nawias kwadratowy i zamknij nawias kwadratowy średnik. Linia 7. switch otwórz nawias okrągły litera zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. case apostrof A apostrof dwukropek. Linia 9. zakodowane plus znak równości cudzysłów • minus cudzysłów średnik. Linia 10. break średnik. Linia 11. case apostrof B apostrof dwukropek. Linia 12. zakodowane plus znak równości cudzysłów minus ••• cudzysłów średnik. Linia 13. break średnik. Linia 14. case apostrof C apostrof dwukropek. Linia 15. zakodowane plus znak równości cudzysłów minus • minus • cudzysłów średnik. Linia 16. break średnik. Linia 17. case apostrof D apostrof dwukropek. Linia 18. zakodowane plus znak równości cudzysłów minus •• cudzysłów średnik. Linia 19. break średnik. Linia 20. case apostrof E apostrof dwukropek. Linia 21. zakodowane plus znak równości cudzysłów • cudzysłów średnik. Linia 22. break średnik. Linia 23. case apostrof F apostrof dwukropek. Linia 24. zakodowane plus znak równości cudzysłów •• minus • cudzysłów średnik. Linia 25. break średnik. Linia 26. case apostrof G apostrof dwukropek. Linia 27. zakodowane plus znak równości cudzysłów minus minus • cudzysłów średnik. Linia 28. break średnik. Linia 29. case apostrof H apostrof dwukropek. Linia 30. zakodowane plus znak równości cudzysłów •••• cudzysłów średnik. Linia 31. break średnik. Linia 32. case apostrof I apostrof dwukropek. Linia 33. zakodowane plus znak równości cudzysłów •• cudzysłów średnik. Linia 34. break średnik. Linia 35. case apostrof J apostrof dwukropek. Linia 36. zakodowane plus znak równości cudzysłów • minus minus minus cudzysłów średnik. Linia 37. break średnik. Linia 38. case apostrof K apostrof dwukropek. Linia 39. zakodowane plus znak równości cudzysłów minus • minus cudzysłów średnik. Linia 40. break średnik. Linia 41. case apostrof L apostrof dwukropek. Linia 42. zakodowane plus znak równości cudzysłów • minus •• cudzysłów średnik. Linia 43. break średnik. Linia 44. case apostrof M apostrof dwukropek. Linia 45. zakodowane plus znak równości cudzysłów minus minus cudzysłów średnik. Linia 46. break średnik. Linia 47. case apostrof N apostrof dwukropek. Linia 48. zakodowane plus znak równości cudzysłów minus • cudzysłów średnik. Linia 49. break średnik. Linia 50. case apostrof O apostrof dwukropek. Linia 51. zakodowane plus znak równości cudzysłów minus minus minus cudzysłów średnik. Linia 52. break średnik. Linia 53. case apostrof P apostrof dwukropek. Linia 54. zakodowane plus znak równości cudzysłów • minus minus • cudzysłów średnik. Linia 55. break średnik. Linia 56. case apostrof Q apostrof dwukropek. Linia 57. zakodowane plus znak równości cudzysłów minus minus • minus cudzysłów średnik. Linia 58. break średnik. Linia 59. case apostrof R apostrof dwukropek. Linia 60. zakodowane plus znak równości cudzysłów • minus • cudzysłów średnik. Linia 61. break średnik. Linia 62. case apostrof S apostrof dwukropek. Linia 63. zakodowane plus znak równości cudzysłów ••• cudzysłów średnik. Linia 64. break średnik. Linia 65. case apostrof T apostrof dwukropek. Linia 66. zakodowane plus znak równości cudzysłów minus cudzysłów średnik. Linia 67. break średnik. Linia 68. case apostrof U apostrof dwukropek. Linia 69. zakodowane plus znak równości cudzysłów •• minus cudzysłów średnik. Linia 70. break średnik. Linia 71. case apostrof V apostrof dwukropek. Linia 72. zakodowane plus znak równości cudzysłów ••• minus cudzysłów średnik. Linia 73. break średnik. Linia 74. case apostrof W apostrof dwukropek. Linia 75. zakodowane plus znak równości cudzysłów • minus minus cudzysłów średnik. Linia 76. break średnik. Linia 77. case apostrof X apostrof dwukropek. Linia 78. zakodowane plus znak równości cudzysłów minus •• minus cudzysłów średnik. Linia 79. break średnik. Linia 80. case apostrof Y apostrof dwukropek. Linia 81. zakodowane plus znak równości cudzysłów minus • minus minus cudzysłów średnik. Linia 82. break średnik. Linia 83. case apostrof Z apostrof dwukropek. Linia 84. zakodowane plus znak równości cudzysłów minus minus •• cudzysłów średnik. Linia 85. break średnik. Linia 86. zamknij nawias klamrowy. Linia 87. zakodowane plus znak równości cudzysłów cudzysłów średnik. Linia 88. zamknij nawias klamrowy. Linia 90. return zakodowane średnik. Linia 91. zamknij nawias klamrowy.

Po wykonaniu instrukcji switch do zmiennej zakodowane „doklejany” jest znak spacji. Operacja ta ma na celu oddzielenie od siebie kolejnych ciągów kresek i kropek, czyli kolejnych, zakodowanych, pojedynczych liter.

Kolejnym krokiem jest utworzenie funkcji głównej programu – main, w której zostanie wywołana funkcja kodująca oraz zostanie pobrany od użytkownika ciąg znaków do zakodowania.

Linia 1. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. std dwukropek dwukropek string slowo znak równości cudzysłów cudzysłów średnik. Linia 5. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj słowo do zakodowania alfabetem Morse apostrof a cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 6. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny slowo średnik. Linia 8. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny zakodujCiag otwórz nawias okrągły slowo zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 10. return 0 średnik. Linia 11. zamknij nawias klamrowy.

Oto kod całego programu:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny string zamknij nawias ostrokątny. Linia 4. std dwukropek dwukropek string zakodujCiag otwórz nawias okrągły std dwukropek dwukropek string doZakodowania zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. std dwukropek dwukropek string zakodowane znak równości cudzysłów cudzysłów średnik. Linia 7. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny doZakodowania kropka size otwórz nawias okrągły zamknij nawias okrągły średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. char litera znak równości doZakodowania otwórz nawias kwadratowy i zamknij nawias kwadratowy średnik. Linia 10. switch otwórz nawias okrągły litera zamknij nawias okrągły otwórz nawias klamrowy. Linia 11. case apostrof A apostrof dwukropek. Linia 12. zakodowane plus znak równości cudzysłów • minus cudzysłów średnik. Linia 13. break średnik. Linia 14. case apostrof B apostrof dwukropek. Linia 15. zakodowane plus znak równości cudzysłów minus ••• cudzysłów średnik. Linia 16. break średnik. Linia 17. case apostrof C apostrof dwukropek. Linia 18. zakodowane plus znak równości cudzysłów minus • minus • cudzysłów średnik. Linia 19. break średnik. Linia 20. case apostrof D apostrof dwukropek. Linia 21. zakodowane plus znak równości cudzysłów minus •• cudzysłów średnik. Linia 22. break średnik. Linia 23. case apostrof E apostrof dwukropek. Linia 24. zakodowane plus znak równości cudzysłów • cudzysłów średnik. Linia 25. break średnik. Linia 26. case apostrof F apostrof dwukropek. Linia 27. zakodowane plus znak równości cudzysłów •• minus • cudzysłów średnik. Linia 28. break średnik. Linia 29. case apostrof G apostrof dwukropek. Linia 30. zakodowane plus znak równości cudzysłów minus minus • cudzysłów średnik. Linia 31. break średnik. Linia 32. case apostrof H apostrof dwukropek. Linia 33. zakodowane plus znak równości cudzysłów •••• cudzysłów średnik. Linia 34. break średnik. Linia 35. case apostrof I apostrof dwukropek. Linia 36. zakodowane plus znak równości cudzysłów •• cudzysłów średnik. Linia 37. break średnik. Linia 38. case apostrof J apostrof dwukropek. Linia 39. zakodowane plus znak równości cudzysłów • minus minus minus cudzysłów średnik. Linia 40. break średnik. Linia 41. case apostrof K apostrof dwukropek. Linia 42. zakodowane plus znak równości cudzysłów minus • minus cudzysłów średnik. Linia 43. break średnik. Linia 44. case apostrof L apostrof dwukropek. Linia 45. zakodowane plus znak równości cudzysłów • minus •• cudzysłów średnik. Linia 46. break średnik. Linia 47. case apostrof M apostrof dwukropek. Linia 48. zakodowane plus znak równości cudzysłów minus minus cudzysłów średnik. Linia 49. break średnik. Linia 50. case apostrof N apostrof dwukropek. Linia 51. zakodowane plus znak równości cudzysłów minus • cudzysłów średnik. Linia 52. break średnik. Linia 53. case apostrof O apostrof dwukropek. Linia 54. zakodowane plus znak równości cudzysłów minus minus minus cudzysłów średnik. Linia 55. break średnik. Linia 56. case apostrof P apostrof dwukropek. Linia 57. zakodowane plus znak równości cudzysłów • minus minus • cudzysłów średnik. Linia 58. break średnik. Linia 59. case apostrof Q apostrof dwukropek. Linia 60. zakodowane plus znak równości cudzysłów minus minus • minus cudzysłów średnik. Linia 61. break średnik. Linia 62. case apostrof R apostrof dwukropek. Linia 63. zakodowane plus znak równości cudzysłów • minus • cudzysłów średnik. Linia 64. break średnik. Linia 65. case apostrof S apostrof dwukropek. Linia 66. zakodowane plus znak równości cudzysłów ••• cudzysłów średnik. Linia 67. break średnik. Linia 68. case apostrof T apostrof dwukropek. Linia 69. zakodowane plus znak równości cudzysłów minus cudzysłów średnik. Linia 70. break średnik. Linia 71. case apostrof U apostrof dwukropek. Linia 72. zakodowane plus znak równości cudzysłów •• minus cudzysłów średnik. Linia 73. break średnik. Linia 74. case apostrof V apostrof dwukropek. Linia 75. zakodowane plus znak równości cudzysłów ••• minus cudzysłów średnik. Linia 76. break średnik. Linia 77. case apostrof W apostrof dwukropek. Linia 78. zakodowane plus znak równości cudzysłów • minus minus cudzysłów średnik. Linia 79. break średnik. Linia 80. case apostrof X apostrof dwukropek. Linia 81. zakodowane plus znak równości cudzysłów minus •• minus cudzysłów średnik. Linia 82. break średnik. Linia 83. case apostrof Y apostrof dwukropek. Linia 84. zakodowane plus znak równości cudzysłów minus • minus minus cudzysłów średnik. Linia 85. break średnik. Linia 86. case apostrof Z apostrof dwukropek. Linia 87. zakodowane plus znak równości cudzysłów minus minus •• cudzysłów średnik. Linia 88. break średnik. Linia 89. zamknij nawias klamrowy. Linia 90. zakodowane plus znak równości cudzysłów cudzysłów średnik. Linia 91. zamknij nawias klamrowy. Linia 93. return zakodowane średnik. Linia 94. zamknij nawias klamrowy. Linia 96. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 98. std dwukropek dwukropek string slowo znak równości cudzysłów cudzysłów średnik. Linia 100. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj słowo do zakodowania alfabetem Morse apostrof a cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 101. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny slowo średnik. Linia 103. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny zakodujCiag otwórz nawias okrągły slowo zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 105. return 0 średnik. Linia 106. zamknij nawias klamrowy.

W kolejnej sekcji poznasz implementację algorytmu odkodowującego zadany przez użytkownika ciąg znaków, zapisany alfabetem Morse'a, na alfabet łaciński.

Słownik

alfabet łaciński
alfabet łaciński

najbardziej popularny na świecie system znaków; składa się on 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

implementacja
implementacja

realizacja algorytmu w konkretnym języku programowania