Если есть вопросы дай знать=) #include <iostream> #include <fstream> using namespace std; void createArray(int**& arr, int p, int t) { arr = new int* [p]; for (int i = 0; i < p; i++) { arr[i] = new int[t]; } } void fillArray(int** arr, int p, int t) { for (int i = 0; i < p; i++) { for (int j = 0; j < t; j++) { cout << "Введите arr[" << i << "][" << j << "]: "; cin >> arr[i][j]; } } } void printArray(int** arr, int p, int t, ofstream& out) { for (int i = 0; i < p; i++) { for (int j = 0; j < t; j++) { cout << arr[i][j] << " "; out << arr[i][j] << " "; } cout << endl; out << endl; } } void deleteArray(int**& arr, int p) { for (int i = 0; i < p; i++) { delete[] arr[i]; } delete[] arr; arr = nullptr; } double averageNonNegative(int** arr, int p, int t, int* nonNegCount) { double sum = 0.0; int count = 0; for (int i = 0; i < p; i++) { int rowNonNegCount = 0; for (int j = 0; j < t; j++) { if (arr[i][j] >= 0) { sum += arr[i][j]; count++; rowNonNegCount++; } } nonNegCount[i] = rowNonNegCount; } if (count == 0) { return 0; } return sum / count; } int main() { int** arr = nullptr; int p, t; cout << "Введите размерность матрицы (p, t): "; cin >> p >> t; createArray(arr, p, t); fillArray(arr, p, t); ofstream outFile("output.txt"); printArray(arr, p, t, outFile); int* nonNegCount = new int[p]; double avg = averageNonNegative(arr, p, t, nonNegCount); cout << "Среднее арифметическое неотрицательных элементов: " << avg << endl; outFile << "Среднее арифметическое неотрицательных элементов: " << avg << endl; for (int i = 0; i < p; i++) { cout << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl; outFile << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl; } deleteArray(arr, p); delete[] nonNegCount; outFile.close(); return 0; } C #include <iostream> #include <fstream> using namespace std; void createArray(int**& arr, int p, int t) { arr = new int* [p]; for (int i = 0; i < p; i++) { arr[i] = new int[t]; } } void fillArray(int** arr, int p, int t) { for (int i = 0; i < p; i++) { for (int j = 0; j < t; j++) { cout << "Введите arr[" << i << "][" << j << "]: "; cin >> arr[i][j]; } } } void printArray(int** arr, int p, int t, ofstream& out) { for (int i = 0; i < p; i++) { for (int j = 0; j < t; j++) { cout << arr[i][j] << " "; out << arr[i][j] << " "; } cout << endl; out << endl; } } void deleteArray(int**& arr, int p) { for (int i = 0; i < p; i++) { delete[] arr[i]; } delete[] arr; arr = nullptr; } double averageNonNegative(int** arr, int p, int t, int* nonNegCount) { double sum = 0.0; int count = 0; for (int i = 0; i < p; i++) { int rowNonNegCount = 0; for (int j = 0; j < t; j++) { if (arr[i][j] >= 0) { sum += arr[i][j]; count++; rowNonNegCount++; } } nonNegCount[i] = rowNonNegCount; } if (count == 0) { return 0; } return sum / count; } int main() { int** arr = nullptr; int p, t; cout << "Введите размерность матрицы (p, t): "; cin >> p >> t; createArray(arr, p, t); fillArray(arr, p, t); ofstream outFile("output.txt"); printArray(arr, p, t, outFile); int* nonNegCount = new int[p]; double avg = averageNonNegative(arr, p, t, nonNegCount); cout << "Среднее арифметическое неотрицательных элементов: " << avg << endl; outFile << "Среднее арифметическое неотрицательных элементов: " << avg << endl; for (int i = 0; i < p; i++) { cout << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl; outFile << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl; } deleteArray(arr, p); delete[] nonNegCount; outFile.close(); return 0; }
lethe1337, "std::vector это последовательный контейнер, инкапсулирующий массивы переменного размера." "Память вектора обрабатывается автоматически, расширяясь по мере необходимости. Векторы обычно занимают больше места, чем статические массивы, поскольку больше памяти выделяется для обработки будущего роста." https://ru.cppreference.com/w/cpp/container/vector
Daemon, может ли размер быть изменен после ввода размерности N x M. также далее по тексту задачи нигде не подразумевается, что размер будет изменен
После дискуссии под предыдущим кодом, переделал в вектора, также добавил проверку на то, существует ли текстовик, если нет - создает его. #include <iostream> #include <fstream> #include <vector> #include <windows.h> using namespace std; void createArray(vector<vector<int>>& arr, int p, int t) { arr.resize(p, vector<int>(t)); } void fillArray(vector<vector<int>>& arr, int p, int t) { for (int i = 0; i < p; i++) { for (int j = 0; j < t; j++) { cout << "Введите arr[" << i << "][" << j << "]: "; cin >> arr[i][j]; } } } void printArray(vector<vector<int>>& arr, int p, int t, ofstream& out) { for (int i = 0; i < p; i++) { for (int j = 0; j < t; j++) { cout << arr[i][j] << " "; out << arr[i][j] << " "; } cout << endl; out << endl; } } void deleteArray(vector<vector<int>>& arr) { arr.clear(); } double averageNonNegative(vector<vector<int>>& arr, int p, int t, vector<int>& nonNegCount) { double sum = 0.0; int count = 0; for (int i = 0; i < p; i++) { int rowNonNegCount = 0; for (int j = 0; j < t; j++) { if (arr[i][j] >= 0) { sum += arr[i][j]; count++; rowNonNegCount++; } } nonNegCount[i] = rowNonNegCount; } if (count == 0) { return 0; } return sum / count; } int main() { SetConsoleOutputCP(CP_UTF8); vector<vector<int>> arr; int p, t; cout << "Введите размерность матрицы (p, t): "; cin >> p >> t; createArray(arr, p, t); fillArray(arr, p, t); ofstream outFile("output.txt"); if (!outFile.is_open()) { outFile.open("output.txt"); } printArray(arr, p, t, outFile); vector<int> nonNegCount(p); double avg = averageNonNegative(arr, p, t, nonNegCount); cout << "Среднее арифметическое неотрицательных элементов: " << avg << endl; outFile << "Среднее арифметическое неотрицательных элементов: " << avg << endl; for (int i = 0; i < p; i++) { cout << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl; outFile << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl; } outFile.close(); return 0; } C #include <iostream> #include <fstream> #include <vector> #include <windows.h> using namespace std; void createArray(vector<vector<int>>& arr, int p, int t) { arr.resize(p, vector<int>(t)); } void fillArray(vector<vector<int>>& arr, int p, int t) { for (int i = 0; i < p; i++) { for (int j = 0; j < t; j++) { cout << "Введите arr[" << i << "][" << j << "]: "; cin >> arr[i][j]; } } } void printArray(vector<vector<int>>& arr, int p, int t, ofstream& out) { for (int i = 0; i < p; i++) { for (int j = 0; j < t; j++) { cout << arr[i][j] << " "; out << arr[i][j] << " "; } cout << endl; out << endl; } } void deleteArray(vector<vector<int>>& arr) { arr.clear(); } double averageNonNegative(vector<vector<int>>& arr, int p, int t, vector<int>& nonNegCount) { double sum = 0.0; int count = 0; for (int i = 0; i < p; i++) { int rowNonNegCount = 0; for (int j = 0; j < t; j++) { if (arr[i][j] >= 0) { sum += arr[i][j]; count++; rowNonNegCount++; } } nonNegCount[i] = rowNonNegCount; } if (count == 0) { return 0; } return sum / count; } int main() { SetConsoleOutputCP(CP_UTF8); vector<vector<int>> arr; int p, t; cout << "Введите размерность матрицы (p, t): "; cin >> p >> t; createArray(arr, p, t); fillArray(arr, p, t); ofstream outFile("output.txt"); if (!outFile.is_open()) { outFile.open("output.txt"); } printArray(arr, p, t, outFile); vector<int> nonNegCount(p); double avg = averageNonNegative(arr, p, t, nonNegCount); cout << "Среднее арифметическое неотрицательных элементов: " << avg << endl; outFile << "Среднее арифметическое неотрицательных элементов: " << avg << endl; for (int i = 0; i < p; i++) { cout << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl; outFile << "Количество неотрицательных элементов в строке " << i << ": " << nonNegCount[i] << endl; } outFile.close(); return 0; }