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

SzybkośćDziałaniaAlgorytmu

Object Storage Arubacloud
0 głosów
164 wizyt
pytanie zadane 21 października 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)

Cześć, generalnie program ma pokazać szybkość zliczania silni za pomocą pętli i rekurencyjnie(w programie aktualnie mam tylko za pomocą pętli). Obliczanie silni działa, ale program nie chce zliczać czasu wykonywania operacji, pomimo że wg mnie instrukcje do obliczania czasu są ok(program pokazuje, że obliczanie zajmuje mu 0). Czy ktoś mógłby powiedzieć co robię źle?

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

using namespace std;

int main()
{
    long int liczba, wynik[1000];
    double czas;
    cout << "Podaj silnie: ";
    cin >> liczba;

    clock_t start, stop;
    start = clock();
    for( int i = liczba; i > 0; i--)
    {
        if( i == liczba)
        {
            wynik[i] = liczba;
        }
        else
        {
        wynik[i] = wynik[i+1]*i;
        }
    }
    stop = clock();
    czas = (double)(stop - start) / CLOCKS_PER_SEC;


    cout <<"Wynik = " << wynik[1] << "  " << "Czas: "<< czas <<  endl;
    return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 21 października 2018 przez mokrowski Mędrzec (155,460 p.)

W ten sposób nie uzyskasz zadowalającej dokładności pomiaru. Użyj wywołań z nagłówka <chrono>. Nie wnikam w poprawność i logikę kodu. Pokazuję jedynie jak zmierzyć czas.

#include <iostream>
#include <chrono>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    long int liczba, wynik[1000];
    cout << "Podaj silnie: ";
    cin >> liczba;
    
    auto start = std::chrono::high_resolution_clock::now();
    for( int i = liczba; i > 0; i--)
    {
        if( i == liczba)
        {
            wynik[i] = liczba;
        }
        else
        {
        wynik[i] = wynik[i+1]*i;
        }
    }
    auto end = std::chrono::high_resolution_clock::now();
    auto exTime = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count();
 

    cout <<"Wynik = " << wynik[1] << "  "
        << "Czas: "<< exTime << " ns\n";
    return 0;
}

 

komentarz 21 października 2018 przez Shimeo7 Obywatel (1,910 p.)
domyślam się, że można ten kod znacznie lepiej napisać, ale cóż, no janusz, zaczynam swoją przygodę z programowaniem ;). Dziękuję za podpowiedź
0 głosów
odpowiedź 21 października 2018 przez PanRik Gaduła (4,510 p.)
edycja 21 października 2018 przez PanRik

Spróbuj użyć funkcji: difftime.

Zauważ też, że clock() nie działa dokładnie, ten timer potrzebuje 1 sekundę , aby zacząć liczyć czas i 1 sekundę , aby skończyć liczyć czas. Dlatego musisz wziąć , że Twoje czasy są: +/- 2sec
 

Podobne pytania

–1 głos
1 odpowiedź 1,554 wizyt
0 głosów
0 odpowiedzi 135 wizyt
0 głosów
0 odpowiedzi 467 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

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

...