Перевести текст из азбуки в Морзе в обычную запись - 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.

Объяснение кода листинга программы

  1. В коде определены две константы: nM - количество символов в азбуке Морзе (32), и zn - массив из двух символов, обозначающих точки и тире, используемые в азбуке Морзе.
  2. Далее определены две переменные: mrz - массив строк, содержащий соответствие между символами азбуки Морзе и обычной записи, и RUch - строка, содержащая алфавит в обычной записи.
  3. Затем определены две функции: Mcod, преобразующая обычный текст в азбуку Морзе, и GetCharM, преобразующая символ азбуки Морзе в соответствующий символ обычной записи.
  4. Функция Mdecod выполняет обратное преобразование, преобразуя текст из азбуки Морзе в обычный текст.
  5. В основной части программы вызываются функции Mcod и Mdecod для преобразования строки 'Азбука Морзе' в азбуку Морзе, и обратно в обычный текст. Результат выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.385 из 5
Похожие ответы