Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Курсовая работа- Программа для перевода текстов с транслита

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 11.11.2024

Федеральное агентство по образованию Российской Федерации.

Южно-Уральский Государственный Университет.

Кафедра «Информационно – аналитическое обеспечение управления в социальных и экономических системах»

Курсовая работа по дисциплине Программирование на языке высокого уровня

«Программа для перевода текстов с транслита»

Выполнил:

Студент группы ПC-ххх

_______  Студент

“___” ____________ 2005

Проверил:

_______ Препод

“___”____________2005

Челябинск

2005


План

Описание применения

1. Постановка задачи

2. Актуальность задачи

3. Метод решения

4. Входные и выходные данные

Описание программы

1. Общие данные и типы.

2. Список процедур и функций

3. Структура программы.

4. Главная форма

5. Форма «Редактор алфавита»

6. Форма «О программе»

7. Основные алгоритмы

8. Работа с программой, входные и выходные данные

9. Описание тестовых заданий

Приложение


Описание применения

  1.  Постановка задачи

Программа для перевода текстов с транслита на русский и обратно. Поддерживается форматирование текста, наиболее популярные системы транслитерации ГОСТ 16876-71, русско-английскую, а также таблицы, задаваемые пользователем. Программа должна иметь функцию перевода символов текста к верхнему и нижнему регистру, функцию подсчета количества символов в тексте. Загрузка текста из буфера обмена может осуществляться по быстрой кнопке.

  1.  Актуальность задачи

Перевод текста из кириллицы в транслит используется очень часто. От простейшего создания nickname до разговоров в IRC-каналах. Многие программы не поддерживают кириллицу и приходится вводить какие-либо комментарии на транслите. Также некоторые mp3-плееры не поддерживают кириллицу и теги приходится писать также на транслите. Этот способ кодировки русских букв давно устоялся и есть чёткие правила (хотя есть и варианты) набора букв. Поэтому в данной программе необходимо реализовать загрузки словаря.

  1.  Метод решения

Так как программа должна иметь графический и интуитивно понятный интерфейс, то для решения очень подходит DELPHI. Была выбрана версия 7.0. Вся программа была разбита на 3 формы: главная, форма работы со словарями и форма «О программе». Весь интерфейс был разработан  на стандартных компонентах и обработчиках событий.

  1.  
    Входные и выходные данные

Входные и выходные параметры могут быть двух типов: словарь и текст для перевода. Словарь – типизированный файл (shortstring). Возможно сохранение и загрузка словаря. Текст – обычный текстовый файл на кириллице или транслите (возможен перевод в обе стороны). Результат также можно сохранять в текстовый файл. Также текст можно вводить с клавиатуры в соответствующие текстовые поля.


Описание программы

  1.  Общие данные и типы

Алфавит перевода представляет из себя массив переменных типа shortstring с индексами от «А» до «Я». Элементами массива являются символы в транслите соответствующей букве в кириллице.

Array [‘А’..‘Я’] of shortstring.

Также создано множество больших и маленьких букв кириллицы:

al_set        : set of char = ['А'..'Я','Й','Ё'];

small_al      : set of char = ['а'..'я','й','ё'];

  1.  Список процедур и функций

Функция UpCase_R(const ch_in:char):char возвращает символ в верхнем регистре:

Листинг 1. Функция UpCase_R

function UpCase_R(const ch_in:char):char;

var

  res:char;

