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

W jaki sposób kodujemy znaki za pomocą kodu Morse'a

Przed przystąpieniem do implementacji programu kodującego znaki alfabetu na system kodowania alfabetem Morse'a, przypomnijmy, na czym on polega. Kod Morse'a wykorzystuje dwa typy sygnałów: długie i krótkie. Krótkie oznaczane są kropką , a długie kreską . Każdej literze alfabetu odpowiada określona sekwencja kropek i kresek.

Kodowania liter alfabetu łacińskiego

Znajomość kodowania poszczególnych znaków będzie niezbędna przy pisaniu programu kodują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

— — • •

Ćwiczenie 1

Korzystając z powyższej tabeli, wykonaj na kartce zamianę ciągu znaków w słowie „MISIEK” na kod Morse'a.

Przykład 1

Rozwiązanie zadania:

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

Implementacja algorytmu w języku Java

Przejdźmy teraz do implementacji algorytmu, który będzie dokonywał kodowania zadanego przez użytkownika ciągu znaków na system Morse'a.

Kodowanie będzie się odbywać za pomocą funkcji o nazwie zakoduj, która jako parametrparametrparametr przyjmować będzie ciąg znaków do zakodowania.

Linia 1. public class KodowanieMorsem otwórz nawias klamrowy. Linia 3. static String zakoduj otwórz nawias okrągły String ciagZnakow zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. zamknij nawias klamrowy. Linia 6. zamknij nawias klamrowy.

Zadeklarujmy również szkielet głównej funkcji programu main, w której wywołamy funkcję zakoduj dla konkretnego argumentuargumentargumentu.

Linia 1. public class KodowanieMorsem otwórz nawias klamrowy. Linia 3. static String zakoduj otwórz nawias okrągły String ciagZnakow zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. zamknij nawias klamrowy. Linia 7. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. zamknij nawias klamrowy. Linia 9. zamknij nawias klamrowy.

Następnie, wewnątrz funkcji zakoduj, utwórzmy tablicę znaków String poKodowaniu, która będzie wynikową zmienną z zakodowanym rozwiązaniem. Zmienna ta będzie także zwracana na końcu funkcji za pomocą słowa return.

Linia 1. public class KodowanieMorsem otwórz nawias klamrowy. Linia 3. static String zakoduj otwórz nawias okrągły String ciagZnakow zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. String poKodowaniu znak równości cudzysłów cudzysłów średnik. Linia 7. return poKodowaniu średnik. Linia 8. zamknij nawias klamrowy. Linia 10. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. zamknij nawias klamrowy. Linia 13. zamknij nawias klamrowy.

Następnie zdefiniowana zostanie pętla, w której będzie się odbywała iteracja po wszystkich znakach zmiennej ciagZnakow. Liczba iteracji jest zależna od długości wprowadzonego ciągu znaków – wykorzystana zostaje funkcja wbudowana length().

Linia 1. public class KodowanieMorsem otwórz nawias klamrowy. Linia 3. static String zakoduj otwórz nawias okrągły String ciagZnakow zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. String poKodowaniu 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 ciagZnakow kropka length 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 9. zamknij nawias klamrowy. Linia 11. return poKodowaniu średnik. Linia 12. zamknij nawias klamrowy. Linia 14. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 16. zamknij nawias klamrowy. Linia 17. zamknij nawias klamrowy.

Teraz należy wrócić do tabeli kodowań alfabetu łacińskiego za pomocą kodu Morse'a, ponieważ konieczne jest odzwierciedlenie w programie. W przypadku wykrycia określonego znaku, do zmiennej zakodowane ma się „doklejać” określona sekwencja kresek i kropek. W tym celu została użyta instrukcja switch .. case. Kolejne przypadki case – to kolejne litery alfabetu łacińskiego i wewnątrz case określona jest akcja, jaka ma się wykonać --- czyli wspomniane "doklejenie".

Przed instrukcją switch została zadeklarowana zmienna znak, która zawiera pojedynczy znak parametru ciagZnakow. Jej wartość jest następnie sprawdzana wewnątrz warunku switch.

Po zakończeniu bloku instrukcji switch, do zmiennej wynikowej poKodowaniu wykonywana jest konkatenacja znaku spacji. Ma to na celu oddzielenie kolejnych zakodowanych ciągów.

