Компилятор ругает на ввод массива в подпрограмме

#include <iostream>
using namespace std;
const int n = 3, m = 4;
void counting(int  count1, int  count2, double A[n], double B[m])
{
    setlocale(LC_ALL, "Russian");
    int i, j;
    cout << "Введите массив A = ";
    for (i = 0; i < n; i++)
    {
        cin >> A[i];
        cout << A[i];
    }
    cout << "Введите массив B = ";
    for (j = 0; j < m; j++)
    {
        cin >> B[j];
    }
    for (i = 0; i < n; i++)
    {
        if (A[i] != 0)
        {
            count1 += 1;
        }
        if (A[i] == 0)
        {
            break;
        }
    }
    
    for (j = 0; j < m; j++)
    {
        if (B[j] != 0)
        {
            count2 += 1;
        }
        if (B[j] == 0)
        {
            break;
        }
    }
    
}
int main()
{
    
    double *A[n], *B[m];
    int count1 = 0, count2 = 0;
    counting(count1, count2, A[3], B[4]);
    if (count1 > count2)
    {
        cout << A[n];
    }
    if (count2 > count1)
    {
        cout << B[m];
    }
    if (count1 == count2)
    {
        cout << "Количество элементов до первого нулевого равны";
    }
    return 0;

}

Ответы (1 шт):

Автор решения: VoS13

Не до конца понятно задание.

  • double *A[n], *B[m];. Динамический одномерный массив указывается double *A = new double[n], *B = new double[m];
  • void counting(int count1, int count2, double A[n], double B[m]). Если переменные будут изменяться то их нужно передавать по ссылке либо указателю & * - если тип функции void. Динамический массив нужно передавать через указатель и, если данные не планируют подвергаться изменению, лучше использовать const - void Counting(int& count1, int& count2, const double* A, const double* B)
  • Во многих источниках рекомендуют чтобы функция выполняла одну задачу.
  • Указатель должен быть очищен в конце выполнения программы. Оператор delete[] _имя_указателя_
  • void Counting я бы изменил на int Counting, чтобы функция возвращала значение, как я понимаю, кол-ва элементов, идущих до первого нулевого.

Так как не до конца известно задание, проверить логику полностью немогу... Код:

#include <iostream>

using std::cin;
using std::cout;
using std::endl;


const int n = 3, m = 4;

// Output array:
void PrintArray(const double* arr, const int N, const char sym)
{
    for (int i = 0; i < N; ++i)
    {
        cout << sym << "[" << i << "]:" << arr[i] << "\t";
    }
    cout << endl;
}

// Input array:
void InputArray(double* arr, const int N, const char sym)
{
    cout << "Заполните массив " << sym << ":" << endl;
    for (int i = 0; i < N; ++i)
    {
        cout << sym << "[" << i << "]:";
        cin >> arr[i];
    }
}

int Counting(const double* mass, const int N)
{   
    int count = 0;
    for (int i = 0; i < N; ++i)
    {
        if (mass[i] != 0)
        {
            ++count;
        }
        else
        {           
            return count;
        }
    }
    return count = 0;
}

int main()
{
    setlocale(LC_ALL, "");

    double *A = new double[n], *B = new double[m];

    char symA = 'A', symB = 'B';

    InputArray(A, n, symA);
    InputArray(B, m, symB); 

    auto x = Counting(A, n);
    auto y = Counting(B, m);

    cout << endl << endl;

    if (x || y)
    {
        if (x < y)
        {
            cout << "В массиве A нулевой элемент находится раньше чем в массиве B" << endl;
            PrintArray(A, n, symA);
            PrintArray(B, m, symB);
        }
        else if (x > y)
        {
            cout << "В массиве B нулевой элемент находится раньше чем в массиве A" << endl;
            PrintArray(B, m, symB);
            PrintArray(A, n, symA);
        }
        else if (x == y)
        {
            cout << "Количество элементов до первого нулевого равны" << endl;
        }
    }
    else
    {
        if (*A == 0 && *B == 0)
        {
            cout << "Нулевой элемент стоит первым в обоих массивах!" << endl;
        }
        else
        {
            cout << "В массивах нет нулевых элементов!!!" << endl;
        }
    }

    // Удаление указателей:
    delete[] A;
    delete[] B;

    system("pause");
    return 0;
}
→ Ссылка