Witam serdecznie, próbuje rozwiązać zadanie, którego treść brzmi: " Wygeneruj n kolejnych liczb Fibonacciego. Zapisz je do tablicy o pojemności 10, zawierającej
w poszczególnych pozycjach wskaźniki do wektorów tych (wygenerowanych) liczb Fibonacciego, które kończą się cyfrą odpowiadającą indeksowi w tablicy wskaźników. Użyj odpowiednich funkcji niestandardowych.".
Funkcje generacji liczb ciągu Fibonacciego napisałem, lecz nie potrafię przypisać w/w liczb do tablicy, zgodnie z poleceniem. Będę wdzięczny za porady / fragmenty kodu.
Jeśli twoja funkcja wygląda np. tak:
int[] fibonacci(int n)
to tworzysz:
EDIT:
F = fibonacci(n);
fib = //nowa tablica o pojemności 10, zawierająca wskaźniki do 10 wektorów.
for(int i = 0; i < n; ++i) {
// Liczba F[i] kończy się na jakąś cyfrę c, więc dodajesz ją do wektora fib na miejsce c.
}
Tak bym to zrobił... chyba. Pewnie jakoś lepiej da się to napisać. Mankament tego rozwiązania: mogą zostać puste wektory.
Dzięki za odpowiedź, chociaż nie za bardzo rozumiem kod, np : "F = fibonacci(n)". Poza tym, moja funkcja licząca ciąg Fibonacciego, jest typu void :)
Skoro jest void
, to jak chcesz przekazać światu (czytaj: programowi), jakie liczby/liczbę obliczyłeś? :) Hm. Może być też przez referencję/wskaźnik, może tak masz?
F = fibonacci(n)
oznacza, że przypisujesz do wektora F
wynik wykonania funkcji fibonacci
z argumentem n
.
Moja funkcja wygląda dokładnie tak:
void fibonacci(int n)
{
long long a = 0, b = 1;
for (int i = 0; i<n; i++)
{
cout << b << " ";
b += a;
a = b - a;
cout << endl;
}
}
I wszystko ładnie zostaje przekazane ^^
Aa... już rozumiem... ach, to programowanie strukturalne, rzuca mi się na mózg. :D
Tak na poważnie, myślę, że powinieneś napisać przed long long ...
deklarację wektora, a potem dodawać do tego wektora, zamiast wypisywać na wyjście cout
. Na końcu zwrócić wektor. Wiesz, jak się wektory deklaruje/definiuje?
EDIT: std::vector
znasz?
No widzisz, tak średnio bym powiedział :c Oznaczyłem wektor, napisałem kawałek kodu, który zapisuje do tablicy i później wypisuje na ekranie, ale nie to co trzeba :( Nie za bardzo wiem, jak zapisać tę ostatnią cyfrę z danej liczby.
Znaczy, jak jakiś kod napisałeś nowy, to go od razu wklej tutaj.
Ostatnią cyfrę możesz uzyskać poprzez operację liczba mod 10, tj. operator liczba % 10
w C++
. Mam nadzieję, że operator %
jest zdefiniowany dla typu long long
, jeśli będą jakieś błędy, to pisz.
Zresztą, tak na marginesie, operacja modulo przydaje się do bardzo wielu rzeczy, w szczególności z matematyki dyskretnej (dotyczącej przeliczalnych zbiorów). :)
... hmn... ciekawe, ale jeśli chcesz zapisywać te dane to twoja funkcja MUSI zwracać w jakiś sposób te liczby, jak już dojdziesz to tego jak chcesz je zwracać to robisz tak jak napisał @Michał Bodziony
Zmieniłem funkcję ciągu na :
int fibonacci(int n)
{
if (n == 0) return 0;
if (n == 1) return 1;
return fibonacci(n-2) + fibonacci(n-1);
}
oraz dodałem drugą funkcję :
int ostatnia(int n)
{
return n % 10;
}
Teraz się tylko zastanawiam, jak zapisać te wyniki pierwszej funkcji, żeby użyć drugą i na koniec wypisać je w tabeli.
Moja rada: nie używaj tutaj tej funkcji z rekurencją, ponieważ przy wyznaczaniu np. 10 liczb fibonacciego, będziesz musiał najpierw obliczyć dla 3. liczby, potem dla 4., potem dla 5... a za każdym razem idziesz od tej liczby do 0 lub 1.
Pomyśl, jak napisać funkcję Fibonacciego, która będzie używać for
- jak już raz wyżej napisałeś, tylko że tamta działa źle (wyświetla 1 i same 0). Podpowiem: potrzebna jest trzecia zmienna (np. c
).