Зашифровать текст, заменив каждую букву на букву, отстоящую от нее на n букв - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста написать прогу в си вот код паскаля задание Зашифровать заданный текст, записанный с помощью русских букв и знаков препинания, заменив каждую букву на букву, отстоящую от нее на n букв. Сдвиг производить по кругу. Расшифровать полученный текст. Знаки препинания – точка, запятая, пробел.
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 букв»

textual
Листинг программы
#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 пользователю предлагается выбрать режим работы программы (шифрование или расшифровка) и ввести строку для обработки. В зависимости от выбранного режима, к введенной строке применяется соответствующая функция. Список переменных и их значений:

  1. i - счетчик символов в строке
  2. str - указатель на строку, которую необходимо обработать
  3. mode - режим работы программы (1 - шифрование, 2 - расшифровка)
  4. str[i] - текущий символ в строке
  5. encrypt(str) - функция для шифрования строки
  6. decrypt(str) - функция для расшифровки строки
  7. str[i]==65 || str[i]==97 - проверка, является ли текущий символ 'A' или 'a'
  8. str[i]==90 || str[i]==122 - проверка, является ли текущий символ 'Z' или 'z'
  9. str[i]>=66 && str[i]<=90||(str[i]>=98 && str[i]<=122) - проверка, является ли текущий символ 'B' - 'M' или 'N' - 'Z'
  10. str[i]>=65 && str[i]<=89||(str[i]>=97 && str[i]<=121) - проверка, является ли текущий символ 'A' - 'I' или 'a' - 'j'
  11. encrypt(str) - шифрование строки
  12. decrypt(str) - расшифровка строки
  13. mode==1 - проверка, выбран ли режим шифрования
  14. mode==2 - проверка, выбран ли режим расшифровки
  15. printf(%s,encrypt(str)) - вывод зашифрованной строки
  16. printf(%s,decrypt(str)) - вывод расшифрованной строки
  17. break - выход из switch-case структуры
  18. printf(\n) - добавление символа новой строки
  19. scanf(%d\n,&mode) - ввод режима работы программы
  20. gets(str) - ввод строки для обработки

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы