Компилятор ругает на ввод массива в подпрограмме
#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;
}