Перевести текст из азбуки в Морзе в обычную запись - 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
для преобразования строки 'Азбука Морзе' в азбуку Морзе, и обратно в обычный текст. Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д