ne. Для максимальної функціональності використовується тип AnsiString - динамічна рядок з нульовим символом в кінці.
В· class TWords - клас-контейнер, використовується для зберігання в оперативній пам'яті вмісту файлів даних (слів із перекладами), що значно прискорює роботу програми.
Параметри класу: vector Words;
// контейнер типу vector для зберігання класів TWord;
Прототипи методів класу: void Clear ();
// Очищає вектор для адекватної роботи у разі зміни напряму перекладу, для цього використовується стандартна функція-член класу vector - pop_back ();
void OpenFile (char * Name);
// Відкриває файл даних слів для заповнення класів TWord, і, відповідно, вектора TWords. Для адекватної роботи вектор В«обнуляєтьсяВ» за допомогою Clear (). У функцію передається покажчик на ім'я файлу, що відкривається. Функція використовує потік ifstream для доступу до файлу даних, зчитуючи у вектор за допомогою push_back () попарно слова-значення (відповідно класам TWord). TWord GetWord (int Index);
// Визначається оператор індексу [] для забезпечення доступу до елементів вектора шляхом звичайної індексації, відповідно, передане значення - ціле число, яке повертається - клас TWord. unsigned int GetSize ();
/Визначається поточний розмір вектора. Повертає беззнакове целое.AnsiString Translate (AnsiString W);
// Забезпечує переклад одного слова (або сталого словосполучення). У функцію передається рядок (тобто слово для перекладу), у векторі шукається збіг з даного One об'єктів TWord, і, якщо перебуває, функція повертає дане Two того елемента, в якому знайдено збіг. AnsiString TranslateString (AnsiString Str);
// Забезпечує послівний переклад введеної фрази за допомогою функції Translate (AnsiString W). У функцію передається рядок (слово або текст), яка посимвольний аналізується і, залежно від символу, заноситься в строкову змінну. Якщо у переданій рядку зустрічаються певні символи (наприклад, знак повернення каретки або пробіл), значить, слово закінчилося, і його можна перекласти. Переклад слів заноситься в змінну-рядок, яка при закінченні роботи повертається функцією.
5 Структурна схема відносин у специфікації класів
Так як основними даними класу TWord є рядкові змінні One і Two, а вектор TWords складається з об'єктів TWord (і методи вектора працюють як з самим вектором, так і з даними-класами), то, загалом, схему відносин між класами можна описати так:
В
В В
Малюнок 1 - Схема відносин у специфікації класів
br/>
6 Реалізація
Так як особливістю поставленого завдання було забезпечення послівного перекладу, те в якості основного об'єкта, призначеного для зберігання даних, був обраний контейнер - вектор. Перевагою використання вектора стало те, що в цьому класі підтримуються динамічні масиви, а це означає, що розмір контейнера може змінюватися в міру необхідності, і одночасно з цим доступ до його елементами здійснюється за допомогою звичайної індексного нотації (оператора []).
Отримуємо, що для зберігання відносно невеликої кількості інформації про слово-перекладі використовується клас TWord, а для зберігання та обробки невідомого на момент компіляції кількості слів (відповідно, і класів TWord) використовується вектор TWords, що робить всі переваги застосування цього типу контейнера очевидними.
7 Алгоритми реалізації
Код програми забезпечений коментарями російською мовою, тому суть роботи програми можна зрозуміти, особливо не вдаючись у подробиці механізму роботи окремих функцій. Однак розглянемо деякі з методів.
Переклад одного слова (або сталого словосполучення) здійснюється за допомогою досить простого методу Translate:
AnsiString TWords :: Translate (AnsiString W)
{ for (unsigned int r = 0; r
if (GetWord (r). One == W)// якщо перше слово "підкласу"
// _вектора одно шуканого
return GetWord (r). Two;// повернути друге слово "підкласу"
return "";// Інакше повертається порожній рядок}
Функція Translate безпосередньо викликається тільки з функції TranslateString, відповідальної за послівний переклад тексту.
AnsiString TWords :: TranslateString (AnsiString Str)// передається введений текст
{Str = Str + ' n';// додавання переведення рядка
AnsiString W;// окреме слово з введеного тексту
AnsiString outp;// рядок-переклад
for (int i = 1; i <= Str.Length (); i + +)// пробігаємо по довжині введеного тексту
{f (Str [i]! = '' && Str [i]! = ' R' && Str [i...