Вывести сумму элементов столбца матрицы, если в нем нет отрицательных элементов - 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, который будет хранить адреса строк матрицы.
- В цикле выделяется память под каждую строку матрицы.
- В двух вложенных циклах происходит заполнение матрицы значениями.
- В цикле по столбцам происходит подсчет суммы элементов каждого столбца без отрицательных значений.
- Выводится сумма элементов выбранного столбца.
- Находится минимальная сумма элементов столбцов.
- Выводится минимальная сумма элементов.
- Освобождается выделенная память.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д