Перевести текст из азбуки в Морзе в обычную запись - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста. Нужно перевести из азбуки в Морзе в обычную запись. При вводе текста буквы разделяются одним пробелом, а слова двумя и более пробелами.
Листинг программы
  1. var
  2. s, s1, s2:string;
  3. i,j,l,r:integer;
  4. mrz:array[1..32] of string=
  5. ('.-','-...','.--','--.','-..','.','...-','--..',
  6. '..','.---','-.-','.-..','--','-.','---','.--.',
  7. '.-.','...','-','..-','..-.','....','-.-.','---.',
  8. '----','--.-','-..-','-.--','-..-','..-.','..--','.-.-');
  9. b: string='АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
  10. begin
  11. readln (s);
  12. l:=0;
  13. r:=0;
  14. for i:=1 to length(s)+1 do
  15. begin
  16. if (s[i]=' ') or (i=length(s)+1) then
  17. begin
  18. r:=i;
  19. s1:=copy(s,l+1,r-l-1);
  20. l:=i;
  21. for j:=1 to 32 do begin
  22. if s1=mrz[j] then s2:=b[j];
  23. if s1='' then s2:=' ';
  24. end;
  25. write(s2);
  26. end;
  27. end;
  28. end.

Решение задачи: «Перевести текст из азбуки в Морзе в обычную запись»

textual
Листинг программы
  1. Const
  2.   nM = 32;
  3.   zn = ['.','-'];
  4. Var
  5.   mrz  : array[1..nM] of string :=
  6.                  ('.-','-...','.--','--.','-..','.','...-','--..',
  7.                   '..','.---','-.-','.-..','--','-.','---','.--.',
  8.                   '.-.','...','-','..-','..-.','....','-.-.','---.',
  9.                   '----','--.-','-..-','-.--','-..-','..-.','..--','.-.-');
  10.   RUch : string :='аАбБвВгГдДеЕжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяЯ';
  11.  
  12. Function Mcod(S : String) : String;
  13. Var i,k : Integer;
  14.     sc  : String;
  15. Begin
  16.   sc:='';
  17.   For i:=1 to Length(S) do
  18.   Begin
  19.     k:=Pos(S[i],RUch);
  20.     If k>0 then sc:=sc+mrz[(k+Ord(Odd(k))) div 2]+' ' else sc:=sc+S[i];
  21.   end;
  22.   If sc[Length(sc)]=' ' then Delete(sc,Length(sc),1);
  23.   Mcod:=sc;
  24. end;
  25.  
  26. Function GetCharM(ss : String) : String;
  27. Var j : Integer;
  28. Begin
  29.   GetCharM:=ss;
  30.   For j:=1 to nM do If mrz[j]=ss then GetCharM:=RUch[j*2];
  31. end;
  32.  
  33. Function Mdecod(S : String) : String;
  34. Var i,j,k : Integer;
  35.     sc  : String;
  36. Begin
  37.   sc:=''; k:=0; S:=S+'~';
  38.   For i:=1 to Length(S) do
  39.   Begin
  40.     If not (S[i] in zn) then
  41.     Begin
  42.       If k<>0 then
  43.       Begin
  44.         sc:=sc+GetCharM(Copy(S,k,i-k));
  45.         k:=0;
  46.       end;
  47.       If (S[i]=' ') and (S[i+1]=' ') then sc:=sc+S[i];
  48.     end
  49.       else If k=0 then k:=i;
  50.   end;
  51.   Mdecod:=sc;
  52. end;
  53.  
  54. Begin
  55.   Writeln(Mcod('Азбука Морзе'));
  56.   Writeln(Mdecod(Mcod('Азбука Морзе')));
  57. end.

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

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

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


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

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

13   голосов , оценка 3.385 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы