Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2011, 18:43   #1
Exibet179
Пользователь
 
Регистрация: 12.11.2011
Сообщений: 12
Восклицание Дешифратор азбуки морзе

Помогите пожалуйста.Вот решил написать программу которая б переводила текст по алфавиту азбуки морзе.
Скачал алфавит азбуки морзе,сделал оболочку программы.Только вот проблема как сделать чтоб после нажатия на кнопку вместо,допустим А выводилось .-
Фактически я понимаю как,но программно не получается.
Спасибо
Exibet179 вне форума Ответить с цитированием
Старый 23.12.2011, 18:49   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 899
По умолчанию

Часть кода покажи где на клавишу нажимаешь?

Либо так в Events формы
Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
//При нажатии кл A выдается окно собщения с кодировкой и так далее на каждую букву можешь сделать
if chr(Key)='A' then showmessage('.-');
end;

Последний раз редактировалось Aliens_wolfs; 23.12.2011 в 19:04.
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.12.2011, 19:15   #3
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

цикл (длинной в алфавит)
StringReplace
"A", ".-" ...
Lime вне форума Ответить с цитированием
Старый 23.12.2011, 19:31   #4
Exibet179
Пользователь
 
Регистрация: 12.11.2011
Сообщений: 12
По умолчанию

Более подробное описание программы.
На форме размещено 2 компонента memo и между ними кнопка.
Вводим любое слово в memo1 жмем на кнопку и в memo2 это слово отображается в виде .-

Вот обработчик событий на кнопке правд еще не дописанный (я ток недавно увлекся программированием)

procedure TForm1.btn1Click(Sender: TObject);
var s,i:string ;

begin
s:=mmo1.text;
i:=mmo2.text;
mmo2.Text:=s;

end;

end.
Exibet179 вне форума Ответить с цитированием
Старый 23.12.2011, 19:41   #5
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,021
По умолчанию

пишу в браузере так что с ошибками
типа такого:
procedure TForm1.btn1Click(Sender: TObject);
const Morse:array['a'..'x'] of string=('· −','− · · ·',...);
var s1,s2:string;
i:integer;
begin
s1:=mmo1.text;
s2:='';
for i:=1 to length(s1) do
if s1[i] in ['a'..'x'] then
s2:=s2+Morse[s[i]]
else
//обработать спец символы
mmo2.Text:=s2;

end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 23.12.2011, 19:52   #6
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 899
По умолчанию

Если все буквы то в коде Slym поменяй строки ['a'..'x'] на ['a'..'z']

и еще один пример:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
ColichBukw = 3; //Количество букв подставь по количеству букв

//Масив буквы и кода для константы
 type
  MorzeCoder_t = record
  Bukwa: String;
  Code: String;
  end;

//прописываем букву и ее код 
const
    MorzeCode: array[0..ColichBukw -1] of MorzeCoder_t = (
    (Bukwa: 'A'; Code: '.-'),
    (Bukwa: 'B'; Code: '-...'),
    (Bukwa: 'C'; Code: '...') 
    {и тагдалее для каждой буквы} );

 var
 s:string ;
 i, a: integer;
begin
for i:=1 to Length(Memo1.text) do
for a:=0 to Length(MorzeCode)-1 do
// AnsiUpperCase это нужно для того чтобы на регистр не реагировал поиск букв
if AnsiUpperCase(Memo1.text[i])=MorzeCode[a].Bukwa then
S:=S+(MorzeCode[a].Code);
Memo2.Lines.Add(s);
end;
Варианты представлены выбирай)

Еще можешь в интернете найти кодировщики и переделать их под азбуку Морзе

Последний раз редактировалось Aliens_wolfs; 23.12.2011 в 20:17.
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.12.2011, 21:06   #7
Exibet179
Пользователь
 
Регистрация: 12.11.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Если все буквы то в коде Slym поменяй строки ['a'..'x'] на ['a'..'z']

и еще один пример:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
ColichBukw = 3; //Количество букв подставь по количеству букв

//Масив буквы и кода для константы
 type
  MorzeCoder_t = record
  Bukwa: String;
  Code: String;
  end;