begin

  case ch_in of  //проверяет является ли параметр ch_in русской буквой и если да

    'й': res:= 'Й';  //то заменяет её на аналогичную, но в верхнем регистре.

    'ц': res:= 'Ц';

    'у': res:= 'У';

    'к': res:= 'К';

    'е': res:= 'Е';

    'н': res:= 'Н';

    'г': res:= 'Г';

    'ш': res:= 'Ш';

    'щ': res:= 'Щ';

    'з': res:= 'З';

    'х': res:= 'Х';

    'ъ': res:= 'Ъ';

    'ф': res:= 'Ф';

    'ы': res:= 'Ы';

    'в': res:= 'В';

    'а': res:= 'А';

    'п': res:= 'П';

    'р': res:= 'Р';

    'о': res:= 'О';

    'л': res:= 'Л';

    'д': res:= 'Д';

    'ж': res:= 'Ж';

    'э': res:= 'Э';

    'я': res:= 'Я';

    'ч': res:= 'Ч';

    'с': res:= 'С';

    'м': res:= 'М';

    'и': res:= 'И';

    'т': res:= 'Т';

    'ь': res:= 'Ь';

    'б': res:= 'Б';

    'ю': res:= 'Ю';

    'ё': res:= 'Ё';

  else

    begin

       if not(ch_in in al_set) then

         res:= UpCase(ch_in)

       else

         res:= ch_in;

    end;

  end;

  UpCase_R:= res;

end;

Функция downcase (const ch_in:char):char возвращает символ в нижнем регистре:

Листинг 2. Функция downcase.

function downcase(ch_in:char):char;

var

  res:char;

Begin

  case ch_in of  // проверяет является ли параметр ch_in русской или латинской

    'Й': res:= 'й';  // буквой и если да, то возвращает соответствующую букву

    'Ц': res:= 'ц';  // но в верхнем регистре.

    'У': res:= 'у';

    'К': res:= 'к';

    'Е': res:= 'е';

    'Н': res:= 'н';

    'Г': res:= 'г';

    'Ш': res:= 'ш';

    'Щ': res:= 'щ';

    'З': res:= 'з';

    'Х': res:= 'х';

    'Ъ': res:= 'ъ';

    'Ф': res:= 'ф';

    'Ы': res:= 'ы';

    'В': res:= 'в';

    'А': res:= 'а';

    'П': res:= 'п';

    'Р': res:= 'р';

    'О': res:= 'о';

    'Л': res:= 'л';

    'Д': res:= 'д';

    'Ж': res:= 'ж';

    'Э': res:= 'э';

    'Я': res:= 'я';

    'Ч': res:= 'ч';

    'С': res:= 'с';

    'М': res:= 'м';

    'И': res:= 'и';

    'Т': res:= 'т';

    'Ь': res:= 'ь';

    'Б': res:= 'б';

    'Ю': res:= 'ю';

    'Ё': res:= 'ё';

    'Q': res:= 'q';

    'W': res:= 'w';

    'E': res:= 'e';

    'R': res:= 'r';

    'T': res:= 't';

    'Y': res:= 'y';

    'U': res:= 'u';

    'I': res:= 'i';

    'O': res:= 'o';

    'P': res:= 'p';

    'A': res:= 'a';

    'S': res:= 's';

    'D': res:= 'd';

    'F': res:= 'f';

    'G': res:= 'g';

    'H': res:= 'h';

    'J': res:= 'j';

    'K': res:= 'k';

    'L': res:= 'l';

    'Z': res:= 'z';

    'X': res:= 'x';

    'C': res:= 'c';

    'V': res:= 'v';

    'B': res:= 'b';

    'N': res:= 'n';

    'M': res:= 'm';

  else

    res:= ch_in;

  end;

  Downcase:= res;

End;

  1.  Структура программы

Программа состоит из трех частей:

  •  Главной формы (модуль unit_main)


Рис 1. Главная форма

  •  Формы «О программе» (модуль unit_about)

рис 2. Форма «О программе»

  •  Формы работы со словарями (модуль unit_slov)


рис 3. Форма «Редактор алфавита»

Главная форма загружается автоматически и другие формы вызываются из нее. При выборе меню «Перевод -> Редактор алфавита» вызывается форма работы с алфавитом, а при выборе «Справка -> О программе» вызывается форма «О программе».

  1.  Главная форма

Предназначена для загрузки, сохранения, редактирования и перевода текстов.

