и саму readMatrix перепишите.я не понял зачем, но сделал так
int N = 0;
int M = 0;
double **A;
readMatrix(N, M, A, dat); // Считывание матрицы
double* B = new double[N];
readMatrix(N, M, A, dat);
поместите
double *B = new double[N];
после вызова readMatrix
и саму readMatrix перепишите.
<code lang="cpp">
#include <conio.h>
#include "pch.h"
#include "Functions.h"
// Считывание матрицы из файла
/*
void readMatrix(int &N, int &M, double ***A, FILE *dat){
fscanf(dat, "%d", &N);
fscanf(dat, "%d", &M); // Считывание размеров матрицы
*A = new double*[N];
for (int i = 0; i < N; i++)
(*A)[i] = new double[M];
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
fscanf(dat, "%lf", &((*A)[i][j]));
}
*/
void readMatrix(int &N, int &M, double **A, FILE *dat) {
fscanf(dat, "%d", N);
fscanf(dat, "%d", M); // Считывание размеров матрицы
A = new double*[N];
for (int i = 0; i < N; i++)
{
A[i] = new double[M];
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
fscanf(dat, "%lf", &A[i][j]);
}
}
}
// Вывод матрицы в файл
void writeMatrix( int N, int M, double **A, FILE *res){
for (int i = 0; i < N; i++){
for (int j = 0; j < M; j++)
fprintf(res, "%6.2lf ", A[i][j]);
fprintf(res, "\n");
}
}
// Вывод массива в файл
void writeMassiv( int N, double *B, FILE *res) {
for (int i = 0; i < N; i++) {
fprintf(res, "%6.2lf ", B[i]);
}
}
double massiv(int N,int M, double **A, double *B){
for (int i = 0; i < N; i++)
{
B[i] = sredn(i, M, A);
}
return 0;
}
// Подсчёт среднего арифметического
double sredn( int i, int M, double **A) {
double summ = 0;
for (int j = 0; j < M; j++)
{
summ = summ + A[i][j];
}
return summ / (M); // Делим на количество элементов
}
// Проверка суммы
bool summa( int N, int M, double **A) {
bool sum = false; // Допустим сумма НЕ отрицательна
double summ = 0;
for(int i=0; i<N; i++)
{
summ = summ + A[i][M-1];
}
if (summ < 0) {
sum = true;
}
return sum;
}
</code>
</spoiler>
<spoiler title=""><code lang="cpp">
#include "pch.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include "Functions.h"
int main(int argn, char *argc[]) {
FILE *dat, *res;
dat = fopen(argc[1], "r"); // Открытие входного файла
res = fopen(argc[2], "w"); // Открутие выходнго файла
int N = 0;
int M = 0;
double **A;
//double *B;
double *B = new double[N];// Объявление динамического массива
/*
fscanf(dat, "%d", &N);
fscanf(dat, "%d", &M); // Считывание размеров матрицы
double **A = new double*[N];
double *B = new double[N];// Объявление динамического массива
for (int i = 0; i < N; i++)
A[i] = new double[M];
*/
readMatrix(N, M, A, dat); // Считывание матрицы
//readMatrix(N, M, &A, dat); // Считывание матрицы
fprintf(res, "Задана матрица A из %d строк и %d столбцов:\n", N, M);
writeMatrix(N, M, A, res); // Вывод матрицы
bool sum = summa(N, M, A); // Проверка суммы
if (sum==false)
{
fprintf(res, "\nСумма элементов последнего столбца не отрицательна\n");
fprintf(res, "\n");
massiv(N, M, A, B);
writeMassiv(N, B, res); // Вывод массива
fprintf(res, "\n");
fprintf(res, "\n");
//writeMatrix(N, M, A, res); // Вывод матрицы
}
else {
fprintf(res, "\nСумма элементов последнего столбца отрицательна\n");
fprintf(res, "\n");
writeMatrix(N, M, A, res); // Вывод матрицы
}
fclose(dat);
fclose(res); // Закрытие файлов
for (int i = 0; i < N; i++)
{
delete[] A[i];
}
delete[] A; // Освобождение памяти от матрицы
/*
for (int i = 0; i < N; i++)
delete[] A[i];
delete[] A; // Освобождение памяти от матрицы
*/
if (sum == false)
{
delete[] B; // Освобождение памяти от матрицы
}
}</code></spoiler>
В общем теперь всё работает. Спасибо!