Определить кодовое смещение k и расшифровать предложение - C (СИ)
Формулировка задачи:
Дано зашифрованное предложение на русском языке и его расшифрованный первый символ C. Определить кодовое смещение k и расшифровать предложение.
Решение задачи: «Определить кодовое смещение k и расшифровать предложение»
textual
Листинг программы
/*Дано зашифрованное предложение на русском языке и его расшифрованный первый символ C.
Определить кодовое смещение k и расшифровать предложение.*/
#include <stdio.h>
#include <locale.h>
int main()
{
int i;
int k=5;
setlocale(LC_ALL,"Rus");
int offset;
char expr[50]="Скажи-ка, дядя, ведь не даром";
char encrypted[50]={0};
char decrypted[50]={0};
char decrypted_letter='С';
for(i=0;i<strlen(expr);i++)
{
encrypted[i]=k+expr[i];
}
puts("Исходная строка:");
printf("%s\n\n",expr);
if(decrypted_letter>encrypted[0]){
offset=decrypted_letter-encrypted[0];
}
else{
offset=encrypted[0]-decrypted_letter;
}
puts("Зашифрованная строка:");
printf("%s\n\n",encrypted);
for(i=0;i<strlen(encrypted);i++)
{
decrypted[i]=encrypted[i]-offset;
}
puts("Расшифрованная строка:");
printf("%s\n\n",decrypted);
printf("Кодовое смещение равно:%d \n",offset);
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с русским языком и вводом-выводом.
- Объявление переменных:
- i - для цикла;
- k - кодовое смещение;
- setlocale(LC_ALL,
Rus) - установка русской локали для корректного отображения русских символов; - offset - для хранения разности между символами;
- expr - исходное предложение;
- encrypted - зашифрованное предложение;
- decrypted - расшифрованное предложение;
- decrypted_letter - расшифрованный первый символ;
- Заполнение исходного предложения в массив expr;
- Шифрование исходного предложения с помощью добавления кодового смещения k к каждому символу и сохранение результата в массив encrypted;
- Вывод зашифрованного предложения;
- Вычисление разности между первым расшифрованным символом и первым зашифрованным символом (для определения направления сдвига);
- Вычисление кодового смещения;
- Вывод расшифрованного предложения;
- Вывод кодового смещения.