• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+5 głosów
12,771 wizyt
pytanie zadane 6 kwietnia 2016 w Nasze poradniki przez Mirosław Zelent Nałogowiec (34,780 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 Mentor (351,140 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 Mentor (351,140 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 2,008 wizyt
pytanie zadane 14 grudnia 2016 w C i C++ przez Warcin Mójcik Użytkownik (730 p.)
+1 głos
1 odpowiedź 3,678 wizyt
0 głosów
1 odpowiedź 369 wizyt
pytanie zadane 20 maja 2023 w C i C++ przez Igaiga Nowicjusz (120 p.)

93,187 zapytań

142,203 odpowiedzi

322,022 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2345p. - dia-Chann
  2. 2306p. - Łukasz Piwowar
  3. 2295p. - Łukasz Eckert
  4. 2282p. - CC PL
  5. 2252p. - Tomasz Bielak
  6. 2219p. - Łukasz Siedlecki
  7. 2215p. - rucin93
  8. 2201p. - Michal Drewniak
  9. 2156p. - Marcin Putra
  10. 2152p. - Adrian Wieprzkowicz
  11. 2105p. - Mikbac
  12. 1941p. - Anonim 3619784
  13. 1733p. - rafalszastok
  14. 1480p. - Michał Telesz
  15. 1469p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...