Содержит следующие компоненты:

  •      TMemo – 2шт
  •      TPanel – 2 шт.;
  •      TMainMenu;
  •      TStatusBar;
  •      TLabel – 4 шт.
  •      TOpenDialog
  •      TSaveDialog
  •      TmainMenu
  •      TimageList
  •      TactionList
  •      TtoolBar (ToolButton – 7 шт.)

Всё расположено так, как указано на рисунке 1.

Два TLabel указывают на направление перевода в полях, ещё два – на количество символов в областях ввода данных. Два диалога (TOpenDialog и TSaveDialog) для сохранения и загрузки исходного или итогового текста. TMemo для ввода (и отображения) текущих данных для перевода. TMainMenu для главного меню и кнопки (ToolButton) для управления программой (для управления полями ввода и словарём).

Главное меню основной формы:

  •  Меню «Файл»

рис. 4. Главное меню. Пункт «Файл»

  •  Меню «Правка»


рис. 5. Главное меню. Пункт «Правка»

  •  Меню «Перевод»

рис. 6. Главное меню. Пункт «Перевод»

  •  Меню «Справка»

рис. 7. Главное меню. Пункт «Справка»


Для каждого пункта меню используются клавиши быстрого доступа (свойство
ShortCut) и пиктограммы(элементы ImageList). Обработка выбора каждого пункта меню производится в Action’ах компонента ActionList.

Обработчики событий главной формы:

При создании формы загружается стандартный ГОСТ’овский словарь перевода из кириллицы в транслит и обнуляется текст выводящий количество символов в полях.

Листинг 3. «Обработчик события создания главной формы»

procedure TMainForm.FormCreate(Sender: TObject);