//прописываем букву и ее код 
const
    MorzeCode: array[0..ColichBukw -1] of MorzeCoder_t = (
    (Bukwa: 'A'; Code: '.-'),
    (Bukwa: 'B'; Code: '-...'),
    (Bukwa: 'C'; Code: '...') 
    {и тагдалее для каждой буквы} );

 var
 s:string ;
 i, a: integer;
begin
for i:=1 to Length(Memo1.text) do
for a:=0 to Length(MorzeCode)-1 do
// AnsiUpperCase это нужно для того чтобы на регистр не реагировал поиск букв
if AnsiUpperCase(Memo1.text[i])=MorzeCode[a].Bukwa then
S:=S+(MorzeCode[a].Code);
Memo2.Lines.Add(s);
end;
Варианты представлены выбирай)

Еще можешь в интернете найти кодировщики и переделать их под азбуку Морзе
Спс получилось.
но вот попытался сделать дешефратор не вышло можете помоч?
Вот код всей программы
procedure TForm1.Btn1Click(Sender: TObject);
const
ColichBukw = 31; //Количество букв подставь нужное
type
MorzeCoder_t = record
Bukwa: String;
Code: String;
end;
const
//прописываем букву и код ее
MorzeCode: array[0..ColichBukw -1] of MorzeCoder_t = (
(Bukwa: 'А'; Code: ' .- '),
(Bukwa: 'Б'; Code: ' -... '),
(Bukwa: 'В'; Code: ' .-- '),
(Bukwa: 'Г'; Code: ' --. '),
(Bukwa: 'Д'; Code: ' -.. '),
(Bukwa: 'Е'; Code: ' . '),
(Bukwa: 'Ж'; Code: ' ...- '),
(Bukwa: 'З'; Code: ' --.. '),
(Bukwa: 'И'; Code: ' .. '),
(Bukwa: 'Й'; Code: ' .--- '),
(Bukwa: 'К'; Code: ' -.- '),
(Bukwa: 'Л'; Code: ' .-.. '),
(Bukwa: 'М'; Code: ' -- '),
(Bukwa: 'Н'; Code: ' -. '),
(Bukwa: 'О'; Code: ' --- '),
(Bukwa: 'П'; Code: ' .-.- '),
(Bukwa: 'Р'; Code: ' .-. '),
(Bukwa: 'С'; Code: ' ... '),
(Bukwa: 'Т'; Code: ' - '),
(Bukwa: 'У'; Code: ' ..- '),
(Bukwa: 'Ф'; Code: ' ..-. '),
(Bukwa: 'Х'; Code: ' .... '),
(Bukwa: 'Ц'; Code: ' -.-. '),
(Bukwa: 'Ч'; Code: ' ---. '),
(Bukwa: 'Ш'; Code: ' ---- '),
(Bukwa: 'Щ'; Code: ' --.- '),
(Bukwa: 'Ы'; Code: ' -.-- '),
(Bukwa: 'Ь'; Code: ' -..- '),
(Bukwa: 'Э'; Code: ' ..-.. '),
(Bukwa: 'Ю'; Code: ' ..-- '),
(Bukwa: 'Я'; Code: ' .-.- '));

var
s:string ;
i, a: integer;
begin
for i:=1 to Length(Mmo1.text) do
for a:=0 to ColichBukw-1 do
if AnsiUpperCase(Mmo1.text[i])=MorzeCode[a].Bukwa then
S:=S+(MorzeCode[a].Code);
Mmo2.Lines.Add(s);
end;
procedure TForm1.Btn2Click(Sender: TObject);
const
ColichBukw = 31; //Количество букв подставь нужное
type
MorzeCoder_t = record

