nitishy2j
nitishy2j

Reputation: 57

counting negative integers in a matrix

i am having error while running this code

negativenoinmatrix.c:10:16: error: subscripted value is neither array nor pointer nor vector
     if(z[i][j]<0)

i want to calculate the number of negative integers in a matrix

#include <stdio.h>
int negnumbers(int *z, int n, int m)
{
    int count = 0;
    int i = 0;
    int j = m - 1;
    while (j >= 0 && i < n)
    {
        if (z[i][j] < 0)
        {
            count += (j + 1);
            i += 1;
        }
        else
            j -= -1;
    }
    return count;
}

int main()
{
    int n = 3, m = 4;
    int a[n][m];
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 4; j++)
            scanf("%d", &a[i][j]);
    }
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 4; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    int val = negnumbers((int *) a, 3, 4);
    printf("%d", val);
}

Upvotes: 0

Views: 60

Answers (3)

awardak
awardak

Reputation: 322

When you pass a 2-d array to a function, at least the 2nd dimension must be specified. Change to this:

int negnumbers(int z[][4],int n,int m)

You can then use this more straightforward approach to counting the negative numbers:

for (int i = 0; i < n; i++) {
  for (int j = 0; j < m; j++) {
      if (z[i][j] < 0)
          count++;
  }
}

Upvotes: 1

Lundin
Lundin

Reputation: 214040

The function needs to accept a pointer to an array, not a pointer to a single item. Change it to

int negnumbers(int n, int m, int z[n][m])
...

int val = negnumbers(3, 4, a);

(Where int z[n][m], as per the rule of "array adjustment", will get changed by the compiler internally to a pointer to the first element, int (*z)[m].)

Upvotes: 3

Thinh Le
Thinh Le

Reputation: 1

You are calling a pointer z, and also creating a dynamic matrix out of it. So you need to allocate some memory for it which can be done with:
malloc(z[i][j])

Then after you're done, make sure you deallocate the memory now or else you'll have a memory leak, which you can read more about at Memory Leaks wikipedia.

This is done by calling free(...)

Hope this solves the not an array or pointer error!

Upvotes: -2

Related Questions