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

[CR] C++ (#5): Tablice, ciąg Fibonacciego

Object Storage Arubacloud
+5 głosów
12,316 wizyt
pytanie zadane 6 kwietnia 2016 w Nasze poradniki przez Mirosław Zelent Nałogowiec (34,750 p.)

CR = Code Review. O co chodzi? Zajrzyj tutaj
Pełna lista wszystkich Code Review? Zajrzyj tutaj

https://www.youtube.com/watch?v=Rt1HnMdzINo

Kod z odcinka - liczby Fibonacciego:

#include <iostream>
#include <iomanip>
using namespace std;

long double fib[100000]; int n;

int main()
{
    cout << "Ile liczb Fibonacciego mam wyznaczyc: ";
    cin>>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<<endl<<"wyraz nr"<<i+1<<": "<<fib[i];
    //}

cout<<endl<<"wyraz nr "<<n<<":"<<fib[n-1];

//cout<<"zlota liczba: "<<fib[n-1]/fib[n-2];

    return 0;
}

Kod z odcinka - średnia:

#include <iostream>

using namespace std;

float oceny[5]; float suma=0, srednia;

int main()
{
    for(int i=0; i<5; i++)
    {
        cout<<endl<<"Podaj "<<i+1<<" ocene: ";
        cin>>oceny[i];
        suma += oceny[i];
    }

    srednia = suma / 5;
    cout<<endl<<"srednia = "<<srednia;

    return 0;
}

Paczka z odcinka: POBIERZ​

3 odpowiedzi

0 głosów
odpowiedź 10 kwietnia 2016 przez Shiro Stary wyjadacz (10,300 p.)
edycja 10 kwietnia 2016 przez Shiro

Dla mnie widoczne jest tutaj marnotrawstwo pamięci. Chyba lepiej by było napisać:

long double fib[n];

Lub też: 

int *fib;
fib = new int [n];

Pozdrawiam Shiro (Sebastian Hryszko) ;)

1
komentarz 10 kwietnia 2016 przez efiku Szeryf (75,160 p.)
IMHO nie powinniśmy się przejmować optymalizacja na początku..
1
komentarz 10 kwietnia 2016 przez adrian17 Ekspert (344,860 p.)
long double fob[n];

To nie jest dozwolone w C++ie.

komentarz 10 kwietnia 2016 przez Shiro Stary wyjadacz (10,300 p.)

Niby nie, jednak pod względem optymalizacji jak dla mnie jest to lepsza opcja. Chodź masz rację 1sza wersja nie jest do końca prawna pod względem zgodniości (zadziała) o wiele lepsza jest druga chodź trudno wymagać jej w 5 odcinku ;)

Pozdrawiam Shiro (Sebastian Hryszko) ;)

1
komentarz 10 kwietnia 2016 przez adrian17 Ekspert (344,860 p.)
To inaczej: "nie jest dozwolone" znaczy, że GCC daje Ci to jako bonus, ale nie możesz liczyć że to zadziała na każdym kompilatorze - przede wszystkim MSVC.
0 głosów
odpowiedź 5 stycznia 2017 przez orynio Nowicjusz (140 p.)
Szanowni koledzy,

 

Prośba o wytłumaczenie tej linijki kodu :

fib[i] = fib[i-1] + fib[i-2]
komentarz 5 stycznia 2017 przez criss Mędrzec (172,590 p.)
czego nie rozumiesz?
komentarz 5 stycznia 2017 przez orynio Nowicjusz (140 p.)
no własnie skąd te -1  i  -2  z czego wynikają te liczby ujemne
1
komentarz 5 stycznia 2017 przez criss Mędrzec (172,590 p.)
fib[i-1] to poprzednia względem i-tej komórka tablicy fib. Podobnie fib[i-2]. Jeśli wiesz czym jest ciąg fibonacciego, to powinno być dla ciebie jasne skąd się wzięły (wygoogluj jeśli nie wiesz).
komentarz 5 stycznia 2017 przez orynio Nowicjusz (140 p.)
dzieki ogarnąłem.Pzdr
0 głosów
odpowiedź 15 lipca 2019 przez Gowi Użytkownik (830 p.)

