Не правильный подсчет элементов матрицы - 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)

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы