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

Obliczanie czasu. C++

Object Storage Arubacloud
0 głosów
8,594 wizyt
pytanie zadane 14 grudnia 2015 w C i C++ przez GameFreak Początkujący (450 p.)

Witam 

Mam pytanie czy dobrze zrobiłem obliczanie czasu w sposobie obliczania rekurencyjnie i iteracyjnie. Otóż nie wiem jak mam to teraz sprawdzić ponieważ wyskakuje mi że operacje zajmują 0 sec. Proszę o pomoc albo o jakieś szybkie wyjaśnienie. Z góry dzięki.

 

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

using namespace std;

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

long unsigned int ISilnia(int a)
{
    int suma = 1;
    for(int i=a; i>=1; i--)
    {
        suma = suma * i;
    }
}

clock_t start, stop;
double czas;

int main()
{
    start = clock();
    cout << RSilnia(25)<<endl;
    stop = clock();
    czas = (double)(stop - start)/CLOCKS_PER_SEC;
    cout<<"Obliczanie rekurencyjnie zajmie: "<<czas<<endl;

    start = clock();
    cout << ISilnia(25)<<endl;
    stop = clock();
    czas = (double)(stop - start)/CLOCKS_PER_SEC;
    cout<<"Obliczanie iteracyjnie zajmie: "<<czas;

    return 0;
}

 

3 odpowiedzi

+2 głosów
odpowiedź 14 grudnia 2015 przez 0e85dc6eaf Dyskutant (8,840 p.)
Po prostu komputer wykonuje to tak szybko ;) Musisz zrobić jakąś pętle (np. 1000000 iteracji) i wtedy zobaczysz różnicę
+1 głos
odpowiedź 14 grudnia 2015 przez Sebastian Fojcik Nałogowiec (43,040 p.)

Sprawdź poniższy kod.
Zamiast Twoich wywołań funkcji silni wpisałem funkcje wstrzymujące działanie programu na pół sekundy. Jeżeli będzie Ci wypisywało czas 0.5, to znaczy, że dobrze napisałeś obliczanie czasu. W moim przypadku jest wszystko okej.

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

using namespace std;

clock_t start, stop;
double czas;

int main()
{
	start = clock();
	Sleep( 500 );
	stop = clock();
	czas = (double)(stop - start) / CLOCKS_PER_SEC;
	cout << "Obliczanie rekurencyjnie zajmie: " << czas << endl;

	start = clock();
	Sleep( 500 );
	stop = clock();
	czas = (double)(stop - start) / CLOCKS_PER_SEC;
	cout << "Obliczanie iteracyjnie zajmie: " << czas << endl;

	return 0;
}

Przypomnę, że w kodzie zamieniłem tylko wywołania funkcji silni na funkcję "czekające pół sekundy".

komentarz 14 grudnia 2015 przez GameFreak Początkujący (450 p.)
Czyli wszystko dobrze. Dzięki za pomoc !!!!

Pozdrawiam
+1 głos
odpowiedź 14 grudnia 2015 przez mike_ike Użytkownik (710 p.)
Można też użyci funkcji do dokładniejszego obliczania czasu

    LARGE_INTEGER frequency;        // ticks per second
    LARGE_INTEGER t1, t2;           // ticks
    double elapsedTime;
    // get ticks per second
    QueryPerformanceFrequency(&frequency);

    for (int i = 0; i < n; ++i)
    {
        cout << (i + 1) << "/" << n << endl;

        QueryPerformanceCounter(&t1);
        
        // sort1(NULL, 1);
        sort2(NULL, 2);
        
        QueryPerformanceCounter(&t2);

        // compute and print the elapsed time in millisec
        elapsedTime = (t2.QuadPart - t1.QuadPart) * 1000.0 / frequency.QuadPart;
        times.push_back(elapsedTime);
    }

    calcStats(times);
    calcStdDev(times);

Podobne pytania

0 głosów
1 odpowiedź 571 wizyt
pytanie zadane 24 grudnia 2019 w C i C++ przez KopfSzmercen Bywalec (2,870 p.)
0 głosów
1 odpowiedź 389 wizyt
pytanie zadane 30 września 2016 w C i C++ przez Maniutek Użytkownik (520 p.)
0 głosów
0 odpowiedzi 190 wizyt

92,584 zapytań

141,433 odpowiedzi

319,668 komentarzy

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

...