C/C++
Решить задачу в С (СИ)
Дано зашифрованное предложение и кодовое смещение K (0 < K < 10). Шифрование выполнено путем циклической замены каждой буквы в исходной строке на букву того же регистра, расположенную в алфавите на K-й позиции после шифруемой буквы (например, для K = 2 «A» перейдет в «C», «a» — в «c», «B» — в «D», «z» — в «b» и т. д.). Расшифровать предложение.
#include <stdio.h>
int little(const char c)
{
return c >= 'a' && c <= 'z';
}
int big(const char c)
{
return c >= 'A' && c <= 'Z';
}
int little_to_right(char * c, int K)
{
if(K < 0 || !little(*c)) return 0;
(*c) += K;
while((*c) > 'z') (*c) -= 26;
return 1;
}
int little_to_left(char * c, int K)
{
if(K > 0 || !little(*c)) return 0;
(*c) += K;
while((*c) < 'a') (*c) += 26;
return 0;
}
int big_to_right(char * c, int K)
{
if(K < 0 || !big(*c)) return 0;
(*c) += K;
while((*c) > 'Z') (*c) -= 26;
return 1;
}
int big_to_left(char * c, int K)
{
if(K > 0 || !big(*c)) return 0;
(*c) += K;
while((*c) < 'A') (*c) += 26;
return 0;
}
void deshifr(char * str, int K)
{
int i = 0;
if(K > 0)
{
while(str[i])
{
if(little(str[i])) little_to_right(&(str[i]),K);
else if(big(str[i])) big_to_right(&(str[i]),K);
i++;
}
}
else if(K < 0)
{
while(str[i])
{
if(little(str[i])) little_to_left(&(str[i]),K);
else if(big(str[i])) big_to_left(&(str[i]),K);
i++;
}
}
}
void shifr(char * str, int K)
{
int i = 0;
K *= -1;
deshifr(str,K);
}
int main()
{
const int size = 500;
char fraza[size];
printf("Введите шифрованную фразу: ");
fgets(fraza,size,stdin);
int K;
printf("K = ");
scanf("%d",&K);
deshifr(fraza,K);
printf("После расшифровки:\n %s",fraza);
return 0;
}
// Пример работы программы:
Введите шифрованную фразу: Vgzsviym Nzmbzzqdxc Kpncfdi. Kjzudev Mjnndd!
K = 5
После расшифровки:
Alexandr Sergeevich Pushkin. Poezija Rossii!
// Ниже я изменил функцию main, чтобы K было в заданном диапазоне
int little(const char c)
{
return c >= 'a' && c <= 'z';
}
int big(const char c)
{
return c >= 'A' && c <= 'Z';
}
int little_to_right(char * c, int K)
{
if(K < 0 || !little(*c)) return 0;
(*c) += K;
while((*c) > 'z') (*c) -= 26;
return 1;
}
int little_to_left(char * c, int K)
{
if(K > 0 || !little(*c)) return 0;
(*c) += K;
while((*c) < 'a') (*c) += 26;
return 0;
}
int big_to_right(char * c, int K)
{
if(K < 0 || !big(*c)) return 0;
(*c) += K;
while((*c) > 'Z') (*c) -= 26;
return 1;
}
int big_to_left(char * c, int K)
{
if(K > 0 || !big(*c)) return 0;
(*c) += K;
while((*c) < 'A') (*c) += 26;
return 0;
}
void deshifr(char * str, int K)
{
int i = 0;
if(K > 0)
{
while(str[i])
{
if(little(str[i])) little_to_right(&(str[i]),K);
else if(big(str[i])) big_to_right(&(str[i]),K);
i++;
}
}
else if(K < 0)
{
while(str[i])
{
if(little(str[i])) little_to_left(&(str[i]),K);
else if(big(str[i])) big_to_left(&(str[i]),K);
i++;
}
}
}
void shifr(char * str, int K)
{
int i = 0;
K *= -1;
deshifr(str,K);
}
int main()
{
const int size = 500;
char fraza[size];
printf("Введите шифрованную фразу: ");
fgets(fraza,size,stdin);
int K;
printf("K = ");
scanf("%d",&K);
deshifr(fraza,K);
printf("После расшифровки:\n %s",fraza);
return 0;
}
// Пример работы программы:
Введите шифрованную фразу: Vgzsviym Nzmbzzqdxc Kpncfdi. Kjzudev Mjnndd!
K = 5
После расшифровки:
Alexandr Sergeevich Pushkin. Poezija Rossii!
// Ниже я изменил функцию main, чтобы K было в заданном диапазоне
Похожие вопросы
- Решить задачу на языке СИ
- Помогите пожалуйста решить задачу на языке СИ или С# !!!
- Помогите решить задачу, пожалуйста. (Язык Си)
- Решить задачу на C (СИ)
- Помогите пожалуйста решить задачу на Си
- Помогите решить задачу на структуры в Си.
- Помогите с решением задачи на языке СИ
- Помогите с задачей на языке СИ
- Помогите с 4 задачей на языке си
- Помогите решить задачу, пожалуйста. Сам не понимаю. (Язык Си)
int little(const char c)
{
return c >= 'a' && c <= 'z';
}
int big(const char c)
{
return c >= 'A' && c <= 'Z';
}
int little_to_right(char * c, int K)
{
if(K < 0 || !little(*c)) return 0;
(*c) += K;
while((*c) > 'z') (*c) -= 26;
return 1;
}
int little_to_left(char * c, int K)
{
if(K > 0 || !little(*c)) return 0;
(*c) += K;
while((*c) < 'a') (*c) += 26;
return 0;
}
int big_to_right(char * c, int K)
{
if(K < 0 || !big(*c)) return 0;
(*c) += K;
while((*c) > 'Z') (*c) -= 26;
return 1;
}
int big_to_left(char * c, int K)
{
if(K > 0 || !big(*c)) return 0;
(*c) += K;
while((*c) < 'A') (*c) += 26;
return 0;
}