Я начинаю программировать и пытаюсь сжать большую часть ошибок, подверженных ошибкам. Довольно много я хочу это такСреднее значение эквивалента для C++
if (tileBlocked[row - 1][col] == true)
{
add tileAir[row - 1][col] to averaging
}
таким образом, что я найти среднее из значений в массиве tileAir только если tileBlocked не перечисляет эту область как заблокированный. Я обыскал, и единственное, что я нашел, это Averageif, который, насколько я могу судить, только для excel. Есть ли какой-либо эквивалент или каким-то образом, в котором я мог бы уменьшить размер этого куска кода и позволить лучше расширить возможности?
Сейчас это мой текущий код:
for (int row = 1; row < 255; ++row) // Repeats for all rows, skipping the first and final row
{
for (int col = 1; col < 255; ++col) // Repeats for all columns, skipping the first and final column
{
bool check[4] = { tilesBlocked[row - 1][col], tilesBlocked[row][col - 1], tilesBlocked[row][col + 1], tilesBlocked[row + 1][col] }; // Creates an Array for testing what tiles should be ommited from the calculation
if (tilesBlocked[row][col][0] == true) // If the tile being calculated is blocked, skip it
{
}
else if (check[0] == true && check[1] == true && check[2] == true && check[3] == true)
{
}
else if (check[0] == false && check[1] == false && check[2] == false && check[3] == false)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row - 1][col] + tilesOxygen[row][col - 1] + tilesOxygen[row][col + 1] + tilesOxygen[row + 1][col])/5);
tilesOxygen[row - 1][col] = tilesOxygen[row][col];
tilesOxygen[row][col - 1] = tilesOxygen[row][col];
tilesOxygen[row][col + 1] = tilesOxygen[row][col];
tilesOxygen[row + 1][col] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == false && check[1] == false && check[2] == false && check[3] == true)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row - 1][col] + tilesOxygen[row][col - 1] + tilesOxygen[row][col + 1])/4);
tilesOxygen[row - 1][col] = tilesOxygen[row][col];
tilesOxygen[row][col - 1] = tilesOxygen[row][col];
tilesOxygen[row][col + 1] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == false && check[1] == false && check[2] == true && check[3] == false)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row - 1][col] + tilesOxygen[row][col - 1] + tilesOxygen[row + 1][col])/4);
tilesOxygen[row - 1][col] = tilesOxygen[row][col];
tilesOxygen[row][col - 1] = tilesOxygen[row][col];
tilesOxygen[row + 1][col] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == false && check[1] == false && check[2] == true && check[3] == true)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row - 1][col] + tilesOxygen[row][col - 1])/3);
tilesOxygen[row - 1][col] = tilesOxygen[row][col];
tilesOxygen[row][col - 1] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == false && check[1] == true && check[2] == false && check[3] == false)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row - 1][col] + tilesOxygen[row][col + 1] + tilesOxygen[row + 1][col])/4);
tilesOxygen[row - 1][col] = tilesOxygen[row][col];
tilesOxygen[row][col + 1] = tilesOxygen[row][col];
tilesOxygen[row + 1][col] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == false && check[1] == true && check[2] == false && check[3] == true)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row - 1][col] + tilesOxygen[row][col + 1])/3);
tilesOxygen[row - 1][col] = tilesOxygen[row][col];
tilesOxygen[row][col + 1] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == false && check[1] == true && check[2] == true && check[3] == false)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row - 1][col] + tilesOxygen[row + 1][col])/3);
tilesOxygen[row - 1][col] = tilesOxygen[row][col];
tilesOxygen[row + 1][col] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == false && check[1] == true && check[2] == true && check[3] == true)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row - 1][col])/2);
tilesOxygen[row - 1][col] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == true && check[1] == false && check[2] == false && check[3] == false)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row][col - 1] + tilesOxygen[row][col + 1] + tilesOxygen[row + 1][col])/4);
tilesOxygen[row][col - 1] = tilesOxygen[row][col];
tilesOxygen[row][col + 1] = tilesOxygen[row][col];
tilesOxygen[row + 1][col] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == true && check[1] == false && check[2] == false && check[3] == true)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row][col - 1] + tilesOxygen[row][col + 1])/3);
tilesOxygen[row][col - 1] = tilesOxygen[row][col];
tilesOxygen[row][col + 1] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == true && check[1] == false && check[2] == true && check[3] == false)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row][col - 1] + tilesOxygen[row + 1][col])/3);
tilesOxygen[row][col - 1] = tilesOxygen[row][col];
tilesOxygen[row + 1][col] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == true && check[1] == false && check[2] == true && check[3] == true)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row][col - 1])/2);
tilesOxygen[row][col - 1] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == true && check[1] == true && check[2] == false && check[3] == false)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row][col + 1] + tilesOxygen[row + 1][col])/3);
tilesOxygen[row][col + 1] = tilesOxygen[row][col];
tilesOxygen[row + 1][col] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == true && check[1] == true && check[2] == false && check[3] == true)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row][col + 1])/2);
tilesOxygen[row][col + 1] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else if (check[0] == true && check[1] == true && check[2] == true && check[3] == false)
{
tilesOxygen[row][col] = ((tilesOxygen[row][col] + tilesOxygen[row + 1][col])/2);
tilesOxygen[row + 1][col] = tilesOxygen[row][col];
tilesOxygen[0][col] = 0;
tilesOxygen[row][0] = 0;
tilesOxygen[255][col] = 0;
tilesOxygen[row][255] = 0;
}
else
{
std::cout << "Something Broke";
}
}
}
Как вы можете видеть, это очень unexpandable и подвержен ошибкам. В этом конкретном примере tileAir заменяется на tileOxygen.
Использование функции в C++ в случае повторяющегося кода. В таких случаях ошибка фиксируется в одной конкретной функции вместо целого кода. –
Я не думаю, что он компилируется. 'tilesBlocked [row-1] [col]' похоже, является bool, тогда как вы можете разыменовать его в третий раз: 'tilesBlocked [row] [col] [0]' – seleciii44
@RishitSanmukhani Как это будет работать с parallel_for (с точки зрения совместимости). На каждый тип воздуха на самом деле будет 6 различных потоков. Кроме того, любые идеи о том, как мне настроить эту функцию? –