//* Функція відкриття файлу на копю'тері *//
void OpenText()
{
if (Form1->OpenDialog1->Execute())
{
MessageBox(NULL, "Не можливо відкрити файл!", "Виникла помилка!", MB_OK);
Form1->Memo1->Clear();
Form1->Memo2->Clear();
Form1->Memo3->Clear();
Form1->Label2->Caption = Form1->Memo1->Text.Length();
Form1->Label3->Caption = Form1->Memo2->Text.Length();
Form1->Button2->Enabled = false;
Form1->Button3->Enabled = false;
}
else
{
// Обнуляємо всі умови
Form1->ProgressBar1->Position = 0;
Form1->Memo1->Clear();
Form1->Memo2->Clear();
Form1->Memo3->Clear();
MyText = "";
Key = "";
R = "";
ResText = "";
Pust = "";
for (int i=0; i<10; i++)
for (int j=0; j<16; j++)
Resh[i][j] = NULL;
Form1->Memo1->Lines->LoadFromFile(Form1->OpenDialog1->FileName);
Form1->Label2->Caption = Form1->Memo1->Text.Length();
Form1->Label3->Caption = Form1->Memo2->Text.Length();
Form1->Button2->Enabled = true;
Form1->Button3->Enabled = false;
}
}
//* Функція перевірки повтору літер *//
bool CheckKey()
{
for (int i=1; i<=Key.Length(); i++)
for (int j=1; j <= Key.Length(); j++)
if ((Key[i] == Key[j]) && (i != j))
return false;
return true;
}
//* Функція створення і виводу решітки на форму *//
void CreateR()
{
Form1->Memo3->Clear();
R = Key;
AnsiString Alphabet = Al;
for (int i=1; i<=Key.Length(); i++)
for (int j=1; j<=Alphabet.Length(); j++)
if (Key[i] == Alphabet[j])
Alphabet = Alphabet.Delete(j,1);
R += Alphabet; // Створили рядкок з решітки
int num = 1;
AnsiString Str = "";
for (int i=0; i<10; i++)
{
Str = "";
for (int j=0; j<16; j++)
{
Str += R[num];
if (j != 16)
Str += " ";
num++;
}
Form1->Memo3->Lines->Add(Str);
}
// Заповняємо масив літер решітки
num = 1;
for (int i=0; i<10; i++)
for (int j=0; j<16; j++)
{
Resh[i][j] = R[num];
num++;
}
}
//* Функція вибору символу-порожняка *//
void ChoosePust()
{
int k = 0;
int m = 1000;
for (int i=1; i<=R.Length(); i++)
{
for (int j=1; j<=MyText.Length(); j++)
if (R[i] == MyText[j])
k++;
if (k<m)
{
m = k;
k = 0;
Pust = R[i];
}
}
}
//* Функція вставлення порожняків і перевірки тексту на скінченність *//
void EditText()
{
ChoosePust(); // обираємо прожняк
// Вставляємо прожняки в повторювані комірки Біграма
for (int i=1; i<MyText.Length(); i++)
if (MyText[i] == MyText[i+1])
MyText = MyText.Insert(Pust,i+1);
//* Перевіряємо текст на парність і якщо він не парний тоді вставляємо в кінець довільний символ *//
int Len = MyText.Length();
if (Len % 2 != 0)
MyText += Pust;
}
//* Функція шифрування тексту *//
void Encrypt()
{
ResText = "";
Form1->ProgressBar1->Position = 0;
Form1->ProgressBar1->Min = 0;
Form1->ProgressBar1->Max = MyText.Length();
// індекси літер в стовпцях
int ind_x1 = 0;
int ind_y1 = 0;
int ind_x2 = 0;
int ind_y2 = 0;
int k = 1;
while (k<MyText.Length())
{
for (int i=0; i<10; i++)
for (int j=0; j<16; j++)
{
if (MyText[k] == Resh[i][j])
{
ind_x1 = i;
ind_y1 = j;
}
if (MyText[k+1] == Resh[i][j])
{
ind_x2 = i;
ind_y2 = j;
}
}
// Якщо літери знаходяться в одному рядку
if (ind_x1 == ind_x2)
{
if (ind_y1 == 15)
{
ResText += Resh[ind_x1][0];
ResText += Resh[ind_x2][ind_y2+1];
}
else
if (ind_y2 == 15)
{
ResText += Resh[ind_x1][ind_y1+1];
ResText += Resh[ind_x2][0];
}
else
{
ResText += Resh[ind_x1][ind_y1+1];
ResText += Resh[ind_x2][ind_y2+1];
}
}
// Якщо літери знаходяться в одному стовпці
if (ind_y1 == ind_y2)
{
if (ind_x1 == 9)
{
ResText += Resh[0][ind_y1];
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.