Вот есть функция:
int checkField(int chessPlate[8][8], int x, int y) {
int near = 4;
if (chessPlate[x][y + 1] == 1) {
near--;
cout << "1";
}
if (chessPlate[x][y - 1] == 1) {
near--;
cout << "2";
}
if (chessPlate[x + 1][y] == 1) {//здесь что-то не так
near--;
cout << "3";
cout << chessPlate[x + 2][y] << " " << x + 1;
}
if (chessPlate[x - 1][y] == 1) {
near--;
cout << "4";
}
return near;
}
есть матрица 8х8,и в позиции 7,7 есть 1 (остальные ячейки 0).В функцию передаю эту матрицу,и числа 7 и 7.Должно вернуть 4,но возвращает 3.Как так?
Вот весь код:
#include "pch.h"
#include <iostream>
using namespace std;
int checkField(int chessPlate[8][8], int x, int y) {
int near = 4;
if (chessPlate[x][y + 1] == 1) {
near--;
cout << "1";
}
if (chessPlate[x][y - 1] == 1) {
near--;
cout << "2";
}
if (chessPlate[x + 1][y] == 1) {//здесь что-то не так
near--;
cout << "3";
cout << chessPlate[x + 2][y] << " " << x + 1;
}
if (chessPlate[x - 1][y] == 1) {
near--;
cout << "4";
}
return near;
}
int main()
{
int NumOfPix;
cin >> NumOfPix;
int chessPlate[8][8] = { {0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0} };
int **Pos= new int*[NumOfPix];
for (int i = 0; i < NumOfPix; i++)//записываем в матрицу значения
{
Pos[i] = new int[2];
cin >> Pos[i][0] >> Pos[i][1];
Pos[i][0]--;
Pos[i][1]--;
chessPlate[Pos[i][0]] [Pos[i][1]] = 1;
}
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
cout << chessPlate[i][j] << " ";
}
cout << endl;
}
int res = 0;
for (int i = 0; i < NumOfPix; i++)//выщитываем периметр
{
res+=checkField(chessPlate, Pos[i][0], Pos[i][1]);
}
cout << res;
}
res должен быть равен 4 при вводе 1,8 8
Вы пишете, что передаете в функцию матрицу и числа 7 и 7 - все верно? Смотрим что вы написали в той функции:
if (chessPlate[x][y + 1] == 1) {
это вторая строчка. Подставляем ваши значения:
if (chessPlate[7][7 + 1] == 1) {
как видим вы пытаетесь обратиться к элементу матрицы [7][8] но ваша матрица размерностью 8 на 8, тобишь самый нижний правый элемент это [7][7]. Тобишь у вас налицо выход за пределы массива.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Никак не могу выполнить задачу, заданную в ВУЗе - мой алгоритм не работает для больших значенийПодскажите какой-нибудь другой алгоритм для...
Создаю поток методом CreateThreadКак из основного потока получить доступ к обьекту созданому во втором потоке и вызвать его метод?