begin

  Count_1.Caption:= 'Символов: 0';

  Count_2.Caption:= 'Символов: 0';

  b_jo:= 'jo';

  alph['А']:= 'a';

  alph['Б']:= 'b';

  alph['В']:= 'v';

  alph['Г']:= 'g';

  alph['Д']:= 'd';

  alph['Е']:= 'e';

  alph['Ж']:= 'zh';

  alph['З']:= 'z';

  alph['И']:= 'i';

  alph['Й']:= 'jj';

  alph['К']:= 'k';

  alph['Л']:= 'l';

  alph['М']:= 'm';

  alph['Н']:= 'n';

  alph['О']:= 'o';

  alph['П']:= 'p';

  alph['Р']:= 'r';

  alph['С']:= 's';

  alph['Т']:= 't';

  alph['У']:= 'u';

  alph['Ф']:= 'f';

  alph['Х']:= 'kh';

  alph['Ц']:= 'c';

  alph['Ч']:= 'ch';

  alph['Ш']:= 'sh';

  alph['Щ']:= 'shh';

  alph['Ъ']:= '''''';

  alph['Ы']:= 'y';

  alph['Ь']:= '''';

  alph['Э']:= 'eh';

  alph['Ю']:= 'ju';

  alph['Я']:= 'ja';

end;

Обработчики событий для кнопок:

  •  Кнопка (редактировать алфавит), событие acAlphEdit

Листинг 4. «Обработчик события нажатия на кнопку Редактировать алфавит»

procedure TMainForm.acAlphEditExecute(Sender: TObject);

begin

  SlovarForm.show;

end;

  •  Кнопка (Открыть фаил в окно кириллици) acCyrOpen

Выполняет диалог OpenDialog и загружает в поле memCyr содержимое файла используя при этом обработчик исключений.

Листинг 5. «Обработчик события нажатия на кнопку Открыть»

procedure TMainForm.acCyrOpenExecute(Sender: TObject);

begin

  if openDialog.execute then

    try

       memCyr.lines.LoadFromFile(OpenDialog.FileName);

    except

      showmessage('Неверный формат фаила!!!');

    end;

end;

  •  Кнопка (Сохранить текст из окна кириллици) acSaveCyr

Выполняет диалог SaveDialog и сохраняет поле memCyr в файл.

Листинг 6. «Обработчик события нажатия на кнопку Сохранить»

procedure TMainForm.acSaveCyrExecute(Sender: TObject);

begin

  if openDialog.execute then

    memCyr.lines.SaveToFile(OpenDialog.FileName);

end;

  •  Кнопка (перевести с кириллици в латиницу) acCyrToLat 

Очищает поле memLat и заносит в него текст переведенный в транслит. Данный алгоритм будет рассмотрен в части «Основные алгоритмы»

Коды обработки событий нажатия кнопок сохранения и загрузки для memLat (поле ввода латиници) идентичны приведенным выша, за исключением входного и выходного полей (memLat)

Процедуры обработки событий главного меню:

  •  Меню «Файл»
    •  «Открыть фаил в окно кириллици»

acCyrOpen

  •  «Открыть фаил в окно латиници»

acLatOpen

  •  «Сохранить текст из окна кириллици»

acSaveCyr

  •  «Сохранить текст из окна латиници»

acSaveLat

  •  «Выход»

Закрывает главную форму.

Листинг 8. «Обработчик главного меню Файл -> Выход»

procedure TMainForm.N4Click(Sender: TObject);

begin

  MainForm.Close;

end;

  •  Меню «Правка»

Содержит стандартные функции управления буфером обмена и редактирования текста.

  •  «Отменить CTRL+Z»   acUndo

Отменяет изменения в текущем (активном) поле для ввода

Листинг 9. «Обработчик главного меню Правка -> Отменить»

procedure TMainForm. acUndoExecute(Sender: TObject);

begin

  if memCyr.Focused then memCyr.Undo;

  if memLat.Focused then memLat.Undo;

end;

  •  «Вырезать CTRL+X»    acCut

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

Листинг 10. «Обработчик главного меню Правка -> Вырезать»

procedure TMainForm.acCutExecute(Sender: TObject);

begin

  if memCyr.Focused then memCyr.CutToClipboard;

  if memLat.Focused then memLat.CutToClipboard;

end;

  •  «Копировать CTRL+С»   acCopy

Копирует выделенный текст в текущем (активном) поле для ввода.

Листинг 11. «Обработчик главного меню Правка -> Копировать»

procedure TMainForm.acCopyExecute(Sender: TObject);

begin

  if memCyr.Focused then memCyr.CopyToClipboard;

  if memLat.Focused then memLat.CopyToClipboard;

end;

  •  «Вставить CTRL+V»    acPaste

Вставляет текст из буфера в текущее (активное) поле для ввода.

Листинг 12. «Обработчик главного меню Правка -> Вставить»

procedure TMainForm.acPasteExecute(Sender: TObject);

begin

  if memCyr.Focused then memCyr.PasteFromClipboard;

  if memLat.Focused then memLat.PasteFromClipboard;

end;

  •  «Удалить CTRL+Del»    acDelete

Удаляет выделенный текст из текущего (активного) поля для ввода.

Листинг 13. «Обработчик главного меню Правка -> Удалить»

procedure TMainForm.acDeleteExecute(Sender: TObject);

begin

  if MemCyr.Focused then memCyr.ClearSelection;

  if MemLat.Focused then memLat.ClearSelection;

end;

  •  «Выделить всё CTRL+A»  

Выделяет весь текст в текущем (активном) поле для ввода.

Листинг 14. «Обработчик главного меню Правка -> Выделить всё»

procedure TMainForm.N18Click(Sender: TObject);

begin

  if memo1.Focused then memo1.SelectAll;

  if memo2.Focused then memo2.SelectAll;

end;

  •  Меню «Перевод»
    •  «перевести с кириллици в латиницу»    acCyrToLat

Переводит текст из кириллицы в транслит. Текст данной процедуры будет рассмотрен ниже.

  •  «перевести с латиници в кириллицу»    acLatToCyr

Переводит текст из транслита в кириллицу. Текст данной процедуры будет рассмотрен ниже.

  •  «Редактировать алфавит»    acAlphEdit

Отображает форму редактирования словаря.

  •  Меню «Справка»
    •  «О программе»

Отображает форму «О программе»

Листинг 15.«Обработчик главного меню Справка -> О программе»

procedure TMainForm.N7Click(Sender: TObject);

begin

  AboutForm.show;

end;

  1.  Форма «Редактор алфавита»

Данная форма предназначена для загрузки, сохранения и редактиро-вания словарей перевода кириллицы в транслит.


рис. 8. Форма «Редактора»

На форме расположены следующие компоненты:

  •      TStringGrid;
  •      TPanel;
  •      TBitBtn (2 шт.);
  •      TOpenDialog;
  •      TSaveDialog;
  •      TButton;

Компонент TStringGrid предназначен для ввода и просмотра таблицы перевода. На TPanel расположены все кнопки. TBitBtn – позволяют сохранять и загружать словари. Диалоги TOpenDialog и TSaveDialog предназначены для выбора файлов словарей. TButton – применяет текущие настройки к глобальному словарю (он расположен в Unit_main).

Обработчики событий.

При создании формы происходит заполнение таблицы (SlovGrid):

Листинг 16. «Созание формы Редактировать алфавит»

procedure TSlovarForm.FormCreate(Sender: TObject);

var

  i1                                  :integer;

begin

  SlovGrid.Cells[0,0]:= 'Русский';

  SlovGrid.Cells[1,0]:= 'Перевод';

  for i1:= 1 to 33 do

    begin

       SlovGrid.Cells[0,i1]:= alph_r[i1];

       if i1 = 7 then SlovGrid.Cells[1,i1]:= b_jo

       else SlovGrid.Cells[1,i1]:= alph[alph_r[i1]];

    end;

  f_name:= '';

end;

Обработчик нажатия на кнопку «Сохранить». Если пользователь выбрал файл, куда сохранить новый словарь, то происходит перезапись этого файла. В него (как в типизированный файл) записывается последовательность переменных типа ShortString. Эти данные (и их количество) берутся из таблицы SlovGrid:

Листинг 17. «Нажатия на кнопку Сохранить»

procedure TSlovarForm.SveButtClick(Sender: TObject);

var

  f      :file of shortstring;

  i1     :integer;

  str    :shortstring;

begin

  if savefile.execute then

    begin

       assignfile(f,SaveFile.FileName);

       f_name:= SaveFile.FileName;

       rewrite(f);

       for i1:= 1 to SlovGrid.RowCount-1 do

         begin

            str:= SlovGrid.Cells[1,i1];

            write(f,str);

         end;

        closefile(f);

    end;

end;

Обработчик нажатия на кнопку «Загрузить». Если пользователь выбрал файл, откуда загрузить новый словарь, то происходит чтение этого файла. Из него (как из типизированного файла) загружаютчя последовательность переменных типа ShortString. Эти данные записываются в таблицу SlovGrid:

Листинг 18. «Нажатия на кнопку Загрузить»

procedure TSlovarForm.OpenButtClick(Sender: TObject);

var

  f                        :file of shortstring;

  str                      :shortstring;

  i1                       :integer;

begin

  if openfile.execute then

    try

      assignfile(f,OpenFile.FileName);

      reset(f);

      for i1:= 1 to 33 do

        begin

           read(f,str);

           SlovGrid.Cells[1,i1]:= str;

        end;

      closefile(f);

      F_name:= OpenFile.FileName;

    except

      showmessage('Неверный формат фаила!!!');

    end;

end;

Обработчик нажатия на кнопку «Применить». Изменяет текущий словарь (  alph : array['А'..'Я'] of shortstring из unit_main) в соответствии с текущими данными из таблицы SlovGrid и пишет название словаря в StatusBar главной формы.

Листинг 19. «Нажатие на кнопку Применить»

procedure TSlovarForm.ApplButtClick(Sender: TObject);

var

  i1     :integer;

  str    :string;

begin

  for i1:= 1 to SlovGrid.RowCount-1 do

    begin

       str:= SlovGrid.Cells[1,i1];

       if i1 = 7 then b_jo:= str

       else alph[alph_r[i1]]:= str;

    end;

   if f_name <> '' then

     MainForm.StatusBar.Panels[1].Text:= f_name

   else

     MainForm.StatusBar.Panels[1].Text:= 'Изменено пользователем';

   SlovarForm.Close;

end;

  1.  
    Форма «О программе»

На форме расположено несколько Label с изменённым свойством Caption. Никаких обработчиков событий нет.

  1.  Основные алгоритмы

Перевод из кириллицы в транслит:

Построчно для каждой строки поля MemCyr и посимвольно для каждого символа этой строки, программа проверяет её вхождение в множество больших или маленьких символов русского алфавита. Если вхождение действительно то программа добавляет к строке str2 соответствующие символы из словаря перевода.

Листинг 20. «Перевод кириллица -> транслит»

procedure TMainForm.acCyrToLatExecute(Sender: TObject);

var

  i1,j1,i3                               :integer;

  str,str1,str2,st2                      :string;

  ch,ch2                                 :char;

  ok1                                    :boolean;

begin

  MainForm.MemCyr.Clear;//чистим то, куда будем писать переведенный текст

  for i1:= 0 to MainForm.MemCyr.Lines.Count-1 do  //проходим по всем строкам в первом окошке

    begin

       str:= MainForm.MemCyr.Lines[i1]; //считываем данные и обнуляем переменные

       str2:= '';

       for j1:= 1 to length(str) do     //проходим по всем символам в строке

         begin

            ch:= str[j1];               

            if ch in al_set then        //если ch - заглавная русская буква

              begin

                 if UpCase_R(ch) = 'Ё' then str1:= b_jo  //Ё проверяем отдельно

                 else str1:= alph[UpCase_R(ch)];  //А все остальные берем из alph 

if str1 <> '' then      //Этот блок делает заглавным то,

                   begin                 //что должно быть заглавным.

                      if (length(str)> j1)and(str[j1+1] in al_set)or

                         (j1 > 1)and(str[j1-1] in al_set)then

                        for i3:= 1 to length(str1) do   //тут либо поднимается вся буква

                                (несколько символов, например SH)

                          begin

                             str1[i3]:= UpCase_R(str1[i3]);

                          end

                      else                  //либо только первый символ в букве (Sh)

                        str1[1]:= UpCase_R(str1[1]);

                   end;

                 str2:= str2+str1;

              end

            else if ch in small_al then   //если маленькая русская буква

              begin

                 if UpCase_R(ch) = 'Ё' then str1:= b_jo

                 else str1:= alph[UpCase_R(ch)];

                 str2:= str2+str1;

              end

            else           //если не является символом русского алфавита

              str2:= str2+ch;

         end;

       MainForm.MemLat.Lines.Add(str2);  //добавляем переведенную строку в окошко

с переводом

    end;    //и все с начала (след. строка)

end;

В приложении №1 приводится блок-схема этого алгоритма.

Обратный перевод осуществляется аналогично прямому за исключением того, что из строки с транслитом сначала выбирается подстрока с длинной равной наибольшей длинне буквы в словаре транслита (для правильной обработки символов типа «ъ» - «’ ’» и «ь» - «’ ’»):

procedure TMainForm.acLatTuCyrExecute(Sender: TObject);

const

  lat_small : set of char = ['a'..'z',''''];

  lat_up    : set of char = ['A'..'Z'];

