Не правильный подсчет элементов матрицы - C (СИ)
Формулировка задачи:
Задание:построить последовательность чисел по правилу: проверить знак элемента на главной диагонали, если элемент отрицательный, то число равно 0, если элемент положительный число равно сумме всех элементов строки, в которой он находится. У меня оно всегда подсчитывает все эелементы матрицы, подскажите в чем проблема. Заранее спасибо.
#include <stdio.h>
#include <stdlib.h>
int main()
{
double**data=NULL;
int rows=0, cols=0;
double a=0;
int i,j,n=0;
printf("Enter size of matrix:");
scanf("%d",&n);
rows=n;
cols=n;
data=(double**)calloc(rows, sizeof(double*));
for (i=0;i<rows;i++)
data[i]=(double*)calloc(cols, sizeof(double));
if (NULL!=data)
{
for (i=0;i<rows;i++)
for (j=0;j<cols;j++)
{
printf("data[%d][%d]=",i,j);
scanf("%lf",&data[i][j]);
}
}
for(i=0;i<rows; i++)
{
printf("\n");
for(j=0;j<cols; j++)
printf ("%6.0lf", data[i][j]) ;
}
for(i = 0; i < rows; ++i)
{
if(data[i][i]>=0)
{
for(j = 0; j < cols; ++j) {
a+= data[i][j];
}
}
else if(data[i][i]<0)
{
a=0;
}
}
printf("\n\n");
for (i = 0; i < n; i++)
{
printf("%.0f ", a);
}
free(data);
return 0;
}Решение задачи: «Не правильный подсчет элементов матрицы»
textual
Листинг программы
a[n] = 0; // a[n] в в данном случае указывает на один и тот же элемент — a[2], например, если n = 2 // И если бы даже это работало — double a[n]; // , то элемент с индексом n выходит за границу данного массива, которая равна [0; n)