C - найти простые числа в случайно сгенерированном 2d массиве - PullRequest
0 голосов
/ 28 ноября 2018

В C у меня есть случайно сгенерированный массив 20x20.Я могу сортировать и отображать это нормально, но мне нужно взять простые числа из каждой строки и поместить их в свой собственный массив.Это должно быть сделано с функцией вне main.

Проблема в том, что независимо от того, что я пытаюсь, я не могу найти правильный синтаксис для выполнения арифметики в массиве, чтобы найти простые числа, я всегда получаю "недопустимые операнды в двоичный% (есть 'int *'и 'int') "ошибка.Я не уверен, есть ли способ разыменования массива для выполнения арифметики над ним.Вот некоторый код:

#include <stdio.h>
#include <stdlib.h>

#define TOTAL_ROWS 20
#define TOTAL_COLUMNS 20

void fillMatrix(int A[TOTAL_ROWS][TOTAL_COLUMNS], int *set_rows, int *set_columns)
{
    int rows = 20, columns = 20;
    for(int i = 0; i < rows; i++)
        for(int j = 0; j < columns; j++)
            A[i][j] = rand() % 500;

    *set_rows = rows;
    *set_columns = columns;
}




void sortMatrix(int A[TOTAL_ROWS][TOTAL_COLUMNS], int rowsize, int colsize)
{
    for(int r = 0; r < rowsize; r++)
        qsort(A[r], colsize, sizeof(int), compare);
    }



void displayArray(int A[TOTAL_ROWS][TOTAL_COLUMNS], int rows, int columns)
{
    for(int i = 0; i < rows; i++)
    {
        for(int j = 0; j < columns; j++)
            printf("%3i ", A[i][j]);
        printf("\n");
    }
}

void findPrimes(int A[TOTAL_ROWS][TOTAL_COLUMNS], int rows, int columns)  
{
int n,c,sum,count;
    for(int i = 0; i < rows; i++)
        {
            for(int j = 0; j < columns; j++){
                for(i=0;i<n;i++)
                    {
                        c=0;
                        for(j=2;j<A[i];j++)
                        {
                            if(A[i]%j==0) //where "invalid operands to binary % (have 'int *' and 'int')" happens 
                            {
                                   c=1;
                                   break;
                            }
                        }
                         if(c==0)
                         {
                            printf("%d\t",A[i]);
                            sum=sum+A[i];
                            count++;
                         }
                    }
            }
        }
}



int main(void)
{
    int A[TOTAL_ROWS][TOTAL_COLUMNS];
    int rows, columns;
    fillMatrix(A, &rows, &columns);
    sortMatrix(A, rows, columns);
    displayArray(A, rows, columns);
    findPrimes(A, rows, columns);
    return  0;
}

1 Ответ

0 голосов
/ 28 ноября 2018

Проблема в том, что A[i] - это одна целая строка двумерного массива и, следовательно, сама по себе является стандартным (1D) массивом (который при большинстве способов уменьшается до int*, отсюда и сообщение).

Вы хотите использовать A[i][j] для получения значения int конкретной ячейки.

Но хотя это позволяет вашему коду компилироваться, оно все равно не будет работать должным образом.Вот список дальнейших проблем, которые нужно исправить:

  • Вложенные циклы, повторяющиеся на i.Это явно ошибка, которая приведет к неожиданным результатам.
  • Использование неинициализированных автоматических переменных n, sum и count.Последние два должны быть инициализированы до 0;вам нужно сделать это явно.Я не уверен, что n пытается сделать.
  • Стиль кода.Хотя это не приведет к прямому сбою кода, беспорядочный отступ и отсутствие инкапсуляции значительно упрощают ошибки.
...