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

Praca domowa - odc.13 rekurencja, silnia i pętla for

0 głosów
979 wizyt
pytanie zadane 6 sierpnia 2017 w C i C++ przez Valmai Nowicjusz (150 p.)

Witajcie koledzy!

Szukałem ale nie znalazłem - temu zwracam się o pomoc do Was!

O ile część problemów sam rozwiązałem lub wygooglowałem o tyle z jednym problemem nie mogę sobie poradzić, mianowicie z czasem.

Coś widać robię źle, że nie mierzy mi dobrze czasu, pomożecie?

#include <iostream>
#include <time.h>
#include <cstdlib>

using namespace std;

clock_t start1, stop1;
clock_t start2, stop2;
double czas1;
double czas2;
int ile;


long double silnia1(int n)
{
    if (n==0) return 1;
    else return n*silnia1(n-1);
}


int main()
{
    long double silnia2=1;

    cout << "Z ilu wyliczyc silnie: ";
    cin >> ile;

    if (ile<0) cout<<"Nie ma silni z liczb ujemnych!!"<<endl;
    else
    {
        start1 = clock();
        cout << "Rekurencja: " << silnia1(ile) << endl;
        stop1 = clock();
        czas1 = (double)(stop1-start1) / CLOCKS_PER_SEC;
        cout <<"Czas obliczen (Rekurencja): " << czas1 << " sekund" << endl;

        start2 = clock();
        for(int i=1; i<=ile; i++)
        {
            silnia2*=i;
        }
        stop2 = clock();
        czas2 = (double)(stop2-start2) / CLOCKS_PER_SEC;
        cout << "Iteracja: " << silnia2 << endl;
        cout <<"Czas obliczen (Iteracja): " << czas2 << " sekund" << endl;
    };

    return 0;
}


 

1
komentarz 6 sierpnia 2017 przez unknown Nałogowiec (39,560 p.)
Co to znaczy, że nie mierzy Ci dobrze czasu?
1
komentarz 6 sierpnia 2017 przez unknown Nałogowiec (39,560 p.)
Inna sprawa, że użycie clock do mierzenia czasu jest słabym pomysłem: http://en.cppreference.com/w/cpp/chrono/c/clock
komentarz 6 sierpnia 2017 przez Valmai Nowicjusz (150 p.)
Tak - prawie cały czas mi 0 sekund pokazuje
komentarz 6 sierpnia 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)

Po prostu dzieje się to tak błyskawicznie, że nie zajmuje prawie w ogóle czasu. Dodaj do tego jeszcze słabą dokładność clock() i masz odpowiedź.

2 odpowiedzi

0 głosów
odpowiedź 6 sierpnia 2017 przez niezalogowany
edycja 6 sierpnia 2017

Dla wartości 30 będziesz mieć zauważalną (tak mi się wydaje) różnicę przy użyciu clock'a. Jednak to co robisz jest złe i błędne. Nie ma sensu liczenia silni na liczbach zmiennoprzecinkowych - tracisz na nich dokładność więc wyniki są błędne. Dodaj sobie na początku maina:

cout << fixed;

Porównaj sobie z poprawnymi wartościami dla zakresów 20-30: link
Do tego czas rekurencji mierzysz razem z wypisywaniem wartości, a iteracje bez tego. Jak to mówi mój kolego - bez sęsu. Zawyżasz czasy rekurencji. Powinieneś mierzyć czas tylko wykonania samego algorytmu, bo wypisywanie w konsoli jest wolne. Jeżeli rozwiązanie z clock podaje wartość 0 to wykonaj daną funkcję kilka razy, lub zrób to tak jak się robi w dzisiejszych czasach (z użyciem chrono) żeby uzyskać większą dokładność.

0 głosów
odpowiedź 6 sierpnia 2017 przez mokrowski Mędrzec (158,580 p.)
template<typename Func, typename... TT>
void check_time(const string& message, Func func, TT&& ...tt) {
    using namespace chrono;
    cout << message << endl;
    auto start_time = high_resolution_clock::now();

    func(std::forward<TT>(tt)...);

    auto end_time = high_resolution_clock::now();
    cout << "Wykonanie zajęło: " 
        << duration_cast<microseconds>(end_time - start_time).count()
        << " us.\n";
}

Można tak. A jak będzie za mała rozdzielczość, argument powtórzeń dodasz sam.

Podobne pytania

0 głosów
1 odpowiedź 453 wizyt
0 głosów
1 odpowiedź 1,056 wizyt
pytanie zadane 11 listopada 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)
0 głosów
1 odpowiedź 403 wizyt
pytanie zadane 20 lutego 2018 w HTML i CSS przez Sebastian94 Nowicjusz (140 p.)

93,424 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...