var

  i1,j1,i3,max_l,tek_l,len               :integer;

  str,str1,st2                           :string;

  ch                                     :char;

  ok1,f_ok                               :boolean;

function find(var st_in:string):boolean; //Эта функция ищет в alph['А'..'Я'] заданную строку

var        //т.е. пытается определить какой букве русского алфавита соответствует введенная строка

  i2           :char;

  j2,i3        :integer;

  st_mod       :string;

  ok           :boolean;

begin

   st_mod:= st_in;     //Будем работать с локальной переменной, чтоб не испортить исходную строку

  for j2:= 1 to length(st_mod) do  //уменьшаем регистр у символов в строке

    st_mod[j2]:= downcase(st_mod[j2]);

  find:= false;  //Присваиваем начальное значение результату функции

  if b_jo = st_mod then     //буква определяется Ё отдельно

    begin

       st_mod:= 'Ё';

       if st_in[1] in lat_small then st_mod:= 'ё'; //проверяем должна ли буква быть маленькой

       st_in:= st_mod;  //меняем исходную на переведенную

       find:= true;   //да, мы нашли соответствие возвращаем true

       exit;          //досрочный выход.

    end;

  for i2:= 'А' to 'Я' do  //а если не Ё, то проверяем все буквы по алгоритму приведенному выше

    begin

       if alph[i2] = st_mod then

         begin

            st_mod:= i2;     

            if (st_in[1] in lat_up) then st_in:= st_mod;

            else st_in:= DownCase(st_mod);

            find:= true;

            exit;

         end;

    end;

