Федеральне агентство з освіти Російської Федерації.
Південно-Уральський державний університет.
Кафедра «Інформаційно - аналітичне забезпечення управління в соціальних та економічних системах»
Курсова робота з дисципліни Програмування на мові високого рівня
«Програма для перекладу текстів з трансліту»
Виконав:
Студент групи П C-ххх
_______ Студент
"___" ____________ 2005
Перевірив:
_______ Препод
"___"____________ 2005
Челябінськ
2005
План
Опис застосування
1. Постановка завдання
2. Актуальність завдання
3. Метод рішення
4. Вхідні і вихідні дані
Опис програми
1. Загальні дані та типи.
2. Список процедур і функцій
3. Структура програми.
4. Головна форма
5. Форма «Редактор алфавіту»
6. Форма «Про програму»
7. Основні алгоритми
8. Робота з програмою, вхідні і вихідні дані
9. Опис тестових завдань
Додаток
Опис застосування
Постановка завдання
Програма для перекладу текстів з трансліту на російську і навпаки. Підтримується форматування тексту, найбільш популярні системи транслітерації ГОСТ 16876-71, російсько-англійську, а також таблиці, що задаються користувачем. Програма повинна мати функцію перекладу символів тексту до верхнього і нижнього регістру, функцію підрахунку кількості символів у тексті. Завантаження тексту з буфера обміну може здійснюватися з швидкого кнопці.
Актуальність завдання
Переклад тексту з кирилиці в трансліт використовується дуже часто. Від найпростішого створення nickname до розмов в IRC-каналах. Багато програм не підтримують кирилицю і доводиться вводити будь-які коментарі на трансліті. Також деякі mp 3-плеєри не підтримують кирилицю і теги доводиться писати також на трансліті. Цей спосіб кодування російських букв давно устоявся і є чіткі правила (хоча є і варіанти) набору букв. Тому в даній програмі необхідно реалізувати завантаження словника.
Метод рішення
Так як програма повинна мати графічний і інтуїтивно зрозумілий інтерфейс, то для вирішення дуже підходить DELPHI. Була обрана версія 7.0. Вся програма була розбита на 3 форми: головна, форма роботи зі словниками та форма «Про програму». Весь інтерфейс був розроблений на стандартних компонентах і обробниках подій.
Вхідні і вихідні дані
Вхідні і вихідні параметри можуть бути двох типів: словник і текст для перекладу. Словник - типізований файл (shortstring). Можливе збереження і завантаження словника. Текст - звичайний текстовий файл на кирилиці або трансліті (можливий переклад в обидві сторони). Результат також можна зберігати у текстовий файл. Також текст можна вводити з клавіатури у відповідні текстові поля.
Опис програми
Загальні дані та типи
Алфавіт перекладу вдає із себе масив змінних типу shortstring з індексами від «А» до «Я». Елементами масиву є символи в трансліті відповідної букви в кирилиці.
Array ['А' .. 'Я'] of shortstring.
Також створено безліч великих і маленьких літер кирилиці:
al_set: set of char = ['А' .. 'Я', 'Ї', 'Е'];
small_al: set of char = ['а' .. 'я', 'й', 'є'];
Список процедур і функцій
Функція 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;
Структура програми
Програма складається з трьох частин:
Головною форми (модуль unit _ main)
Рис 1. Головна форма
Форми «Про програму» (модуль unit _ about)
рис 2. Форма «Про програму»
Форми роботи зі словниками (модуль unit _ slov)
рис 3. Форма «Редактор алфавіту»
Головна форма завантажується автоматично та інші форми викликаються з неї. При виборі меню «Переклад -> Редактор алфавіту» викликається форма роботи з алфавітом, а при виборі «Довідка -> Про програму» викликається форма «Про програму».
Головна форма
Призначена для завантаження, збереження, редагування та перекладу текстів.
Містить наступні компоненти:
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;
Форма «Редактор алфавіту»
Дана форма призначена для завантаження, збереження і редагувати або вання словників перекладу кирилиці в трансліт.
рис. 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;
Форма «Про програму»
На формі розташовано кілька Label зі зміненим властивістю Caption. Ніяких обробників подій немає.
Основні алгоритми
Переклад з кирилиці в трансліт:
Порядково для кожного рядка поля MemCyr і посимвольний для кожного символу цього рядка, програма перевіряє її входження в безліч великих або маленьких символів російського алфавіту. Якщо входження дійсно те програма додає до рядка str 2 відповідні символи зі словника перекладу.
Лістинг 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 i 1: = 0 to MainForm. MemCyr. Lines. Count -1 do / / проходимо по всіх рядках в першому віконці
begin
str: = MainForm. MemCyr. Lines [i 1]; / / зчитуємо дані і Обнуляємо змінні
str 2: ='';
for j 1: = 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 str 1: = alph [UpCase _ R (ch)]; / / А всі інші беремо з alph
if str 1 <>''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 i 3: = 1 to length (str 1) 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)];
str 2: = str 2 + str 1;
end
else / / якщо не є символом російського алфавіту
str 2: = str 2 + ch;
end;
MainForm. MemLat. Lines. Add (str 2); / / додаємо перекладену рядок у віконце
з перекладом
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 j 2: = 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 i 2: = 'А' 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];
st 2: ='';
str 1: ='';
while str <>''do / / поки рядок не порожня (оброблені символи будемо видаляти)
begin
f _ ok: = false;
for j 1: = 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
st 2: = st 2 + str [i 3] / / якщо латинська буква тоді заносимо її в st 2!
else if j1 = 1 then
begin
st 2: = str [i 3]; / / це символ не кирилиці, заносимо в рядок з результатом (st 2)
delete (str, 1,1); / / видаляємо з вихідної
f_ok: = true; / / обробили
break;
end
else break;
end;
len: = length (st 2); / / запам'ятаємо довжину отриманого рядка
if find (st 2) then / / і якщо виявиться, що вона відповідає російської букві
begin
delete (str, 1, len); / / видалимо її з початкового рядка
f_ok: = true; / / обробили
break;
end;
end;
str 1: = str 1 + st 2; / / додаємо до рядка з результатом отриману букву
if not f _ ok then
delete (str, 1,1); / / якщо з якоїсь причини ще не видалили з вихідної, то видаляємо зараз
end;
MainForm. MemCyr. Lines. Add (str 1); / / і занось рядок у вікно з перекладом
end;
end;
Робота з програмою, вхідні і вихідні дані
Для роботи програми досить виконуваного файлу. Якщо необхідні додаткові словники, то вони можуть, як додаватися до програми, так і створюватися вручну в самому додатку. Текст для перекладу може завантажуватися з файлу або вводитися з клавіатури, а результат роботи - зберігатися у файл. Це дозволяє зручніше вводити дані та обробляти результат.
Опис тестових завдань
Для тестів використовувалися два уривки тексту, написаних на кирилиці. Перший з них - уривок з першого розділу книги «Біблія 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 - у ВР і т.д.
Додаток