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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2008, 12:07   #1
Ivanich
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 48
По умолчанию Небольшая проблема.Детранслитератор

Здравствуйте все...У меня одна проблема появилась ..Делаю курсовую работу в делфи. Транслитератор текста вроде транслитератор зделал а вот детранслитератор не получается..

Код:
function Transliterate(s: string): string;
var
 i: integer;
 t: string;
begin
 for i:=1 to Length(s) do
  begin
   case s[i] of
        'а': t:=t+'a';
        'б': t:=t+'b';
        'в': t:=t+'v';
        'г': t:=t+'g';
        'д': t:=t+'d';
        'е': t:=t+'e';
        'ё': t:=t+'ye';
        'ж': t:=t+'zh';
        'з': t:=t+'z';
        'и': t:=t+'i';
        'й': t:=t+'y';
        'к': t:=t+'k';
        'л': t:=t+'l';
        'м': t:=t+'m';
        'н': t:=t+'n';
        'о': t:=t+'o';
        'п': t:=t+'p';
        'р': t:=t+'r';
        'с': t:=t+'s';
        'т': t:=t+'t';
        'у': t:=t+'u';
        'ф': t:=t+'f';
        'х': t:=t+'ch';
        'ц': t:=t+'z';
        'ч': t:=t+'h';
        'ш': t:=t+'sh';
        'щ': t:=t+'ch';
        'ъ': t:=t+'''';
        'ы': t:=t+'y';
        'ь': t:=t+'''';
        'э': t:=t+'e';
        'ю': t:=t+'yu';
        'я': t:=t+'ya';
        'А': T:=T+'A';
        'Б': T:=T+'B';
        'В': T:=T+'V';
        'Г': T:=T+'G';
        'Д': T:=T+'D';
        'Е': T:=T+'E';
        'Ё': T:=T+'Ye';
        'Ж': T:=T+'Zh';
        'З': T:=T+'Z';
        'И': T:=T+'I';
        'Й': T:=T+'Y';
        'К': T:=T+'K';
        'Л': T:=T+'L';
        'М': T:=T+'M';
        'Н': T:=T+'N';
        'О': T:=T+'O';
        'П': T:=T+'P';
        'Р': T:=T+'R';
        'С': T:=T+'S';
        'Т': T:=T+'T';
        'У': T:=T+'U';
        'Ф': T:=T+'F';
        'Х': T:=T+'h';
        'Ц': T:=T+'Z';
        'Ч': T:=T+'Ch';
        'Ш': T:=T+'Sh';
        'Щ': T:=T+'Ch';
        'Ъ': T:=T+'''';
        'Ы': T:=T+'Y';
        'Ь': T:=T+'''';
        'Э': T:=T+'E';
        'Ю': T:=T+'Yu';
        'Я': T:=T+'Ya';
      else t:=t+s[i];
   end;
  end;
 Result:=t;
end;
procedure TfmMain.BitBtn3Click(Sender: TObject);
var
 i: integer;
begin
 Memo2.Lines.Clear;
 for i:=0 to Memo1.Lines.Count-1 do
  Memo2.Lines.Add(Transliterate(Memo1.Lines.Strings[i]));
end;



{Это уже на ДеТранслятор }
function Translate_2(s:string):string;
var
i: integer;
 t: String;