end;

begin

  MainForm.MemCyr.Clear; //очищаем поле для результата

  max_l:= length(b_jo); //запоминаем длинну самой длинной буквы в алфавите

  for ch:= 'А' to 'Я' do  //цикл по всем буквам

    begin

       tek_l:= length(alph[ch]);

       if tek_l > max_l then max_l:= tek_l;

    end;

  for i1:= 0 to MainForm.MemLat.Lines.Count-1 do //цикл построчно

    begin

       str:= MainForm.MemLat.Lines[i1];

       st2:= '';

       str1:= '';

       while str <> '' do  //пока строка не пустая (обработанные символы будем удалять)

         begin

            f_ok:= false;

            for j1:= max_l downto 1 do  //пытаемся собрать букву разной длины

              begin

                 st2:= '';

                 for i3:= 1 to j1 do

                   begin

                      if (str[i3] in lat_small)or(str[i3] in lat_up)then

                        st2:= st2+str[i3]    //если латинская буква тогда заносим её в st2!

                      else if j1 = 1 then

                        begin

                           st2:= str[i3];  //это символ не кириллицы, заносим в строку с результатом (st2)

                           delete(str,1,1); //удаляем из исходной

                           f_ok:= true;     //обработали

                           break;

                        end

                      else break;

                   end;

                 len:= length(st2); //запомним длину полученной строки

                 if find(st2) then   //и если окажется, что она соответствует русской букве

                   begin

                      delete(str,1,len); //удалим ее из исходной строки

                      f_ok:= true;       //обработали

                      break;

                   end;

              end;

            str1:= str1 + st2;  //добавляем к строке с результатом полученную букву

            if not f_ok then

              delete(str,1,1);  //если по какой-то причине еще не удалили из исходной, то удаляем сейчас

         end;

       MainForm.MemCyr.Lines.Add(str1); //и заноси строку в окно с переводом

    end;

