Зашифровать текст, заменив каждую букву на букву, отстоящую от нее на n букв - C (СИ)
Формулировка задачи:
Uses
crt;
Function decrypt(a:string):string;
Var i,k:integer;
Begin
For i:=1 to length(a) do
If (a[i] = 'А') or (a[i] = 'а') then Begin
k:=ord(a[i])+31;
a[i]:=chr(k);
End
else
If a[i] in ['Б'..'Я','б'..'я'] then Begin
k:=ord(a[i])-1;
a[i]:=chr(k);
End;
decrypt:=a;
End;
Function encrypt(a:string):string;
Var i,k:integer;
Begin
For i:=1 to length(a) do
If (a[i] = 'Я') or (a[i] = 'я') then Begin
k:=ord(a[i])-31;
a[i]:=chr(k);
End
else
If a[i] in ['А'..'Ю','а'..'ю'] then Begin
k:=ord(a[i])+1;
a[i]:=chr(k);
End;
encrypt:=a;
End;
Var
a:string;
mode:byte;
Begin
Readln(a);
Repeat
Write('Выберите режим (1-шифрование, 2-расшифрование): ');
Readln(mode);
Until (mode = 1) or (mode=2);
Case mode of
1:writeln(encrypt(a));
2:writeln(decrypt(a));
End;
End.Решение задачи: «Зашифровать текст, заменив каждую букву на букву, отстоящую от нее на n букв»
#include<stdio.h>
char *encrypt(char *str)
{
int i;
i = 0;
while(str[i] != '\0')
{
if(str[i]==65 || str[i]==97)
str[i]+=25;
else if((str[i]>=66 && str[i]<=90)||(str[i]>=98 && str[i]<=122))
str[i]--;
i++;
}
return str;
}
char *decrypt(char *str)
{
int i;
i = 0;
while(str[i] != '\0')
{
if(str[i]==90 || str[i]==122)
str[i]-=25;
else if((str[i]>=65 && str[i]<=89)||(str[i]>=97 && str[i]<=121))
str[i]++;
i++;
}
return str;
}
void main()
{
int mode;
char str[100];
printf("Choose mode (1-encrypt, 2-decrypt): ");
scanf("%d\n",&mode);
gets(str);
switch(mode)
{
case 1:
printf("%s",encrypt(str));
break;
case 2:
printf("%s",decrypt(str));
break;
}
printf("\n");
}
Объяснение кода листинга программы
В этом коде реализована простая шифровальная программа на языке C. Она использует два разных функции: encrypt и decrypt для шифрования и расшифровки текста соответственно. В функции encrypt каждая буква в строке заменяется на букву, отстоящую от нее на 25 позиций в алфавите (если исходная буква - это 'A' или 'a', то она становится 'Z' или 'z' соответственно). В функции decrypt каждая буква в строке заменяется на букву, отстоящую от нее на 25 позиций в алфавите в обратном направлении (если исходная буква - это 'Z' или 'z', то она становится 'A' или 'a' соответственно). В функции main пользователю предлагается выбрать режим работы программы (шифрование или расшифровка) и ввести строку для обработки. В зависимости от выбранного режима, к введенной строке применяется соответствующая функция. Список переменных и их значений:
- i - счетчик символов в строке
- str - указатель на строку, которую необходимо обработать
- mode - режим работы программы (1 - шифрование, 2 - расшифровка)
- str[i] - текущий символ в строке
- encrypt(str) - функция для шифрования строки
- decrypt(str) - функция для расшифровки строки
- str[i]==65 || str[i]==97 - проверка, является ли текущий символ 'A' или 'a'
- str[i]==90 || str[i]==122 - проверка, является ли текущий символ 'Z' или 'z'
- str[i]>=66 && str[i]<=90||(str[i]>=98 && str[i]<=122) - проверка, является ли текущий символ 'B' - 'M' или 'N' - 'Z'
- str[i]>=65 && str[i]<=89||(str[i]>=97 && str[i]<=121) - проверка, является ли текущий символ 'A' - 'I' или 'a' - 'j'
- encrypt(str) - шифрование строки
- decrypt(str) - расшифровка строки
- mode==1 - проверка, выбран ли режим шифрования
- mode==2 - проверка, выбран ли режим расшифровки
- printf(
%s,encrypt(str)) - вывод зашифрованной строки - printf(
%s,decrypt(str)) - вывод расшифрованной строки - break - выход из switch-case структуры
- printf(
\n) - добавление символа новой строки - scanf(
%d\n,&mode) - ввод режима работы программы - gets(str) - ввод строки для обработки