У вас есть ряд проблем.
В printArray
вы перезаписываете переданный массив с помощью одного целочисленного указателя _A = new int(_sz);
, при попытке печати всех элементов массива поведение будет неопределенным.
В fib
вы также используете new int(count);
, опять же, это выделяет один указатель, а не массив. Вы должны использовать new int[count];
вместо этого. Вы никогда не присваиваете значения элементам массива _A
, поэтому они не инициализированы, и их использование является неопределенным поведением.
Вы не передаете массив _A
обратно вызывающей функции. Вы можете исправить это, изменив объявление fib
на:
int fib(int _limit, int *&_A)
Хороший способ решения всех этих проблем - использовать std::vector
вместо массива, тогда вам не нужно предварительно - вычислите размер последовательности:
#include <iostream>
#include <vector>
using std::cout;
using std::cin;
using std::vector;
void printArray(const std::vector<int>& A)
{
cout << ">>> [ ";
for (int i : A)
{
cout << i << " ";
}
cout << " ]\n";
}
void fib(int _limit, std::vector<int>& A)
{
int fib0 = 1;
A.push_back(fib0);
int fib1 = 1;
int fib2 = 0;
while (fib2 < _limit)
{
A.push_back(fib1);
fib2 = fib0 + fib1;
fib0 = fib1;
fib1 = fib2;
}
}
int main()
{
int L;
std::vector<int> A;
cout << ">>> Press number: ";
cin >> L;
if (L >= 0)
{
fib(L, A);
cout << ">>> The Fibonacci series up to " << L << " is: \n";
printArray(A);
}
else
cout << ">>> Sorry, only positive integers accepted. Aborting...\n";
}
Если вы проходите какой-то извращенный курс информатики, который преподает вам c ++, но не позволяет использовать классы c ++, тогда тот же код с использованием массивов может выглядеть :
#include <iostream>
using std::cout;
using std::cin;
void printArray(int A[], int _sz)
{
cout << ">>> [ ";
for (int i = 0; i <= _sz; i++)
{
cout << A[i] << " ";
}
cout << " ]\n";
}
int fib(int _limit, int *A)
{
int count = 0;
int fib0 = 1;
if (A) A[0] = fib0;
int fib1 = 1;
int fib2 = 0;
while (fib2 < _limit)
{
count++;
if (A) A[count] = fib1;
fib2 = fib0 + fib1;
fib0 = fib1;
fib1 = fib2;
}
return count;
}
int main()
{
int L;
int *A = nullptr;
cout << ">>> Press number: ";
cin >> L;
if (L >= 0)
{
auto sz = fib(L, A);
A = new int[sz];
fib(L, A);
cout << ">>> The Fibonacci series up to " << L << " is: \n";
printArray(A, sz);
}
else
cout << ">>> Sorry, only positive integers accepted. Aborting...\n";
}