Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2022, 18:12   #11
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Аль глаза меня подводят?
Цитата:
Сообщение от macomics Посмотреть сообщение
Идея была такая, но напутал с индексами.
Цитата:
Сообщение от digitalis Посмотреть сообщение
Любопытно, что я за свою многотрудную жисть я Low и High не использовал.
Когда часто переключаешься с языков, в которых строки индексируются с 0, на языки где они же начинаются с 1, тогда начинаешь бороться с ленью и использовать Low и High, чтобы не путать.
Но лень иногда побеждает, тогда пишешь индекс числом и ошибаешься!

Код:
const
  alphabet: array [0 .. 44] of Char = ('(', '.', '?', ',', '-', ')', ';', '!', ':', '5', '4', '3', '2', '1', '6', '7', '8', '9', '0', 'h', 'v', 'f', 'l', 'p', 'j', 'b', 'x', 'c', 'y', 'z', 'q', 's', 'u', 'r', 'w', 'd', 'k', 'g', 'o', 'i', 'a', 'n', 'm', 'e', 't');
  morzebet: array [0 .. 44] of String = ('.-.--.-', '......', '..--..', '.-.-.-', '-....-', '-.--.-', '-.-.-.', '--..--', '---...', '.....', '....-', '...--', '..---', '.----', '-....', '--...', '---..', '----.', '-----', '....', '...-', '..-.', '.-..', '.--.', '.---', '-...', '-..-', '-.-.', '-.--', '--..', '--.-', '...', '..-', '.-.', '.--', '-..', '-.-', '--.', '---', '..', '.-', '-.', '--', '.', '-');

implemenration

function alpha2morze(alpha: String): String;
var
  i, j: Integer;
  r: String;
begin
  r := '';
  for i := Low(alpha) to High(alpha) do
    for j := Low(alphabet) to High(alphabet) do
      if alpha[i] = alphabet[j] then begin
        r := r + morzebet[j] + ' ';
        break;
      end;
  alpha2morze := r;
end;

function morze2alpha(morze: String): String;
var
  i, j, l, n: Integer;
  m, r: String;
begin
  m := morze;
  r := '';
  j := Low(m);
  n := High(m);
  while j <= n do
// По хорошему даже Pos не стоит использовать. Иначе будет слишком много лишних сравнений
    for i := Low(morzebet) to High(morzebet) do
// Достаточно проверить совпадение начала строки с подстрокой из словаря
      l := j + High(morzebet[i]) - Low(morzebet[i]);
      while (j <= l) and (m[j] = morzebet[i][j]) do inc(j);
      if j > l then begin
        while (j <= n) and (m[j] = ' ') do inc(j);
        r := r + alphabet[i];
        break;
      end;
  morze2alpha := r;
end;

Последний раз редактировалось macomics; 19.06.2022 в 18:31.
macomics вне форума Ответить с цитированием
Старый 19.06.2022, 18:19   #12
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,529
По умолчанию

------
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование азбуки морзе - Visual Basic 2010 я принял из эфира позывной сигнал азбукой морзе, а нужно озвучить код Alex Kul Свободное общение 26 18.10.2018 19:03
Комментарии к программе перевода слов английский-русский. язык С++ Девяностик Помощь студентам 6 02.11.2014 23:01
Дешифратор азбуки морзе Exibet179 Общие вопросы Delphi 11 24.12.2011 02:28
Лексический анализатор азбуки Морзе в виде конечного автомата MrBrain Помощь студентам 1 08.11.2010 10:23