Liczby Fibonacciego - pętla

0

Witam. Dlaczego jak ustawię wielkość tablicy

long double fib[100000];

i warunek w pętli }while(n!=100000);

 to program będzie wykonywał pętle po wpisaniu 100000? A jak <code class="cpp">long double fib[1000];

}while(n!=1000);

to się psuje i przestaje działać po wpisaniu 1000? 

```cpp
#include <iostream>
#include <iomanip>

using namespace std;

long double fib[100000]; int n;

int main()
{
    do
    {
        cout << "Ile liczb Fibonacciego mam wyznaczyc: ";
        cin >> n;
        cout << "\n";

        fib[0]=1;
        fib[1]=1;

        for (int i=2; i<=n; i++)
        {
            fib[i] = fib[i-1] + fib[i-2];
        }

        cout << setprecision(10000);

        for (int i=0; i<n; i++)
        {
            cout << "Wyraz nr " << i+1 << ": " << fib[i] << "\n";
        }

        cout << "\n";

        //cout << "Wyraz nr " << n << ": " << fib[n] << "\n\n";

        //cout << "Zlota liczba: " << fib[n-1]/fib[n-2];
    }while(n!=100000);

    return 0;
}
0
  1. Warunek sprawdzający wartość zmiennej n powinien znaleźć się zaraz po jej wczytaniu, a nie na końcu pętli.
  2. Tak duża tablica może nie zmieścić się na stosie - użyj dynamicznej alokacji pamięci lub kontenera, np. std::vector.
0

Masz tablicę na 100000 liczb, żeby pętla się skończyła to n == 100000, ale wtedy

for (int i=2; i<=n; i++)
{
    fib[i] = fib[i-1] + fib[i-2];
}

daje undefined behaviour, bo fib[n] już nie należy do Ciebie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1