Code: String;
Bukwa: String;
end;
const
//прописываем букву и код ее
MorzeCode: array[0..ColichBukw -1] of MorzeCoder_t = (
( Code: ' .- ' ;Bukwa: 'А'),
( Code: ' -... ';Bukwa: 'Б',
( Code: ' .-- ' ;Bukwa: 'В'),
( Code: ' --. ' ;Bukwa: 'Г'),
( Code: ' -.. ' ;Bukwa: 'Д'),
( Code: ' . ' ;Bukwa: 'Е'),
( Code: ' ...- ';Bukwa: 'Ж'),
( Code: ' --.. ';Bukwa: 'З'),
( Code: ' .. ' ;Bukwa: 'И'),
( Code: ' .--- ';Bukwa: 'Й'),
( Code: ' -.- ' ;Bukwa: 'К'),
( Code: ' .-.. ';Bukwa: 'Л'),
( Code: ' -- ' ;Bukwa: 'М'),
( Code: ' -. ' ;Bukwa: 'Н'),
( Code: ' --- ' ;Bukwa: 'О'),
( Code: ' .-.- ';Bukwa: 'П'),
( Code: ' .-. ' ;Bukwa: 'Р'),
( Code: ' ... ' ;Bukwa: 'С'),
( Code: ' - ' ;Bukwa: 'Т'),
( Code: ' ..- ' ;Bukwa: 'У'),
( Code: ' ..-. ';Bukwa: 'Ф'),
( Code: ' .... ';Bukwa: 'Х'),
( Code: ' -.-. ';Bukwa: 'Ц'),
( Code: ' ---. ';Bukwa: 'Ч'),
( Code: ' ---- ';Bukwa: 'Ш'),
( Code: ' --.- ';Bukwa: 'Щ'),
( Code: ' -.-- ';Bukwa: 'Ы'),
( Code: ' -..- ';Bukwa: 'Ь'),
( Code: ' ..-.. ';Bukwa: 'Э'),
( Code: ' ..-- ';Bukwa: 'Ю'),
( Code: ' .-.- ';Bukwa: 'Я'));

var
s:string ;
i, a: integer;
begin
for i:=1 to Length(Mmo1.text) do
for a:=0 to ColichBukw-1 do
if AnsiUpperCase(Mmo1.text[i])=MorzeCode[a].Bukwa then
S:=S+(MorzeCode[a].Code);
Mmo2.Lines.Add(s);
end;
end.
Exibet179 вне форума Ответить с цитированием
Старый 23.12.2011, 21:15   #8
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 899
По умолчанию

Второй раз кодеровку ( Code: ' .-.- ';Bukwa: 'Я')); не пиши
а измени код нужно сейчас прикину
Нужно будет поменять код сейчас прикину

Последний раз редактировалось Aliens_wolfs; 23.12.2011 в 21:20.
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.12.2011, 21:46   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,440
По умолчанию

я бы создал 2-х мерный массив:
Код:
var
 RU_MZ:array['а'..'я',0..31] of Char=(Тут все знаки морзе);
Приводил строку в нижний регистр и заменял посимвольно знаки.

Последний раз редактировалось Человек_Борща; 23.12.2011 в 21:54.
Человек_Борща вне форума Ответить с цитированием
Старый 23.12.2011, 21:50   #10
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 899
По умолчанию

Можно и 2х мерном масиве но думаю он может запутаться и символы местами перепутать.
По поводу обратного декодирования.
У него в одной букве несколько знаков и они разные по количеству, нужно тогда пробелом его кодовые знаки допустим в мемо отделять что бы конец символа поймать.
Например .- может подставиться знак .-.- заместо А будет Я, или заместо Ш будет Щ разная длина кодировки у него. Было бы все по 4 знака было бы легче. С кодировкой в морзе проблем нет а вот обратно в буквы, немного нужно помудрить

Последний раз редактировалось Aliens_wolfs; 23.12.2011 в 22:23.
Aliens_wolfs вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифратор дешифратор текста DeKot Софт 44 12.11.2013 22:13
Дешифратор BuTeK48 Помощь студентам 2 10.11.2011 11:00
Лексический анализатор азбуки Морзе в виде конечного автомата MrBrain Помощь студентам 1 08.11.2010 10:23
VBA.шифратор дешифратор aleksa_202 Помощь студентам 1 13.03.2010 18:58
Шифратор и дешифратор по методу Грюнсфельда! Dj_Tiger Помощь студентам 1 22.11.2008 22:23