Linia 1. public class KodowanieMorsem otwórz nawias klamrowy. Linia 3. static String zakoduj otwórz nawias okrągły String ciagZnakow zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. String poKodowaniu 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 ciagZnakow kropka length 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 9. char znak znak równości ciagZnakow kropka charAt otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 11. switch otwórz nawias okrągły znak zamknij nawias okrągły otwórz nawias klamrowy. Linia 12. case apostrof A apostrof dwukropek. Linia 13. poKodowaniu plus znak równości cudzysłów • minus cudzysłów średnik. Linia 14. break średnik. Linia 15. case apostrof B apostrof dwukropek. Linia 16. poKodowaniu plus znak równości cudzysłów minus ••• cudzysłów średnik. Linia 17. break średnik. Linia 18. case apostrof C apostrof dwukropek. Linia 19. poKodowaniu plus znak równości cudzysłów minus • minus • cudzysłów średnik. Linia 20. break średnik. Linia 21. case apostrof D apostrof dwukropek. Linia 22. poKodowaniu plus znak równości cudzysłów minus •• cudzysłów średnik. Linia 23. break średnik. Linia 24. case apostrof E apostrof dwukropek. Linia 25. poKodowaniu plus znak równości cudzysłów • cudzysłów średnik. Linia 26. break średnik. Linia 27. case apostrof F apostrof dwukropek. Linia 28. poKodowaniu plus znak równości cudzysłów •• minus • cudzysłów średnik. Linia 29. break średnik. Linia 30. case apostrof G apostrof dwukropek. Linia 31. poKodowaniu plus znak równości cudzysłów minus minus • cudzysłów średnik. Linia 32. break średnik. Linia 33. case apostrof H apostrof dwukropek. Linia 34. poKodowaniu plus znak równości cudzysłów •••• cudzysłów średnik. Linia 35. break średnik. Linia 36. case apostrof I apostrof dwukropek. Linia 37. poKodowaniu plus znak równości cudzysłów •• cudzysłów średnik. Linia 38. break średnik. Linia 39. case apostrof J apostrof dwukropek. Linia 40. poKodowaniu plus znak równości cudzysłów • minus minus minus cudzysłów średnik. Linia 41. break średnik. Linia 42. case apostrof K apostrof dwukropek. Linia 43. poKodowaniu plus znak równości cudzysłów minus • minus cudzysłów średnik. Linia 44. break średnik. Linia 45. case apostrof L apostrof dwukropek. Linia 46. poKodowaniu plus znak równości cudzysłów • minus •• cudzysłów średnik. Linia 47. break średnik. Linia 48. case apostrof M apostrof dwukropek. Linia 49. poKodowaniu plus znak równości cudzysłów minus minus cudzysłów średnik. Linia 50. break średnik. Linia 51. case apostrof N apostrof dwukropek. Linia 52. poKodowaniu plus znak równości cudzysłów minus • cudzysłów średnik. Linia 53. break średnik. Linia 54. case apostrof O apostrof dwukropek. Linia 55. poKodowaniu plus znak równości cudzysłów minus minus minus cudzysłów średnik. Linia 56. break średnik. Linia 57. case apostrof P apostrof dwukropek. Linia 58. poKodowaniu plus znak równości cudzysłów • minus minus • cudzysłów średnik. Linia 59. break średnik. Linia 60. case apostrof Q apostrof dwukropek. Linia 61. poKodowaniu plus znak równości cudzysłów minus minus • minus cudzysłów średnik. Linia 62. break średnik. Linia 63. case apostrof R apostrof dwukropek. Linia 64. poKodowaniu plus znak równości cudzysłów • minus • cudzysłów średnik. Linia 65. break średnik. Linia 66. case apostrof S apostrof dwukropek. Linia 67. poKodowaniu plus znak równości cudzysłów ••• cudzysłów średnik. Linia 68. break średnik. Linia 69. case apostrof T apostrof dwukropek. Linia 70. poKodowaniu plus znak równości cudzysłów minus cudzysłów średnik. Linia 71. break średnik. Linia 72. case apostrof U apostrof dwukropek. Linia 73. poKodowaniu plus znak równości cudzysłów •• minus cudzysłów średnik. Linia 74. break średnik. Linia 75. case apostrof V apostrof dwukropek. Linia 76. poKodowaniu plus znak równości cudzysłów ••• minus cudzysłów średnik. Linia 77. break średnik. Linia 78. case apostrof W apostrof dwukropek. Linia 79. poKodowaniu plus znak równości cudzysłów • minus minus cudzysłów średnik. Linia 80. break średnik. Linia 81. case apostrof X apostrof dwukropek. Linia 82. poKodowaniu plus znak równości cudzysłów minus •• minus cudzysłów średnik. Linia 83. break średnik. Linia 84. case apostrof Y apostrof dwukropek. Linia 85. poKodowaniu plus znak równości cudzysłów minus • minus minus cudzysłów średnik. Linia 86. break średnik. Linia 87. case apostrof Z apostrof dwukropek. Linia 88. poKodowaniu plus znak równości cudzysłów minus minus •• cudzysłów średnik. Linia 89. break średnik. Linia 90. zamknij nawias klamrowy. Linia 91. poKodowaniu plus znak równości cudzysłów cudzysłów średnik. Linia 92. zamknij nawias klamrowy. Linia 93. return poKodowaniu średnik. Linia 94. zamknij nawias klamrowy. Linia 96. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 98. zamknij nawias klamrowy. Linia 99. zamknij nawias klamrowy.