begin
 for i:=1 to Length(s) do
  begin
   case s[i] of
        'a': t:=t+'а';
        'b': t:=t+'б';
        'v': t:=t+'в';
        'g': t:=t+'г';
        'д': t:=t+'d';
        'e': t:=t+'е';
        'ye': t:=t+'ё'; {Вот в этом предложении выдает ошибку и пишет: Incompatible types:'Char and String'} 
        'zd': t:=t+'ж';
        'z': t:=t+'з';
        'i': t:=t+'и';
        'y': t:=t+'й';
        'k': t:=t+'к';
        'l': t:=t+'л';
        'm': t:=t+'м';
        'n': t:=t+'н';
        'o': t:=t+'о';
        'p': t:=t+'п';
        'r': t:=t+'р';
        's': t:=t+'с';
        't': t:=t+'т';
        'u': t:=t+'у';
        'f': t:=t+'ф';
        'h': t:=t+'х';
        'z': t:=t+'ц';
        'ch': t:=t+'ч';
        'sh': t:=t+'ш';
        'ch': t:=t+'щ';
        '': t:=t+'ъ';
        'y': t:=t+'ы';
        '': t:=t+'ь';
        'e': t:=t+'э';
        'ю': t:=t+'yu';
        'ay': t:=t+'я';
        'A': T:=T+'А';
        'B': T:=T+'Б';
        'V': T:=T+'В';
        'G': T:=T+'Г';
        'D': T:=T+'Д';
        'E': T:=T+'Е';
        'Ye': T:=T+'Ё';
        'ZH': T:=T+'Ж';
        'Z': T:=T+'З';
        'I': T:=T+'И';
        'Y': T:=T+'Й';
        'K': T:=T+'К';
        'L': T:=T+'Л';
        'M': T:=T+'М';
        'N': T:=T+'Н';
        'O': T:=T+'О';
        'P': T:=T+'П';
        'R': T:=T+'Р';
        'S': T:=T+'С';
        'T': T:=T+'Т';
        'U': T:=T+'У';
        'F': T:=T+'Ф';
        'H': T:=T+'Х';
        'Z': T:=T+'Ц';
        'CH': T:=T+'Ч';
        'SH': T:=T+'Ш';
        'CH': T:=T+'Щ';
        '': T:=T+'Ъ';
        'Y': T:=T+'Ы';
        '': T:=T+'Ь';
        'E': T:=T+'Э';
        'YU': T:=T+'Ю';
        'YA': T:=T+'Я';
      else t:=t+s[i];
   end;
  end;
 Result:=t;
procedure TfmMain.Button2Click(Sender: TObject);
var
 i: integer;
begin
 Memo2.Lines.Clear;
 for i:=0 to Memo1.Lines.Count-1 do
  Memo2.Lines.Add(Transliterate_2(Memo1.Lines.Strings[i]));
 end;
Что ему надо ни как не пойму почему..Если у кого-нить есть возможность помогите разобраться.Заранее большое спсб.
Ivanich вне форума Ответить с цитированием
Старый 06.03.2008, 12:16   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Правильно выдает - читай внимательно мануал по Case
Нельзя в нем анализировать более одного символа.
А вообще стратегию ты выбрал неверную, не нужно так засорять case.
I'm learning to live...

Последний раз редактировалось Stilet; 06.03.2008 в 12:35.
Stilet вне форума Ответить с цитированием
Старый 06.03.2008, 12:23   #3
Ivanich
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А вообще стратегию ты выбрал неверную, не нужно так засорять case.
Ясна...А мож подскажешь как лучше зделать или как проще зделать
Ivanich вне форума Ответить с цитированием
Старый 06.03.2008, 12:36   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Организуй примерно так
Код:
a:array[0..7]of string[2]=('a',
        'b','v','g','д','e','ye','zd');
      b:array[0..7] of string[3]=( 'а','б','в','г','д','е','ё','ж');
ну и в цикле уже меняй, находиш симвом в b и меняеш его на символ из а в такой же позиции как он находится в b
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.03.2008, 12:51   #5
Ivanich
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 48
По умолчанию

Ок спасибо
Ivanich вне форума Ответить с цитированием
Старый 06.03.2008, 17:05   #6
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Для ДеТранслитератора нужен немного другой алгоритм.

Точто вы написали работать будет неправильно ибо:

case s[i] of - мы берём ОДИН символ из строки S

'ye': t:=t+'ё'; - в правой части у нас значение s[i].... Но оно неможет принимать значение больше чем 1 знак. Тоесть это явно уже наводит на мысль что такое сравнение не пройдёт.

И даже если взять массив и просто тупо найти и сравнить неполучается... Всё фишка что при ДеДеТранслите нужно выискивать сочетания букв.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 17.05.2009, 19:59   #7
BAstor
Новичок
Джуниор
 
Регистрация: 17.05.2009
Сообщений: 1
Хорошо

Спасибо,данная тема очень помогла при создании своего проекта транслитератора.
BAstor вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работаю с текстовым файлом есть небольшая проблема Parcenson Общие вопросы Delphi 2 13.08.2008 06:46
Небольшая проблема с сокетами RoamingFire Работа с сетью в Delphi 3 27.02.2008 22:58
Пшу диплом, нужна консультация небольшая.. staspro Помощь студентам 5 07.08.2007 23:36