Федеральное агентство по образованию РоссийскойФедерации.
Южно-Уральский Государственный Университет.
Кафедра «Информационно – аналитическое обеспечениеуправления в социальных и экономических системах»
Курсовая работа по дисциплине Программирование наязыке высокого уровня
«Программа для перевода текстов с транслита»
Выполнил:
Студент группы ПC-ххх
_______ Студент
“___” ____________ 2005
Проверил:
_______ Препод
“___”____________2005
Челябинск
2005
План
Описание применения
1. Постановказадачи
2. Актуальностьзадачи
3. Методрешения
4. Входныеи выходные данные
Описание программы
1. Общиеданные и типы.
2. Списокпроцедур и функций
3. Структурапрограммы.
4. Главнаяформа
5. Форма«Редактор алфавита»
6. Форма«О программе»
7. Основныеалгоритмы
8. Работас программой, входные и выходные данные
9. Описаниетестовых заданий
Приложение
Описаниеприменения/>/>/> 1. Постановка задачи
Программадля перевода текстов с транслита на русский и обратно. Поддерживаетсяформатирование текста, наиболее популярные системы транслитерации ГОСТ16876-71, русско-английскую, а также таблицы, задаваемые пользователем.Программа должна иметь функцию перевода символов текста к верхнему и нижнемурегистру, функцию подсчета количества символов в тексте. Загрузка текста избуфера обмена может осуществляться по быстрой кнопке./>2. Актуальность задачи
Переводтекста из кириллицы в транслит используется очень часто. От простейшегосоздания nickname до разговоров вIRC-каналах. Многие программы неподдерживают кириллицу и приходится вводить какие-либо комментарии натранслите. Также некоторые mp3-плеерыне поддерживают кириллицу и теги приходится писать также на транслите. Этотспособ кодировки русских букв давно устоялся и есть чёткие правила (хотя есть иварианты) набора букв. Поэтому в данной программе необходимо реализоватьзагрузки словаря./>/>/>3. Метод решения
Таккак программа должна иметь графический и интуитивно понятный интерфейс, то длярешения очень подходит DELPHI.Была выбрана версия 7.0. Вся программа была разбита на 3 формы: главная, формаработы со словарями и форма «О программе». Весь интерфейс был разработан настандартных компонентах и обработчиках событий.
/>/>/>4. Входные ивыходные данные
Входныеи выходные параметры могут быть двух типов: словарь и текст для перевода.Словарь – типизированный файл (shortstring). Возможно сохранение и загрузкасловаря. Текст – обычный текстовый файл на кириллице или транслите (возможенперевод в обе стороны). Результат также можно сохранять в текстовый файл. Такжетекст можно вводить с клавиатуры в соответствующие текстовые поля.
/>/>/>Описаниепрограммы/>/>/>1. Общие данныеи типы
Алфавитперевода представляет из себя массив переменных типа shortstringс индексами от «А» до «Я». Элементами массива являются символы в транслитесоответствующей букве в кириллице.
Array [‘А’..‘Я’]of shortstring.
Такжесоздано множество больших и маленьких букв кириллицы:
al_set : set of char = [‘А’..’Я’,’Й’,’Ё’];
small_al : set of char = [‘а’..’я’,’й’,’ё’];/>/>/>2. Списокпроцедур и функций
ФункцияUpCase_R(constch_in:char):charвозвращает символ в верхнем регистре:
Листинг1. Функция UpCase_R
function UpCase_R(const ch_in:char):char;
var
res:char;
begin
case ch_inof //проверяет является ли параметр 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 (constch_in:char):charвозвращает символ в нижнем регистре:
Листинг2.Функцияdowncase.
function downcase(ch_in:char):char;
var
res:char;
Begin
case ch_inof // проверяет является ли параметр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;/>/>/>3. Структурапрограммы
Программасостоит из трех частей:
· Главнойформы (модуль unit_main)
/>
Рис1. Главная форма
· Формы«О программе» (модуль unit_about)
/>
рис2. Форма «О программе»
· Формыработы со словарями (модуль unit_slov)
/>
рис3. Форма «Редактор алфавита»
Главнаяформа загружается автоматически и другие формы вызываются из нее. При выбоременю «Перевод -> Редактор алфавита» вызывается форма работы с алфавитом, апри выборе «Справка -> О программе» вызывается форма «О программе»./>/>/>4. Главная форма
Предназначенадля загрузки, сохранения, редактирования и перевода текстов.
Содержитследующие компоненты:
· 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)
Процедурыобработки событий главного меню:
· Меню«Файл»
o «Открытьфаил в окно кириллици» />
acCyrOpen
o «Открытьфаил в окно латиници» />
acLatOpen
o «Сохранитьтекст из окна кириллици» />
acSaveCyr
o «Сохранитьтекст из окна латиници» />
acSaveLat
o «Выход»
Закрываетглавную форму.
Листинг8. «Обработчик главного меню Файл -> Выход»
procedure TMainForm.N4Click(Sender: TObject);
begin
MainForm.Close;
end;
· Меню«Правка»
Содержитстандартные функции управления буфером обмена и редактирования текста.
o «ОтменитьCTRL+Z» /> acUndo
Отменяетизменения в текущем (активном) поле для ввода
Листинг9. «Обработчик главного меню Правка -> Отменить»
procedure TMainForm. acUndoExecute(Sender: TObject);
begin
if memCyr.Focused then memCyr.Undo;
if memLat.Focused then memLat.Undo;
end;
o «ВырезатьCTRL+X» /> acCut
Вырезаетвыделенный текст в текущем (активном) поле для ввода.
Листинг10. «Обработчик главного меню Правка -> Вырезать»
procedure TMainForm.acCutExecute(Sender: TObject);
begin
if memCyr.Focused then memCyr.CutToClipboard;
if memLat.Focused then memLat.CutToClipboard;
end;
o «КопироватьCTRL+С» /> acCopy
Копируетвыделенный текст в текущем (активном) поле для ввода.
Листинг11. «Обработчик главного меню Правка -> Копировать»
procedure TMainForm.acCopyExecute(Sender: TObject);
begin
if memCyr.Focused then memCyr.CopyToClipboard;
if memLat.Focused then memLat.CopyToClipboard;
end;
o «ВставитьCTRL+V» /> acPaste
Вставляеттекст из буфера в текущее (активное) поле для ввода.
Листинг12. «Обработчик главного меню Правка -> Вставить»
procedure TMainForm.acPasteExecute(Sender: TObject);
begin
if memCyr.Focused then memCyr.PasteFromClipboard;
if memLat.Focused then memLat.PasteFromClipboard;
end;
o «УдалитьCTRL+Del» /> acDelete
Удаляетвыделенный текст из текущего (активного) поля для ввода.
Листинг13. «Обработчик главного меню Правка -> Удалить»
procedure TMainForm.acDeleteExecute(Sender:TObject);
begin
if MemCyr.Focused then memCyr.ClearSelection;
if MemLat.Focused then memLat.ClearSelection;
end;
o «Выделитьвсё CTRL+A»
Выделяетвесь текст в текущем (активном) поле для ввода.
Листинг14. «Обработчик главного меню Правка -> Выделить всё»
procedure TMainForm.N18Click(Sender: TObject);
begin
if memo1.Focused then memo1.SelectAll;
if memo2.Focused then memo2.SelectAll;
end;
· Меню«Перевод»
o «перевестис кириллици в латиницу» /> acCyrToLat
Переводиттекст из кириллицы в транслит. Текст данной процедуры будет рассмотрен ниже.
o «перевестис латиници в кириллицу» /> acLatToCyr
Переводиттекст из транслита в кириллицу. Текст данной процедуры будет рассмотрен ниже.
o «Редактироватьалфавит» /> acAlphEdit
Отображаетформу редактирования словаря.
· Меню«Справка»
o «Опрограмме»
Отображаетформу«Опрограмме»
Листинг15.«Обработчик главного меню Справка -> О программе»
procedure TMainForm.N7Click(Sender: TObject);
begin
AboutForm.show;
end;/>/>/>5. Форма«Редактор алфавита»
Даннаяформа предназначена для загрузки, сохранения и редактиро-вания словарейперевода кириллицы в транслит.
/>
рис.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[‘А’..’Я’] ofshortstring из 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;
/>/>/>6. Форма «Опрограмме»
Наформе расположено несколько Labelс изменённым свойством Caption.Никаких обработчиков событий нет./>7. Основные алгоритмы
Переводиз кириллицы в транслит:
Построчнодля каждой строки поля 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-1do //проходим по всем строкам впервом окошке
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 //Ё проверяем отдельно
elsestr1:= 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_modthen //буква определяется Ёотдельно
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_ldownto 1 do //пытаемся собрать букву разной длины
begin
st2:= ”;
for i3:= 1 to j1 do
begin
if (str[i3] inlat_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 notf_okthen
delete(str,1,1); //если по какой-то причине еще не удалили из исходной, то удаляем сейчас
end;
MainForm.MemCyr.Lines.Add(str1);//и заноси строку в окно с переводом
end;
end;/>/>/>8. Работа спрограммой, входные и выходные данные
Дляработы программы достаточно исполняемого файла. Если необходимы дополнительныесловари, то они могут, как прилагаться к программе, так и создаваться вручнуюв самом приложении. Текст для перевода может загружаться из файла или вводитьсяс клавиатуры, а результат работы — сохраняться в файл. Это позволяет удобнейвводить данные и обрабатывать результат./>9. Описание тестовых заданий
Длятестов использовались два отрывка текста, написанных на кириллице. Первый изних – отрывок из первой главы книги «Библия Delphi»Михаила Флёнова:
«Преждечем программировать компьютер, мы должны понять, как он работает.Как говорилкакой-то полководец: «Нужно хорошо изучить своего врага!!!».Возможно, этоговорил и не полководец, но это не важно :). Кодинг – это постоянная борьба смашиной. Нужно заставлять её делать то, что тебе нужно. Поэтому любойпрограммист просто обязан знать его внутренности. Компьютер состоит изследующих основных компонентов: процессор, память, видеокарта, винчестер(жёсткий диск) и различные разъёмы для подключения дополнительных устройств.Все эти компоненты связаны между собой с помощью шлейфов и шин.»
Припереводе этого текста на транслит получился следующий текст:
«Prezhde chem programmirovat’ komp’juter, my dolzhnyponjat’, kak on rabotaet.Kak govoril kakojj-to polkovodec: «Nuzhno khoroshoizuchit’ svoego vraga!!!». Vozmozhno, ehto govoril i ne polkovodec, no ehto nevazhno :). Koding – ehto postojannaja bor’ba s mashinojj. Nuzhno zastavljat’ejo delat’ to, chto tebe nuzhno. Poehtomu ljubojj programmist prosto objazanznat’ ego vnutrennosti. Komp’juter sostoit iz sledujushhikh osnovnykhkomponentov: processor, pamjat’, videokarta, vinchester (zhjostkijj disk) irazlichnye raz”jomy dlja podkljuchenija dopolnitel’nykh ustrojjstv. Vse ehtikomponenty svjazany mezhdu sobojj s pomoshh’ju shlejjfov i shin.».
Припереводе этого текста обратно на кириллицу, получаем текст идентичныйпервоначальному, что свидетельствует о правильной работе программы.
Второйтекст для теста был взят из книги Фрэнка Херберта «Бог — император Дюны», главапервая:
«Яне только с огромным удовольствием сообщаю вам сегодня об открытии чудесногосодержимого тайного хранилища с его значительной коллекцией рукописей,запечатленных на Редуланской хрустальной бумаге, но также горда привести вамдоводы в защиту подлинности наших открытий, сообщить вам, почему мы считаем,что открыли подлинные дневники Лито II, Бога Императора.»
Результатперевода:
«Jane tol’ko s ogromnym udovol’stviem soobshhaju vam segodnja ob otkrytiichudesnogo soderzhimogo tajjnogo khranilishha s ego znachitel’nojj kollekciejjrukopisejj, zapechatlennykh na Redulanskojj khrustal’nojj bumage, no takzhe gordaprivesti vam dovody v zashhitu podlinnosti nashikh otkrytijj, soobshhit’ vam,pochemu my schitaem, chto otkryli podlinnye dnevniki Lito II, Boga Imperatora.»
Припереводе данного текста в кириллицу был обнаружен недочёт, не связанный салгоритмом программы – римские цифры. IIпреобразуется в ИИ, VV – в ВВ и т.д.
/>/>Приложение
/>
/>
/>