Ввести fen строку, преобразовать, вывести на экран в виде таблицы 8*8 - C (СИ)

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

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

Шахматные позиции записываются в виде FEN строки - http://www.gambiter.ru/chess/item/242-fen.html Задача: ввести fen строку, преобразовать, вывести на экран в виде таблицы 8*8 Мысль: сделать одну строку длинной 64 символа. все косые линии убрать, цифры преобразовать в количество нулей. 1 -> 0 2 -> 00 3 -> 000 и т.д. буквы фигур оставить без изменений. Вывести на консоль по 8 в ряд, написать чей ход.

Решение задачи: «Ввести fen строку, преобразовать, вывести на экран в виде таблицы 8*8»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
void FEN2Board(char *fen, char *board)
{
    int i,iboard=0,j;
    for (i=0; i<64; i++) board[i]=' ';
    char c;
 
    for (i=0; i<strlen(fen); i++) // с концом строки
    {
        c=fen[i];
        if (c>='1' && c<='8')
        {
            for (j=0; j<=c-'1'; j++)
            {
                board[iboard]='.';
                iboard++;
            }
            continue;
        }
        if (fen[i]!='/')
        {
            board[iboard]=fen[i];
            iboard++;
        }
    }
    return;
}
 
void PrintBoard(char *board)
{
    int i;
    printf("\n");
    for (i=0; i<64; i++)
    {
        if (i>0 && i%8 == 0) printf("\n");
        printf("%c ", board[i]);
    }
    printf("\n\n");
    return;
}
 
int main()
{
    char fen[50];
    char board[64];
 
    printf("FEN to board\n");
    while(1)
    {
        printf("insert FEN position\n");
        scanf("%s", fen);
        FEN2Board(fen, board);
        PrintBoard(board);
    }
    return 0;
}

Объяснение кода листинга программы

  1. Программа преобразует строку FEN в соответствующую ей доску 8x8.
  2. Ввод осуществляется с клавиатуры, вводится строка FEN.
  3. Для преобразования используется функция FEN2Board.
  4. Функция FEN2Board заполняет доску, используя символ ' ' (пробел).
  5. В функции используется два вложенных цикла:
    • Внешний цикл перебирает все 64 элемента доски.
    • Внутренний цикл используется для обработки чисел от '1' до '8' и соответствующих им символов '/'.
  6. Внутренний цикл начинается с символа '1' и заканчивается символом '8', пропуская символы '/'.
  7. Внутренний цикл используется для пропуска символов '/'.
  8. Если символ не является числом от '1' до '8', он копируется в доску.
  9. Если символ является числом от '1' до '8', в доску записываются символы '.' до следующего числа.
  10. Доска выводится на экран с помощью функции PrintBoard.
  11. Функция PrintBoard использует вложенный цикл для вывода доски 8x8.
  12. Если индекс больше 0 и кратен 8, выводится символ новой строки '\n'.
  13. Выводится символ доски.
  14. Программа завершается, когда пользователь вводит пустую строку.

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


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

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

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