Зашифровать текст, заменив каждую букву на букву, отстоящую от нее на 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) - ввод строки для обработки
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д