Witam, jestem początkującym programistą i jak pewnie większość osób oglądający kurs pana MZ na YT potkneła się na 10. odc o wskaźnikach. Ja jako tako samą teorie wskaźników rozumiem i z logicznego punktu widzenia są przydatne (anegdota o rozkładzie jazdy autobusów, jaką pan MZ zastosował jest świetna) tylko gorzej z ich użyciem (głownie w programie w którym program pytał ile liczb fibonaciego ma wypisać i postanowiłem, że postaram się porównać czas działania tych programów na wskaźnikach i bez nich) związku z czym mam kilka pytań dotyczących mojego kodu w oparciu o te wskaźniki. Wszystko się kompiluje i działa, tylko właśnie ta różnica czasu jest dla mnie niezrozumiała, bo bez wskaźników działa szybciej i to mnie zbiło z nóg. Możliwe że kod jest zły, ale to już zostawię waszej ocenie poniżej. Liczę że wykażecie się wyrozumiałością i jak znajdziecie trochę czasu na podjęcie się rozwiązania mojego problemu to będę bardzo wdzięczny.
Po pierwsze mój kod
int odp; clock_t start,stop; double czas;
cout<< "ile liczb fib mam wypisac? "; cin>> odp; cout<<endl;
long double *wskaznik;
wskaznik= new long double [odp]; // nowy obszar w pamieci ogarniam
wskaznik[0]=1; // ale tu już gorzej(przyznam żę robiłem metodą prób i błędów)
wskaznik[1]=1;
long double *wsk=wskaznik;
for(int i=2; i<odp;i++)
{// wiem żę z * pracujemy na wartosci zmiennej
// ale własnie używając tej * wyskakuje błąd
wsk[i]=wsk[i-1]+wsk[i-2];
}
//cout<< setprecision(10000);
start=clock();
for(int i=0;i<odp;i++)
{//no i tutaj z anegdoty o rozkladzie jazdy odczyt powinien być szybszy
cout<< "liczba "<<i+1<<". "<<*wsk++<<endl;
}
stop=clock();
czas=(double)(stop-start)/ CLOCKS_PER_SEC;
cout<< "czas z uzyciem wskaznikow zad z liczbami fib "<< czas<< endl<<endl<<endl<<endl;
delete[] wskaznik;
cout<< "ile liczb fib mam wypisac? "; cin>> odp; cout<<endl;
long double lfib[odp];
lfib[0]=1;
lfib[1]=1;
for(int i=2; i<odp;i++)
{
lfib[i]=lfib[i-1]+lfib[i-2];
} //cout<< setprecision(10000);
start=clock();
for(int i=0;i<odp;i++)
{// kom za każdym razem musi znales odpowiednia szufladke
cout<< "liczba "<<i+1<<". "<<lfib[i]<<endl;
}
stop=clock();
czas=(double)(stop-start)/ CLOCKS_PER_SEC;
cout<< "czas bez wskaznika zad z liczbami fib "<< czas<< endl;
I pytanie czy jest dobry(bardzo liczę na korektę). Co do wyników to przy 4000 szufladek bez wskaźników 3.4 z wskaźnikami 4.3 ( oczywiście czas się zmienia za każdym razem, ale bez wskaźników zawsze jest krótszy)
Po drugie, czy bez tych wskaźników można się obejść. Nie ukrywam że są trochę irytujące i właśnie czy można je na chwile obecną zostawić i zacząć przerabiać kolejne filmy z kursu?
Na zakończenie przeglądając wpisy widziałem, że kiedyś ktoś poruszył podobny temat (ale nie w oparciu o ten program z wypisywaniem kolejnych liczb fibonaciego) i nie ukrywam że wprowadził spore zamieszanie w mojej głowie. I moje pytanie brzmi czy to wszystko prawda? link>>https://forum.pasja-informatyki.pl/210645/wskazniki-czy-kurs-pana-miroslawa-zelenta-zawiera-bledy-merytoryczne?show=210645#q210645
Wiem, że trochę odgrzewane kotlety, ale wy kiedyś też pewnie tacy byliście . Z góry dzięki