end;

  1.  Работа с программой, входные и выходные данные

Для работы программы достаточно исполняемого файла. Если необходимы дополнительные словари, то они могут, как прилагаться к  программе, так и создаваться вручную в самом приложении. Текст для перевода может загружаться из файла или вводиться с клавиатуры, а результат работы - сохраняться в файл. Это позволяет удобней вводить данные и обрабатывать результат.

  1.  Описание тестовых заданий

Для тестов использовались два отрывка текста, написанных на кириллице. Первый из них – отрывок из первой главы книги «Библия Delphi» Михаила Флёнова:

«Прежде чем программировать компьютер, мы должны понять, как он работает.Как говорил какой-то полководец: «Нужно хорошо изучить своего врага!!!».Возможно, это говорил и не полководец, но это не важно :). Кодинг – это постоянная борьба с машиной. Нужно заставлять её делать то, что тебе нужно. Поэтому любой программист просто обязан знать его внутренности. Компьютер состоит из следующих основных компонентов: процессор, память, видеокарта, винчестер (жёсткий диск) и различные разъёмы для подключения дополнительных устройств. Все эти компоненты связаны между собой с помощью шлейфов и шин.»

При переводе этого текста на транслит получился следующий текст:

«Prezhde chem programmirovat' komp'juter, my dolzhny ponjat', kak on rabotaet.Kak govoril kakojj-to polkovodec: «Nuzhno khorosho izuchit' svoego vraga!!!». Vozmozhno, ehto govoril i ne polkovodec, no ehto ne vazhno :). Koding – ehto postojannaja bor'ba s mashinojj. Nuzhno zastavljat' ejo delat' to, chto tebe nuzhno. Poehtomu ljubojj programmist prosto objazan znat' ego vnutrennosti. Komp'juter sostoit iz sledujushhikh osnovnykh komponentov: processor, pamjat', videokarta, vinchester (zhjostkijj disk) i razlichnye raz''jomy dlja podkljuchenija dopolnitel'nykh ustrojjstv. Vse ehti komponenty svjazany mezhdu sobojj s pomoshh'ju shlejjfov i shin.».