Napiszemy kod, który będzie rozpoznawał wpisany przez użytkownika ciąg znaków, a następnie zostanie on przekazany jako argument funkcji zakoduj(). Do pobrania ciągu znaków od użytkownika używana jest klasa Scanner. To, co wpisze użytkownik, zapiszemy w zmiennej o nazwie doZakodowania.

Linia 1. String doZakodowania średnik. Linia 3. Scanner sc znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 4. System kropka out kropka println otwórz nawias okrągły cudzysłów Podaj ciąg do zakodowania cudzysłów zamknij nawias okrągły średnik. Linia 5. doZakodowania znak równości sc kropka nextLine otwórz nawias okrągły zamknij nawias okrągły średnik.
Ważne!

Ponieważ użyta została zewnętrza klasa Scanner, należy pamiętać o dodaniu:

Linia 1. import java kropka util kropka Scanner średnik.

Na koniec należy wywołać napisaną funkcję dla podanego przez użytkownika parametru oraz wyświetlić wynik.

Linia 1. System kropka out kropka println otwórz nawias okrągły zakoduj otwórz nawias okrągły doZakodowania zamknij nawias okrągły zamknij nawias okrągły średnik.

Oto cały kod programu:

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class KodowanieMorsem otwórz nawias klamrowy. Linia 5. static String zakoduj otwórz nawias okrągły String ciagZnakow zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. String poKodowaniu znak równości cudzysłów cudzysłów średnik. Linia 9. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny ciagZnakow kropka length 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 11. char znak znak równości ciagZnakow kropka charAt otwórz nawias okrągły i zamknij nawias okrągły średnik. Linia 13. switch otwórz nawias okrągły znak zamknij nawias okrągły otwórz nawias klamrowy. Linia 14. case apostrof A apostrof dwukropek. Linia 15. poKodowaniu plus znak równości cudzysłów • minus cudzysłów średnik. Linia 16. break średnik. Linia 17. case apostrof B apostrof dwukropek. Linia 18. poKodowaniu plus znak równości cudzysłów minus ••• cudzysłów średnik. Linia 19. break średnik. Linia 20. case apostrof C apostrof dwukropek. Linia 21. poKodowaniu plus znak równości cudzysłów minus • minus • cudzysłów średnik. Linia 22. break średnik. Linia 23. case apostrof D apostrof dwukropek. Linia 24. poKodowaniu plus znak równości cudzysłów minus •• cudzysłów średnik. Linia 25. break średnik. Linia 26. case apostrof E apostrof dwukropek. Linia 27. poKodowaniu plus znak równości cudzysłów • cudzysłów średnik. Linia 28. break średnik. Linia 29. case apostrof F apostrof dwukropek. Linia 30. poKodowaniu plus znak równości cudzysłów •• minus • cudzysłów średnik. Linia 31. break średnik. Linia 32. case apostrof G apostrof dwukropek. Linia 33. poKodowaniu plus znak równości cudzysłów minus minus • cudzysłów średnik. Linia 34. break średnik. Linia 35. case apostrof H apostrof dwukropek. Linia 36. poKodowaniu plus znak równości cudzysłów •••• cudzysłów średnik. Linia 37. break średnik. Linia 38. case apostrof I apostrof dwukropek. Linia 39. poKodowaniu plus znak równości cudzysłów •• cudzysłów średnik. Linia 40. break średnik. Linia 41. case apostrof J apostrof dwukropek. Linia 42. poKodowaniu plus znak równości cudzysłów • minus minus minus cudzysłów średnik. Linia 43. break średnik. Linia 44. case apostrof K apostrof dwukropek. Linia 45. poKodowaniu plus znak równości cudzysłów minus • minus cudzysłów średnik. Linia 46. break średnik. Linia 47. case apostrof L apostrof dwukropek. Linia 48. poKodowaniu plus znak równości cudzysłów • minus •• cudzysłów średnik. Linia 49. break średnik. Linia 50. case apostrof M apostrof dwukropek. Linia 51. poKodowaniu plus znak równości cudzysłów minus minus cudzysłów średnik. Linia 52. break średnik. Linia 53. case apostrof N apostrof dwukropek. Linia 54. poKodowaniu plus znak równości cudzysłów minus • cudzysłów średnik. Linia 55. break średnik. Linia 56. case apostrof O apostrof dwukropek. Linia 57. poKodowaniu plus znak równości cudzysłów minus minus minus cudzysłów średnik. Linia 58. break średnik. Linia 59. case apostrof P apostrof dwukropek. Linia 60. poKodowaniu plus znak równości cudzysłów • minus minus • cudzysłów średnik. Linia 61. break średnik. Linia 62. case apostrof Q apostrof dwukropek. Linia 63. poKodowaniu plus znak równości cudzysłów minus minus • minus cudzysłów średnik. Linia 64. break średnik. Linia 65. case apostrof R apostrof dwukropek. Linia 66. poKodowaniu plus znak równości cudzysłów • minus • cudzysłów średnik. Linia 67. break średnik. Linia 68. case apostrof S apostrof dwukropek. Linia 69. poKodowaniu plus znak równości cudzysłów ••• cudzysłów średnik. Linia 70. break średnik. Linia 71. case apostrof T apostrof dwukropek. Linia 72. poKodowaniu plus znak równości cudzysłów minus cudzysłów średnik. Linia 73. break średnik. Linia 74. case apostrof U apostrof dwukropek. Linia 75. poKodowaniu plus znak równości cudzysłów •• minus cudzysłów średnik. Linia 76. break średnik. Linia 77. case apostrof V apostrof dwukropek. Linia 78. poKodowaniu plus znak równości cudzysłów ••• minus cudzysłów średnik. Linia 79. break średnik. Linia 80. case apostrof W apostrof dwukropek. Linia 81. poKodowaniu plus znak równości cudzysłów • minus minus cudzysłów średnik. Linia 82. break średnik. Linia 83. case apostrof X apostrof dwukropek. Linia 84. poKodowaniu plus znak równości cudzysłów minus •• minus cudzysłów średnik. Linia 85. break średnik. Linia 86. case apostrof Y apostrof dwukropek. Linia 87. poKodowaniu plus znak równości cudzysłów minus • minus minus cudzysłów średnik. Linia 88. break średnik. Linia 89. case apostrof Z apostrof dwukropek. Linia 90. poKodowaniu plus znak równości cudzysłów minus minus •• cudzysłów średnik. Linia 91. break średnik. Linia 92. zamknij nawias klamrowy. Linia 93. poKodowaniu plus znak równości cudzysłów cudzysłów średnik. Linia 94. zamknij nawias klamrowy. Linia 95. return poKodowaniu średnik. Linia 96. zamknij nawias klamrowy. Linia 98. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 99. String doZakodowania średnik. Linia 101. Scanner sc znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 102. System kropka out kropka println otwórz nawias okrągły cudzysłów Podaj ciąg do zakodowania cudzysłów zamknij nawias okrągły średnik. Linia 103. doZakodowania znak równości sc kropka nextLine otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 105. System kropka out kropka println otwórz nawias okrągły zakoduj otwórz nawias okrągły doZakodowania zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 106. zamknij nawias klamrowy. Linia 107. zamknij nawias klamrowy.

Algorytm realizujący odkodowanie zadanego przez użytkownika ciągu znaków zapisanego w systemie Morse'a działa bardzo podobnie i jego implementacja nie będzie się znacząco różnić.

Słownik

argument
argument

konkretna wartość lub zmienna przekazywana do funkcji lub metody, przy jej wywołaniu

parametr
parametr

zmienna zdefiniowana przy deklaracji metody lub funkcji; parametry deklarujemy w nawiasach, np. funkcja(int parametr1, int parametr2){}