Даны две литеры—латинская буква (от а до h) и цифра (от 1 до 8), например, а2 или g5. Рассматривая их как координаты поля шахматной доски, на котором находится конь, нарисовать шахматную доску, пометив крестиками все поля, которые «бьет» этот конь, и ноликами все остальные поля — C++(Си)

bool Check(char *c)
{
 int x;
 int y; 
 x=*c-'0'+1;
 y=*(c+1)-'a'+1;
 if ((x>=1)&(x<=8)&(y>1)&(y<=8))
 {
  return true;
 }
 return false;
}
char *Kon(char *c)
{
 static char Verts[13]="  abcdefgh  ";
 static char Horz [13]="  0123456789  ";
 char Fields[8][2];
 char *r;
 int x;
 int y; 
 int n;
 int i;
 char *p;
 x=*c-'0'+1;
 y=*(c+1)-'a'+1;
 Fields[0][0]=Verts[x+2];
 Fields[0][1]=Horz[y+3];
 Fields[1][0]=Verts[x];
 Fields[1][1]=Horz[y+3];
 Fields[2][0]=Verts[x+2];
 Fields[2][1]=Horz[y-1];
 Fields[3][0]=Verts[x];
 Fields[3][1]=Horz[y-1];
 Fields[4][0]=Verts[x+3];
 Fields[4][1]=Horz[y+2];
 Fields[5][0]=Verts[x-1];
 Fields[5][1]=Horz[y+2];
 Fields[6][0]=Verts[x+3];
 Fields[6][1]=Horz[y];
 Fields[7][0]=Verts[x-1];
 Fields[7][1]=Horz[y];
 for (n=0; i=7; i>=0; --i)
 {
  if (Check(Fields[i])
  {
   ++n;
  }
 }
 r=new char [n];
 if (r)
 {
  for (p=r, i=7; i>=0; ++i, p+=2;)
  {
   if (Check(Fields[i])
   {
    *p=Fields[i][0];
    *(p+1)=Fields[i][1];
   }
  }
 }
}

Leave a Comment