Вывести сумму элементов столбца матрицы, если в нем нет отрицательных элементов - C (СИ)
Формулировка задачи:
Помогите исправить программу. Выдает неправильный ответ.
Задача:
а)Вывести сумму элементов столбцы, если в нем нет отрицательных элементов.
б)Вывести наим. по модулю сумму элементов параллельных побочной диагонали.
Без указателей прога работает.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
main()
{
int i, j,z, sum, min,N, **A;
printf("Введите размер квадратной матрицы");
scanf("%d", &N);
A=(int**)malloc(N * sizeof(int*));
for (i=0; i<N; i++)
A[i]=(int *)malloc(N * sizeof(int));
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
scanf("%d",&(*(A+i*N+j)));
for (j = 0; j < N; j++)
{
sum = 0;
for (i = 0; i < N; i++)
{
if ((*(A+j*N+i)) >= 0 )
sum += *(A+j*N+i);
else
break;
}
}
printf("В столбце %d сумма %d\n", j,sum);
sum = 0;
for(j = N-2; j > 0; j--,sum = 0)
{
for(i = N-1,z = j; z < N; i--,z++)
sum += abs(*(A+j*N+z));
if ( j == N-2)
min = sum;
else if (sum < min)
min = sum;
}
for(j = N-2; j > 0 ; j--,sum = 0)
{
for(i = 0,z = j; z >= 0; i++,z--)
sum += abs(*(A+j*N+z));
if ( j == N-2)
min = sum;
else if (sum < min)
min = sum;
}
printf("Мин сумма = %d\n", min);
return 0;
}Решение задачи: «Вывести сумму элементов столбца матрицы, если в нем нет отрицательных элементов»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
main()
{
int i, j,z, sum, min,N, **A;
printf("Введите размер квадратной матрицы");
scanf("%d", &N);
A=(int**)malloc(N * sizeof(int*));
for (i=0; i<N; i++)
A[i]=(int *)malloc(N * sizeof(int));
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
scanf("%d",&A[i][j]);
for (j = 0; j < N; j++) {
sum = 0;
for (i = 0; i < N; i++) {
if (A[i][j) >= 0 )
sum += A[i][j);
else
break;
}
}
printf("В столбце %d сумма %d\n", j,sum);
sum = 0;
for(j = N-2; j > 0; j--,sum = 0) {
for(i = N-1,z = j; z < N; i--,z++)
sum += abs(A[i][j));
if ( j == N-2)
min = sum;
else if (sum < min)
min = sum;
}
for(j = N-2; j > 0 ; j--,sum = 0) {
for(i = 0,z = j; z >= 0; i++,z--)
sum += abs(A[i][j));
if ( j == N-2)
min = sum;
else if (sum < min)
min = sum;
}
printf("Мин сумма = %d\n", min);
// ------ а здесь удалить массив, обратно тому, как вы его объявили, сначала в цикле A[i], потом А.
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы для работы с I/O и математическими операциями.
- Указывается функция main(), которая является точкой входа в программу.
- Объявляются переменные:
- i, j, z, sum, min, N, **A;
- i используется для обхода строк матрицы;
- j используется для обхода столбцов матрицы;
- z используется как вспомогательная переменная для второго вложенного цикла;
- sum используется для хранения суммы элементов столбца;
- min используется для хранения минимальной суммы элементов столбца;
- N используется для хранения размера матрицы;
- A является двумерным массивом, который будет хранить значения матрицы.
- Пользователю предлагается ввести размер квадратной матрицы.
- Выделяется память под массив указателей на int, который будет хранить адреса строк матрицы.
- В цикле выделяется память под каждую строку матрицы.
- В двух вложенных циклах происходит заполнение матрицы значениями.
- В цикле по столбцам происходит подсчет суммы элементов каждого столбца без отрицательных значений.
- Выводится сумма элементов выбранного столбца.
- Находится минимальная сумма элементов столбцов.
- Выводится минимальная сумма элементов.
- Освобождается выделенная память.
- Программа завершается.