Top.Mail.Ru
Ответы

Узнать соседние элементы в двумерном массиве. Python 3

Дан массив n строк на m столбцов, состоящий из нулей и единиц. Для любого элемента соседним являются элементы, имеющие с ним разницу в индексе от 1 до -1, как в индексе столбца, так и строки. Сумму всех соседей записать в отдельный двумерный массив.

Итак, я знаю, что можно пройтись по массиву циклом for, но не знаю как грамотно обработать крайние элементы, лежащие на первом/последнем столбце/строке.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Оракул

int main()
{
setlocale(LC_ALL, "Russian");
srand(time(NULL));
unsigned const int SIZE = 100;
int N, M;
float ARRAY[SIZE][SIZE], min, max, sum, prod;
cout << fixed << setprecision(2);
do {
cout << "Введите количество строк от 2 до " << SIZE << endl;
cin >> N;
} while (N < 2 || N > SIZE);

do {
cout << "Введите количество столбцов от 1 до " << SIZE << endl;
cin >> M;
} while (M < 1 || M > SIZE);

// Алгоритм наполнения элементами и вывода на экран массива с N строк и M столбцов
for (int i = 0; i < N; i++) {
cout << endl;
for (int j = 0; j < M; j++) {
ARRAY[i][j] = (float)rand() / RAND_MAX * 201 - 101;
cout << setw(8) << ARRAY[i][j];
}
}
cout << endl;

// Алгоритм нахождения суммы произведений минимального и максимального элементов строк массива
sum = 0;
for (int i = 0; i < N; i++) {
min = ARRAY[i][0];
max = ARRAY[i][0];
for (int j = 1; j < M; j++) {
if (ARRAY[i][j] < min)
min = ARRAY[i][j];
else if (ARRAY[i][j] > max)
max = ARRAY[i][j];
}
prod = min * max;
cout << "Минимальный элемент " << i + 1 << " строки " << min << ", максимальный - " << max << ", а их произведение равно " << prod << endl;
sum += prod;
}
cout << "Сумма найденых произведений равна " << sum;
}
\\\\\\\\\\\\\\\\\\\\\//Дан двумерный массив из N строк и M столбцов. Определить для
//каждой строки массива произведение минимального и максимального
//элементов. Найти сумму этих произведений.

#include
#include
#include
using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
srand(time(NULL));
unsigned const int SIZE = 100;
int N, M;
float ARRAY[SIZE][SIZE], min, max, sum, prod;
cout << fixed << setprecision(2);
do {
cout << "Введите количество строк от 2 до " << SIZE << endl;
cin >> N;
} while (N < 2 || N > SIZE);

do {
cout << "Введите количество столбцов от 1 до " << SIZE << endl;
cin >> M;
} while (M < 1 || M > SIZE);

// Алгоритм наполнения элементами и вывода на экран массива с N строк и M столбцов
for (int i = 0; i < N; i++) {
cout << endl;
for (int j = 0; j < M; j++) {
ARRAY[i][j] = (float)rand() / RAND_MAX * 201 - 101;
cout << setw(8) << ARRAY[i][j];
}
}
cout << endl;

// Алгоритм нахождения суммы произведений минимального и максимального элементов строк массива
sum = 0;
for (int i = 0; i < N; i++) {
min = ARRAY[i][0];
max = ARRAY[i][0];
for (int j = 1; j < M; j++) {
if (ARRAY[i][j] < min)
min = ARRAY[i][j];
else if (ARRAY[i][j] > max)
max = ARRAY[i][j];
}
prod = min * max;
cout << "Минимальный элемент " << i + 1 << " строки " << min << ", максимальный - " << max << ", а их произведение равно " << prod << endl;
sum += prod;
}
cout << "Сумма найденых произведений равна " << sum;
}

Аватар пользователя
Просветленный

" но не знаю как грамотно обработать крайние элементы, лежащие на первом/последнем столбце/строке."

Это должно явно задаваться в условии.
Может например быть в виде цилиндра, или в виде тора.
Если цилиндра, тогда надо указывать горизонтальный или вертикальный.

Если не указано, то по-моему надо пердполагать, что надо учитывать только ближайшие, то есть по краям 5 соседних, по углам 3 соседних.