Engee 文档
Notebook

将文本翻译成莫尔斯电码

莫尔斯电码,也称为莫尔斯电码,是一种传输文本信息的系统。 它基于使用不同持续时间的两个信号—点(短信号)和破折号(长信号)。 这个系统是由美国发明家塞缪尔*莫尔斯在19世纪上半叶开发的,并成为最早的电报通信方法之一。

字母表中的每个字母,一个数字和一些标点符号都由点和破折号的独特组合表示,例如,字母A被传递为点-破折号(。-),而字母B是dash-dot-dot-dot(-。..).
在一个字符内的两个连续点或破折号之间,在不同的字符(字母或数字)之间进行短暂的暂停—暂停时间稍长。 反过来,单词之间的停顿甚至更长。

莫尔斯电码在电报中被广泛用于长距离传输信息。 它还在无线电通信中发现了应用,特别是在海事和航空工业中。

如今,莫尔斯电码继续被无线电爱好者和复古技术爱好者研究和应用,因为信号传输可以使用电报钥匙等简单设备进行,即使在较差的通信条件下,信号

现在,基于上述系统的理论基础,我们将为拉丁字母和阿拉伯数字定义一个字典。

In [ ]:
# Словарь для преобразования символов в азбуку Морзе
morse_code = Dict(
    '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' => "--..",
    '0' => "-----",
    '1' => ".----",
    '2' => "..---",
    '3' => "...--",
    '4' => "....-",
    '5' => ".....",
    '6' => "-....",
    '7' => "--...",
    '8' => "---..",
    '9' => "----.",
    ' ' => "/" # Пробел между словами обозначается слешем
)
Out[0]:
Dict{Char, String} with 37 entries:
  '1' => ".----"
  'E' => "."
  'Z' => "--.."
  '6' => "-...."
  'X' => "-..-"
  '7' => "--..."
  'B' => "-..."
  'C' => "-.-."
  '5' => "....."
  'D' => "-.."
  'A' => ".-"
  '4' => "....-"
  'R' => ".-."
  'G' => "--."
  '8' => "---.."
  'F' => "..-."
  'N' => "-."
  'M' => "--"
  'K' => "-.-"
  'J' => ".---"
  'O' => "---"
  'I' => ".."
  'P' => ".--."
  'H' => "...."
  'Q' => "--.-"
  ⋮   => ⋮

让我们定义一个摩尔斯电码格式的换行函数。 此函数在字典中搜索含义。 如果未找到该值,则保持不变。

In [ ]:
function text_to_morse(text::String)
    morse_message = String[]  
    for char in uppercase(text)
        if haskey(morse_code, char)
            push!(morse_message, string(morse_code[char]))  # Присваиваем значение из словаря
        else
            push!(morse_message, string(char))  # Оставляем исходный символ
        end
    end
    return join(morse_message, " ")  # Объединяем элементы вектора через пробел
end
Out[0]:
text_to_morse (generic function with 1 method)
In [ ]:
# Пример использования функции
input_text = "ENGEE!"
output_morse = text_to_morse(input_text)
println(output_morse)
. -. --. . . !

结论

演示的结果证实此功能正常工作。 由于感叹号没有字典值,我们在输出时得到这个符号。