При переводе этого текста обратно на кириллицу, получаем текст идентичный первоначальному, что свидетельствует о правильной работе программы.

Второй текст для теста был взят из книги Фрэнка Херберта «Бог - император Дюны», глава первая:

«Я не только с огромным удовольствием сообщаю вам сегодня об открытии чудесного содержимого тайного хранилища с его значительной коллекцией рукописей, запечатленных на Редуланской хрустальной бумаге, но также горда привести вам доводы в защиту подлинности наших открытий, сообщить вам, почему мы считаем, что открыли подлинные дневники Лито II, Бога Императора.»

Результат перевода:

«Ja ne tol'ko s ogromnym udovol'stviem soobshhaju vam segodnja ob otkrytii chudesnogo soderzhimogo tajjnogo khranilishha s ego znachitel'nojj kollekciejj rukopisejj, zapechatlennykh na Redulanskojj khrustal'nojj bumage, no takzhe gorda privesti vam dovody v zashhitu podlinnosti nashikh otkrytijj, soobshhit' vam, pochemu my schitaem, chto otkryli podlinnye dnevniki Lito II, Boga Imperatora.»

При переводе данного текста в кириллицу был обнаружен недочёт, не связанный с алгоритмом программы – римские цифры. II преобразуется в ИИ, VV – в ВВ и т.д.


Приложение






1. ум группам предельных состояний - первая ~ по несущей способности вторая ~ по деформациям
2. захисної або протекціоністської теорії медіаосвіти.
3. Хронология бокса
4. полупроводник МС перехода является более известный как барьера Шоттки диод
5. на тему КАДРОВЫЙ МЕНЕДЖМЕНТ
6. Реферат- Хозяйства населения
7. Психологическое исследование личностных особенностей родителей с различным стилем отношения к ребенку
8. 1мозговидное набухание лимф тк 2некротизация лимф тк 3отторжение некротических язв 4стадия чистых язв 5ре
9. 1213 год до н. э. Поражает статуя Рамсеса II высота более 18 метров вместе с пьедесталом а вес более 1000 тонн
10. Введение1
11. Перси Фоссет
12. Теоретические основы возникновения сущность и формы международных корпораций
13. Уральская государственная медицинская академия кафедра урологии ~ заведующий кафедрой д
14. реферате мы попытаемся рассмотреть патофизиологическую и патоморфологическую основу тех ситуаций при кото
15. Естественное- неизмененная непосредственно деятельностью человека 2.html
16. Тема Східна філософія
17. Тема- Анализ и экспертная оценка ассортимента платёжных терминалов Д
18. Охрана водных объектов
19. г Управлением Министерства юстиции Российской Федерации по Архангельской области и Ненецкому автоном
20. творческой компетенции у студентов педагогического колледжа Чернышева София Анатольевна аспирант Че