Условие: Дана матрица А(n x m). Создать функцию, в которой получить из матрицы новый массив, куда переписать элементы под главной диагональю и на диагонали по строкам. С помощью функции найти новую величину равную произведению четных элементов, расположенных после наименьшего элемента полученного массива. Зелёным цветом выделено, что я сделал, помогите с остальной частью и добавить в код #include <iostream> using namespace std; void input_matr(int**, int, int); int* getA(int**, int); int main() { setlocale(LC_CTYPE, ""); srand(time(NULL)); int n = 5, m = 5; int** A = new int* [n]; for (int i = 0; i < n; i++) A[i] = new int[m]; input_matr(A, n, m); // получаем новый массив, содержащий элементы на диагонали по строкам и под главной диагональю int* newArray = getA(A, n); // выводим новый массив на экран int size = n * (n - 1) / 2 + n; for (int i = 0; i < size; i++) { cout << newArray[i] << " "; } cout << endl; // освобождаем память for (int i = 0; i < n; i++) delete[] A[i]; delete[] A; delete[] newArray; return 0; } void input_matr(int** A, int n, int m) { for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { *(*(A + i) + j) = rand()%20+1; cout << *(*(A + i) + j) << "\t"; } cout << "\n"; } cout << endl; } int* getA(int** A, int n) { int size = n * (n - 1) / 2 + n; // размер нового массива int* newArray = new int[size]; // выделяем память для нового массива int k = 0; // индекс для нового массива // перебираем строки и столбцы матрицы for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { // если элемент находится на диагонали по строкам или ниже нее, добавляем его в новый массив if (j <= i) { newArray[k] = A[i][j]; k++; } } } return newArray; } C #include <iostream> using namespace std; void input_matr(int**, int, int); int* getA(int**, int); int main() { setlocale(LC_CTYPE, ""); srand(time(NULL)); int n = 5, m = 5; int** A = new int* [n]; for (int i = 0; i < n; i++) A[i] = new int[m]; input_matr(A, n, m); // получаем новый массив, содержащий элементы на диагонали по строкам и под главной диагональю int* newArray = getA(A, n); // выводим новый массив на экран int size = n * (n - 1) / 2 + n; for (int i = 0; i < size; i++) { cout << newArray[i] << " "; } cout << endl; // освобождаем память for (int i = 0; i < n; i++) delete[] A[i]; delete[] A; delete[] newArray; return 0; } void input_matr(int** A, int n, int m) { for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { *(*(A + i) + j) = rand()%20+1; cout << *(*(A + i) + j) << "\t"; } cout << "\n"; } cout << endl; } int* getA(int** A, int n) { int size = n * (n - 1) / 2 + n; // размер нового массива int* newArray = new int[size]; // выделяем память для нового массива int k = 0; // индекс для нового массива // перебираем строки и столбцы матрицы for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { // если элемент находится на диагонали по строкам или ниже нее, добавляем его в новый массив if (j <= i) { newArray[k] = A[i][j]; k++; } } } return newArray; }
нелепость, я добавил функцию `findProduct` для нахождения произведения четных элементов после наименьшего элемента полученного массива. Вот обновленный код: #include <iostream> #include <limits> using namespace std; void input_matr(int**, int, int); int* getA(int**, int); int findProduct(int*, int); int main() { setlocale(LC_CTYPE, ""); srand(time(NULL)); int n = 5, m = 5; int** A = new int* [n]; for (int i = 0; i < n; i++) A[i] = new int[m]; input_matr(A, n, m); int* newArray = getA(A, n); int size = n * (n - 1) / 2 + n; for (int i = 0; i < size; i++) { cout << newArray[i] << " "; } cout << endl; int product = findProduct(newArray, size); cout << "Произведение четных элементов после наименьшего элемента: " << product << endl; for (int i = 0; i < n; i++) delete[] A[i]; delete[] A; delete[] newArray; return 0; } void input_matr(int** A, int n, int m) { for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { *(*(A + i) + j) = rand()%20+1; cout << *(*(A + i) + j) << "\t"; } cout << "\n"; } cout << endl; } int* getA(int** A, int n) { int size = n * (n - 1) / 2 + n; int* newArray = new int[size]; int k = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j <= i) { newArray[k] = A[i][j]; k++; } } } return newArray; } int findProduct(int* array, int size) { int minIndex = 0; int minValue = numeric_limits<int>::max(); for (int i = 0; i < size; i++) { if (array[i] < minValue) { minValue = array[i]; minIndex = i; } } int product = 1; for (int i = minIndex + 1; i < size; i++) { if (array[i] % 2 == 0) { product *= array[i]; } } return product; } C #include <iostream> #include <limits> using namespace std; void input_matr(int**, int, int); int* getA(int**, int); int findProduct(int*, int); int main() { setlocale(LC_CTYPE, ""); srand(time(NULL)); int n = 5, m = 5; int** A = new int* [n]; for (int i = 0; i < n; i++) A[i] = new int[m]; input_matr(A, n, m); int* newArray = getA(A, n); int size = n * (n - 1) / 2 + n; for (int i = 0; i < size; i++) { cout << newArray[i] << " "; } cout << endl; int product = findProduct(newArray, size); cout << "Произведение четных элементов после наименьшего элемента: " << product << endl; for (int i = 0; i < n; i++) delete[] A[i]; delete[] A; delete[] newArray; return 0; } void input_matr(int** A, int n, int m) { for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { *(*(A + i) + j) = rand()%20+1; cout << *(*(A + i) + j) << "\t"; } cout << "\n"; } cout << endl; } int* getA(int** A, int n) { int size = n * (n - 1) / 2 + n; int* newArray = new int[size]; int k = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j <= i) { newArray[k] = A[i][j]; k++; } } } return newArray; } int findProduct(int* array, int size) { int minIndex = 0; int minValue = numeric_limits<int>::max(); for (int i = 0; i < size; i++) { if (array[i] < minValue) { minValue = array[i]; minIndex = i; } } int product = 1; for (int i = minIndex + 1; i < size; i++) { if (array[i] % 2 == 0) { product *= array[i]; } } return product; } Теперь программа выводит произведение четных элементов после наименьшего элемента полученного массива. Удачи!
нелепость, `int minValue = numeric_limits<int>::max();` используется для инициализации переменной `minValue` максимально возможным значением для типа `int`. Это делается для того, чтобы при поиске наименьшего элемента в массиве, любое значение из массива будет меньше или равно этому начальному значению. `numeric_limits` является шаблонным классом из стандартной библиотеки `<limits>`, который предоставляет информацию о свойствах числовых типов. В данном случае, `numeric_limits<int>::max()` возвращает максимальное значение, которое может быть представлено типом `int`.
нелепость, если вы хотите инициализировать `minValue` без использования `numeric_limits`, вы можете просто присвоить ей значение первого элемента массива. Вот измененная функция `findProduct`: int findProduct(int* array, int size) { int minIndex = 0; int minValue = array[0]; // Инициализация minValue первым элементом массива for (int i = 1; i < size; i++) { // Начинаем сравнение со второго элемента if (array[i] < minValue) { minValue = array[i]; minIndex = i; } } int product = 1; for (int i = minIndex + 1; i < size; i++) { if (array[i] % 2 == 0) { product *= array[i]; } } return product; } C int findProduct(int* array, int size) { int minIndex = 0; int minValue = array[0]; // Инициализация minValue первым элементом массива for (int i = 1; i < size; i++) { // Начинаем сравнение со второго элемента if (array[i] < minValue) { minValue = array[i]; minIndex = i; } } int product = 1; for (int i = minIndex + 1; i < size; i++) { if (array[i] % 2 == 0) { product *= array[i]; } } return product; } Теперь `minValue` инициализируется первым элементом массива, и цикл сравнения начинается со второго элемента. Это также будет корректно работать для нахождения наименьшего элемента в массиве.
у тебя выше код, даже чат объяснил что такое numeric_limit(type)::max(), если не хочешь использовать стл, замени на 10^6. замена элементов, если не используете поинтеры, то замени: **(a+I)+j на a[j], также передавать в функцию массив можно без принтера: вместо int **arr как int a[][] или int a[n][m] и плюс: вместо динамического выделения (в задаче не просят), проще будет создать два простых массива или использовать стл: vector<type> name.