Итак, я инициализировал массив как массив [8] [8], давайте предположим, что я нахожусь в точке (строка, столбец) и, например, это строка 4 столбца 4, и я хочу перебрать все диагональные направления (юго-восток, юго-запад, северо-восток, северо-запад)
поэтому я написал 4 разные функции для проверки каждого направления в отдельности, и вот пример для Северо-Востока
for(int i = 0; i < 8; i++)
for(int j = 0; j < 8; j++)
if(array[i - 1][j+1] == 'x')
{
count = count + 1;
}
Есть ли способ сделать петлю во всех диагональных направлениях одновременно?
Другая проблема заключается в том, что если вы выходите за границы, например, если точка равна (7,7), то на северо-востоке не будет никакого значения, потому что оно превысит массив границ массива [6] [8], а это вне массива. границы. Как я могу справиться с этой проблемой? или компилятор возвращает ошибку, когда это происходит?
Вы можете, конечно, проверить в каждом направлении, например,
for(int i = 0; i < 8; i++) {
for(int j = 0; j < 8; j++) {
if (check_north_east(array, i, j))
++count;
if (check_north_west(array, i, j))
++count;
if (check_south_east(array, i, j))
++count;
if (check_south_west(array, i, j))
++count;
}
}
Компилятор с удовольствием выйдет за пределы массива. Поэтому вы должны убедиться, что код не сделает этого, и проверить себя
const int NROWS = 8, NCOLS = 8;
bool check_north_east(char array[][NCOLS], int row, int col)
{
if (row <= 0 || col >= NCOLS - 1)
return false;
return array[row - 1][col + 1] == 'x';
}
Других решений пока нет …