Czy takie rozwiązanie ma jakieś błędy myślowe czy może jest zapisane po prostu innym sposobem ?

#include <iostream>

using namespace std;

int fib[100000];
int n;

int main()
{
    cout << "Ile liczb Fibbonacciego chcemy wyznaczyc: ";
    cin >> n;

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

    for(int i=0; i<n; i++)
    {
        if(i>1)
        {
            fib[i] = fib[i-1] + fib[i-2];
        }
        cout << i+1 << ". " << fib[i] << endl;
    }


    return 0;
}

U Pana Mirosława są zastosowane dwie pętle for, jedna dla obliczeń, druga zaś dla wyświetlania wyników. Czy mój sposób umieszczenia wyniku i obliczeń w jednej pętli, ale z wykorzystaniem funkcji warunkowej if jest równie optymalny ? Czy może czegoś nie zrozumiałem ?

1
komentarz 15 lipca 2019 przez DragonCoder Nałogowiec (36,500 p.)
Wyswietlic mozesz, a co wydajmosci... Nawet nie odczujesz jej w takim programie, bo jezeli jest to moze 0,.... sekund.

Bardziej bym sie skupil na rzeczach, typu wywalenie: zmiennych globalnych, using namespace.

Poczytaj o vektorach w c++, bo ta tablica jest troche bezsensu i nie jest optymalna
komentarz 16 lipca 2019 przez Gowi Użytkownik (830 p.)
Słyszałem już właśnie opinie o tym using namespace, choć nie mam pojęcia dlaczego nie warto tego używać, chętnie się dowiem :) , dla mnie jako początkującego jest to po prostu troche wygodniejsze.  

To samo chyba ze zmiennymi globalnymi, bo się w sumie przyzwyczaiłem, ale domyślam się, że jest to po prostu mniej wydajne, bo zamiast potrzebować zmiennej dla małej, krótkiej funkcji to ja ją tworzę dla całego programu.

Domyślam się, że należy uczyć się dobrych nawyków.

A co do kodu, to czy mój sposób jest rzeczywiście gorszy zważając na aspekt pętli? Chciałbym po prostu się dowiedzieć czy taka pętla jest mniej absorbująca zasoby komputera niż na przykład funkcja warunkowa if, a może większy problem jest w zagnieżdzaniu pętli w pętli, albo funkcji w pętli i to jest przyczyną problemów z zarządzaniem zasobami.

Pozdrawiam
komentarz 16 lipca 2019 przez DragonCoder Nałogowiec (36,500 p.)
Nie ma z tym problemu, zsrowno w funkcja, jak i petla w petli. Jak nie ma innego rozwiazania, to wtedy nie martwia Cie zasoby komputera, tylko czy to dziala jak powinno. Wiec jak juz wspomnialem, szybkosc dzialania takiego lodu jest raczej taka sama. Mozesz uzyc Twojego kodu i Pana Miroslawa m, wstawic zamiast zmiennych liczby i zobaczyc w konsoli returned time w obu przypadkach.

Zmienne globalne:

https://stackoverflow.com/questions/484635/are-global-variables-bad

Using namespace

https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice
komentarz 18 lipca 2019 przez Gowi Użytkownik (830 p.)
Dzięki za wytłumaczenie i przede wszystkim za pomoc w znalezieniu merytorycznych wywodów na zadane pytania.

Podobne pytania

0 głosów
3 odpowiedzi 1,703 wizyt
pytanie zadane 14 grudnia 2016 w C i C++ przez Warcin Mójcik Użytkownik (730 p.)
+1 głos
1 odpowiedź 3,472 wizyt
0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 20 maja 2023 w C i C++ przez Igaiga Nowicjusz (120 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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!

...