Перевести текст из азбуки в Морзе в обычную запись - Free Pascal
Формулировка задачи:
Помогите пожалуйста.
Нужно перевести из азбуки в Морзе в обычную запись.
При вводе текста буквы разделяются одним пробелом, а слова двумя и более пробелами.
var s, s1, s2:string; i,j,l,r:integer; mrz:array[1..32] of string= ('.-','-...','.--','--.','-..','.','...-','--..', '..','.---','-.-','.-..','--','-.','---','.--.', '.-.','...','-','..-','..-.','....','-.-.','---.', '----','--.-','-..-','-.--','-..-','..-.','..--','.-.-'); b: string='АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; begin readln (s); l:=0; r:=0; for i:=1 to length(s)+1 do begin if (s[i]=' ') or (i=length(s)+1) then begin r:=i; s1:=copy(s,l+1,r-l-1); l:=i; for j:=1 to 32 do begin if s1=mrz[j] then s2:=b[j]; if s1='' then s2:=' '; end; write(s2); end; end; end.
Решение задачи: «Перевести текст из азбуки в Морзе в обычную запись»
textual
Листинг программы
Const nM = 32; zn = ['.','-']; Var mrz : array[1..nM] of string := ('.-','-...','.--','--.','-..','.','...-','--..', '..','.---','-.-','.-..','--','-.','---','.--.', '.-.','...','-','..-','..-.','....','-.-.','---.', '----','--.-','-..-','-.--','-..-','..-.','..--','.-.-'); RUch : string :='аАбБвВгГдДеЕжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяЯ'; Function Mcod(S : String) : String; Var i,k : Integer; sc : String; Begin sc:=''; For i:=1 to Length(S) do Begin k:=Pos(S[i],RUch); If k>0 then sc:=sc+mrz[(k+Ord(Odd(k))) div 2]+' ' else sc:=sc+S[i]; end; If sc[Length(sc)]=' ' then Delete(sc,Length(sc),1); Mcod:=sc; end; Function GetCharM(ss : String) : String; Var j : Integer; Begin GetCharM:=ss; For j:=1 to nM do If mrz[j]=ss then GetCharM:=RUch[j*2]; end; Function Mdecod(S : String) : String; Var i,j,k : Integer; sc : String; Begin sc:=''; k:=0; S:=S+'~'; For i:=1 to Length(S) do Begin If not (S[i] in zn) then Begin If k<>0 then Begin sc:=sc+GetCharM(Copy(S,k,i-k)); k:=0; end; If (S[i]=' ') and (S[i+1]=' ') then sc:=sc+S[i]; end else If k=0 then k:=i; end; Mdecod:=sc; end; Begin Writeln(Mcod('Азбука Морзе')); Writeln(Mdecod(Mcod('Азбука Морзе'))); end.
Объяснение кода листинга программы
- В коде определены две константы:
nM
- количество символов в азбуке Морзе (32), иzn
- массив из двух символов, обозначающих точки и тире, используемые в азбуке Морзе. - Далее определены две переменные:
mrz
- массив строк, содержащий соответствие между символами азбуки Морзе и обычной записи, иRUch
- строка, содержащая алфавит в обычной записи. - Затем определены две функции:
Mcod
, преобразующая обычный текст в азбуку Морзе, иGetCharM
, преобразующая символ азбуки Морзе в соответствующий символ обычной записи. - Функция
Mdecod
выполняет обратное преобразование, преобразуя текст из азбуки Морзе в обычный текст. - В основной части программы вызываются функции
Mcod
иMdecod
для преобразования строки 'Азбука Морзе' в азбуку Морзе, и обратно в обычный текст. Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д