[c++] ciąg Fibonacciego


(Ada Safaryn) #1

Witam,

Polecenie mam takie :

Napisz program, który w zależności od wyboru użytkownika, wyznaczy wszystkie liczby ciągu Fibonacciego z podanego zakresu (d, g), gdzie d i g są liczbami naturalnymi.

 

I nie mam pojęcia jak uwzględnić warunek, żeby wypisywało liczby z zakresu.

Za każdą pomoc i wskazówkę z góry dziękuję ..

 

Problem jest w tym miejscu:

 

//cout<<"ciag= ";

//for (int m = d; m<g; m++)


(Protected_48) #2

Czy zerowy element na pewno ma wynosić 1? :slight_smile:


(Marcin Obala) #3

Po kolei:

  1. Ja ify wyrzuciłbym przed pętle. Zamienił i = 1 na i = 0 i wyrzucił couty z całej funkcji i dał returny.

    int fib(int n)
    {
    if(n == 0)
    return 0;
    else if(n == 1 || n == 2)
    return 1;
    else
    {
    int i = 0;
    int j = 1;
    for (int k=0;k<n;k++)
    {
    j += i;
    i = j-i; // taki mały myk zeby nie robić zmiennej tymczasowej
    }
    return j;
    }
    }

 

W mainie teraz tak jak Ty masz:

int main()
{
        int d;
        int g;
       
       
        cout<<"Podaj d= "; cin>>d;
        cout<<"Podaj g= "; cin>>g;
 
        cout<<"ciag= ";
        for (int m = d; m<=g; m++)
        {
           cout << fib(m) << " ";
        }
        cin.get()
        return 0;      
}

Z tym że zamiast samego fib(m) musisz dać cout << fib(m) bo funkcja teraz tylko zwraca i nic nie wyświetla oraz warunek zmieniłem na m<=g. 


(kostek135) #4

Jak na moje źle zrozumieliście polecenie.

 

 

Jeśli chcę wyświetlić liczby Fibonacciego z przedziału (2,15), to nie powinienem wyświetlać : {a3, a4, ..., a14}, tylko liczby 3 5 8 13, ponieważ to nie dziedzina, a zbiór wartości ma należeć do tego przedziału. Tak przynajmniej wynika z polecenia.


(Drobok) #5

Pomijając fakt o którym napisał kostek, twój kod np dla przedziału 2tyś -3tyś, twój kod wyliczy tysiąc ciągów fibonnaciego od ciągu z 2tyś,wyrazów do 3tyś zwiększając ich ilość kolejno o 1.:stuck_out_tongue:

Jeśli chcemy wepchnąć tam funkcję trzeba by było zwracać 2wartości, w funkcji pobierającej również 2 wartości, albo przechowywanie ostatnio zwróconej wartości. Co powoduje eliminację niepotrzebnych iteracji :))