• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wskaźniki ciąg Fibonacciego

Object Storage Arubacloud
0 głosów
1,401 wizyt
pytanie zadane 6 czerwca 2016 w C i C++ przez niezalogowany

Witam, od niedawna uczę się z kursów Pana Mirosława i aktualnie jestem na wskaźnikach. Chciałem napisać ciąg Fibonacciego z użyciem wskaźników i mam problem z deklaracją 2 pierwszych liczb z ciągu.

#include <iostream>

using namespace std;

int ile;

int main ()
{
    cout << "Ile liczb w tablicy: "; cin >> ile;

    int * tablica;
    tablica = new int [ile];
    for (int i=2; i<ile; i++)
    {
        *tablica = i-2+i-1;
        cout << *tablica-2 << endl;
        tablica ++;
    }

    return 0;
}

Kod wygląda w taki sposób, zwraca prawidłowy wynik, z tymże pierwszą liczbą ciągu jest -1. Chciałbym abymnie naprowadził mnie ktoś na to co robię źle

4 odpowiedzi

+1 głos
odpowiedź 7 czerwca 2016 przez ignacjusz Bywalec (2,390 p.)
wybrane 7 czerwca 2016
 
Najlepsza

Musisz najpierw ustawić 2 początkowe komórki tablicy na 0 i 1. Zrobisz to tak:

*tablica = 0; //Ustawienie pierwszej komórki na 0
cout << *tablica << endl; //Wypisanie tej komórki
tablica ++; //Przejście na drugą komórkę

*tablica = 1; //To samo co wyżej tylko na drugiej komórce
cout << *tablica << endl;
tablica ++;

Pamiętaj, że *nazwa wskazuje na wartość wskaźnika, a nazwa lub &nazwa na adres. Gdy już to zrobisz pora się zająć pętlą:

for (int i=2; i<ile; i++)
{
    *tablica = *(tablica-2)+*(tablica-1); //Ustawienie każdej kolejnej komórki tablicy na sumę dwóch poprzednich
    cout << *tablica << endl;
    tablica ++;
}

Zamiast *tablica = i-2+i-1; musisz zapisać *tablica = *(tablica-2)+*(tablica-1); bo:

*(tablica-2) to wartość komórki wcześniej o 2 miejsca, oraz *(tablica-1) to wartość komórki wześniej o 1 miejsce. Po dodaniu otrzymujesz potrzebny wynik. Na wyjście trzeba wypisać *tablica, a nie *tablica-2 bo to co napisałeś to wartość zmniejszona o 2.

komentarz 7 czerwca 2016 przez niezalogowany
Zrozumiałem, wielkie dzięki ;)
+1 głos
odpowiedź 6 czerwca 2016 przez niezalogowany
edycja 7 czerwca 2016
Nie inkremntuj tablicy! Utwórz dodatkowy wskaźnik który będzie wskazywał na tablicę i na nim operuj. Operator dereferencji ma większy priorytet niż odejmowania. Brak delete
komentarz 7 czerwca 2016 przez niezalogowany
Dlaczego nie należy inkrementować tablicy?
komentarz 7 czerwca 2016 przez niezalogowany
W skrócie powoduje to wycieki pamięci. Jeśli chcesz wiedzieć więcej: http://forum.pasja-informatyki.pl/127590/cr-c-%2310-wskazniki-dynamiczne-alokowanie-pamieci Przeczytaj odpowiedź Sebastiana Fojcika.
0 głosów
odpowiedź 6 czerwca 2016 przez Avernis Nałogowiec (27,400 p.)
1 linijka pętli chyba jest źle. Wskazujesz na 1 element, a nie na całą tablicę
0 głosów
odpowiedź 6 czerwca 2016 przez Patrycjerz Mędrzec (192,320 p.)

Dla ciągu Fibonacciego pierwszy wyraz jest równy 0, a drugi 1 - są to wartości początkowe i nie trzeba ich liczyć.

Pierwszy wyraz jest równy 0, drugi jest równy 1, każdy następny jest sumą dwóch poprzednich.

Wikipedia

 

Podobne pytania

0 głosów
2 odpowiedzi 2,074 wizyt
pytanie zadane 30 października 2020 w C i C++ przez forvev Początkujący (390 p.)
0 głosów
3 odpowiedzi 890 wizyt
pytanie zadane 13 kwietnia 2017 w C i C++ przez robert1506 Początkujący (280 p.)
0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 20 maja 2023 w C i C++ przez Igaiga Nowicjusz (120 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...