#include <iostream>
#include <string>
using namespace std;
int main()
{
string w;
int b;
string arr;
getline(cin,w);
cin>>b;
cin.ignore();
getline(cin,arr);
if(w == "szyfruj")
for(int i=0; i<arr.size(); i++)
if(int(arr[i])>=97 && int(arr[i])<=122 || int(arr[i])>=65 && int(arr[i])<=90)
if(int(arr[i])>=97 && int(arr[i])<=122)
if(int(arr[i])+b>122) arr[i]-=26;
arr[i]+=b;
}
else
if(int (arr[i])+b>90) arr[i]-=26;
if(w == "odszyfruj")
if(int(arr[i])-b<97) arr[i]+=26;
arr[i]-=b;
if(int (arr[i])-b<65) arr[i]+=26;
cout<<arr;
return 0;
Объяснение:
код на с++ для примера
пункт со сдвигом букв сам сделаешь
P. S. у меня на 5 они сдвигаются,
#include <iostream.h>
bool amafree(float x1, float x2, float x3, float x4, float y1, float y2, float y3, float y4, float dotx, float doty)
{float x[4],y[4],temp;
for(int i=0;i<4;i++)
for(int j=0;j<3;j++)
if(x[j]<x[j+1])
temp=x[j];
x[j]=x[j+1];
x[j+1]=temp;
temp=y[j];
y[j]=y[j+1];
y[j+1]=temp;
if (y[2]<y[3]) {temp=x[2];
x[2]=x[3];
x[3]=temp;
temp=y[2];
y[2]=y[3];
y[3]=temp; }//теперь мы упорядочили точки прямоугольника, чтобы понимать его как у меня на рисунке
x1=x[0];
x2=x[1];
x3=x[2];
x4=x[3];
y1=y[0];
y2=y[1];
y3=y[2];
y4=y[3];//так мне удобнее, потому что часть условий уже написал без всяких массивов
float k[10];
k[0]=(x1-x2)/(y1-y2);
k[1]=(x1-x3)/(y1-y3);
k[2]=(x3-x4)/(y3-y4);
k[3]=(x2-x4)/(y2-y4);//коэффициенты прямых, проходящих по сторонам прямоугольника
// if(k[0]!=k[2]||k[1]!=k[3]) {cout<<"Eto dazhe ne parallelogramm\n";return false;}//условие параллельности противолежащих сторон
// if(k[0]!=1/k[1]||k[2]!=1/k[3]) {cout<<"Eto dazhe ne pryamougolnik\n";return false;}//условие перпендикулярности смежных сторон
if(dotx<x[1])&&(dotx<x[2])&&(dotx<x3)&&(dotx<x4)||(doty<y1)&&(doty<y2)&&(doty<x3)&&(doty<x4)||//лежит точно вне
(dotx>1)&&(dotx>x2)&&(dotx>x3)&&(dotx>x4)||(doty>y1)&&(doty>y2)&&(doty>x3)&&(doty>x4)||//лежит точно вне
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[0]*dotx<0)||//нижний левый треугольник
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[1]*dotx>0)||//верхний левый
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[2]*dotx>0)||//верхний праввый
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[3]*dotx<0)//нижний правый
return false;
return true;
#include <iostream>
#include <string>
using namespace std;
int main()
{
string w;
int b;
string arr;
getline(cin,w);
cin>>b;
cin.ignore();
getline(cin,arr);
if(w == "szyfruj")
{
for(int i=0; i<arr.size(); i++)
{
if(int(arr[i])>=97 && int(arr[i])<=122 || int(arr[i])>=65 && int(arr[i])<=90)
{
if(int(arr[i])>=97 && int(arr[i])<=122)
{
if(int(arr[i])+b>122) arr[i]-=26;
arr[i]+=b;
}
else
{
if(int (arr[i])+b>90) arr[i]-=26;
arr[i]+=b;
}
}
}
}
if(w == "odszyfruj")
{
for(int i=0; i<arr.size(); i++)
{
if(int(arr[i])>=97 && int(arr[i])<=122 || int(arr[i])>=65 && int(arr[i])<=90)
{
if(int(arr[i])>=97 && int(arr[i])<=122)
{
if(int(arr[i])-b<97) arr[i]+=26;
arr[i]-=b;
}
else
{
if(int (arr[i])-b<65) arr[i]+=26;
arr[i]-=b;
}
}
}
}
cout<<arr;
return 0;
}
Объяснение:
код на с++ для примера
пункт со сдвигом букв сам сделаешь
P. S. у меня на 5 они сдвигаются,
#include <iostream.h>
bool amafree(float x1, float x2, float x3, float x4, float y1, float y2, float y3, float y4, float dotx, float doty)
{float x[4],y[4],temp;
for(int i=0;i<4;i++)
for(int j=0;j<3;j++)
{
if(x[j]<x[j+1])
{
temp=x[j];
x[j]=x[j+1];
x[j+1]=temp;
temp=y[j];
y[j]=y[j+1];
y[j+1]=temp;
}
}
if (y[2]<y[3]) {temp=x[2];
x[2]=x[3];
x[3]=temp;
temp=y[2];
y[2]=y[3];
y[3]=temp; }//теперь мы упорядочили точки прямоугольника, чтобы понимать его как у меня на рисунке
x1=x[0];
x2=x[1];
x3=x[2];
x4=x[3];
y1=y[0];
y2=y[1];
y3=y[2];
y4=y[3];//так мне удобнее, потому что часть условий уже написал без всяких массивов
float k[10];
k[0]=(x1-x2)/(y1-y2);
k[1]=(x1-x3)/(y1-y3);
k[2]=(x3-x4)/(y3-y4);
k[3]=(x2-x4)/(y2-y4);//коэффициенты прямых, проходящих по сторонам прямоугольника
// if(k[0]!=k[2]||k[1]!=k[3]) {cout<<"Eto dazhe ne parallelogramm\n";return false;}//условие параллельности противолежащих сторон
// if(k[0]!=1/k[1]||k[2]!=1/k[3]) {cout<<"Eto dazhe ne pryamougolnik\n";return false;}//условие перпендикулярности смежных сторон
if(dotx<x[1])&&(dotx<x[2])&&(dotx<x3)&&(dotx<x4)||(doty<y1)&&(doty<y2)&&(doty<x3)&&(doty<x4)||//лежит точно вне
(dotx>1)&&(dotx>x2)&&(dotx>x3)&&(dotx>x4)||(doty>y1)&&(doty>y2)&&(doty>x3)&&(doty>x4)||//лежит точно вне
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[0]*dotx<0)||//нижний левый треугольник
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[1]*dotx>0)||//верхний левый
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[2]*dotx>0)||//верхний праввый
(dotx>x1)&&(dotx<x2)&&(dotx<x3)&&(dotx<x4)&&(doty-k[3]*dotx<0)//нижний правый
return false;
return true;
}