Розглянемо ще одну, забавну, задачу розробки «тарабарської грамоти». Це найпростішій шифр, коли алфавіт поділяється на дві частини, і букви з першої частини замінюються буквами із другої.
Для того, щоб алгоритм був застосований для шифровки та розшифровки, будемо робити заміну першої букви тексту на останню, другу – на передостанню і так далі.
Алгоритм оформлений у вигляді функції-підпрограми tarabar з аргументом – рядком text. У вигляді рядка заданий і ключовий константний масив alphabet, що об’єднує латинський і кириличний алфавіти і деякі знаки, у тому числі пробіл,, а також команду переходу на новий рядок. Команда \n, як і \0, сприймаються як один символ (можна записувати в одинарні лапки).
//файл PART3\3_10.ccp
/* Перетворення рядка, передача рядкового масиву у функцію
обробка рядкового масиву */
//ТАРАБАРСЬКА ГРАМОТА
typedef char STRING; //ввід псевдоніму для типу char
#include “c:\CPP\SUBPROG\\roll.h”
#include “c:\CPP\SUBPROG\\roll_txt.h”
void tarabar(STRING text[]); // тарабарська грамота
main () { clrscr();
STRING text[] =
“Humpty Dumpty sat on a wall,
\nHumpty Dumpty had a great fall!
\nШалтай-Болтай сидел на стене,
\nШалтай-Болтай свалился во сне! #$”;
cout<<” вхідний текст\n”<<text;
k=sizeof(text);
cout<<”\nкількість знаків у тексті = ”<<k-1;
tarabara(text);
cout<<”\n зашифрований текст\n”<<text;
tarabara(text);
cout<<”\n розшифрований текст\n”<<text;
cout<<”\n кінець задачі”;
pause(0); return 0; }
void tarabar(STRING text[])
{ //константний масив; всього символів: 0-126, латиниця: 0-51,
//знаки: 52-62, кирилиця: 63-126
const STRING alphabet[]=
“AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
!?.,*/+-:\АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсЕеУуФф