Ввести 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; }
Объяснение кода листинга программы
- Программа преобразует строку FEN в соответствующую ей доску 8x8.
- Ввод осуществляется с клавиатуры, вводится строка FEN.
- Для преобразования используется функция FEN2Board.
- Функция FEN2Board заполняет доску, используя символ ' ' (пробел).
- В функции используется два вложенных цикла:
- Внешний цикл перебирает все 64 элемента доски.
- Внутренний цикл используется для обработки чисел от '1' до '8' и соответствующих им символов '/'.
- Внутренний цикл начинается с символа '1' и заканчивается символом '8', пропуская символы '/'.
- Внутренний цикл используется для пропуска символов '/'.
- Если символ не является числом от '1' до '8', он копируется в доску.
- Если символ является числом от '1' до '8', в доску записываются символы '.' до следующего числа.
- Доска выводится на экран с помощью функции PrintBoard.
- Функция PrintBoard использует вложенный цикл для вывода доски 8x8.
- Если индекс больше 0 и кратен 8, выводится символ новой строки '\n'.
- Выводится символ доски.
- Программа завершается, когда пользователь вводит пустую строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д