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

Użycie funkcji times()

Object Storage Arubacloud
0 głosów
91 wizyt
pytanie zadane 15 listopada 2018 w C i C++ przez michulo Obywatel (1,240 p.)

Cześć 

Mam zadanie napisać funkcje,  która podaje czas wykonania innej funkcji.

Miałem podane funkcje "czasu", które mogę wykorzystać i nienajlepsza była time(), powstał kod:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<sys/times.h>
#include <unistd.h>

//
/*
Napisz funkcję, która oblicza czas wykonywania pewnej funkcji obliczeniowej. Funkcja obliczeniowa może być na
przykład reprezentowana za pomocą funkcji sleep(n), gdzie n jest liczbą sekund generowaną losowo. Jakiej funkcji
czasu użyjesz?
*/
typedef void (*funkcja)();

float czasWykonania(funkcja f)  //sprawdzamy czas wykonania funkcji
{
    clock_t tP,tK;
    struct tms t_start, t_end;
    long tps = sysconf(_SC_CLK_TCK);
    tP=times(&t_start);
    f();
    tK=times(&t_end);
    if ((tP != -1) & (tK!=-1))
    {
        return (float)((tK-tP)/tps);
    }
    else
    {
        return -1;
    }
}

void spij() //definicja funkcji do sprawdzenia
{
    time_t tt;
    int seed,n;
    seed=time(&tt); //nie chce mi tworzyc dodatkowej zmiennej
    srand(seed);
    n=rand()%10;
    sleep(n);
}

int main()
{
    float czas ;
    void (*pspij)();
    pspij = spij;

    czas = czasWykonania(pspij);
    printf("Czas wykonaia wynosi %.2d sekund\n",czas);

    return 0;
}

I to dział bez problemu, jednak funkcja time ma swoje ograniczenia,przede wszystkim to, że zwraca inta, wiec postanowiłem użyć times() więc powstał kod:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<sys/times.h>
#include <unistd.h>

//
/*
Napisz funkcję, która oblicza czas wykonywania pewnej funkcji obliczeniowej. Funkcja obliczeniowa może być na
przykład reprezentowana za pomocą funkcji sleep(n), gdzie n jest liczbą sekund generowaną losowo. Jakiej funkcji
czasu użyjesz?
*/
typedef void (*funkcja)();

float czasWykonania(funkcja f)  //sprawdzamy czas wykonania funkcji
{
    clock_t tP,tK;
    long tps = sysconf(_SC_CLK_TCK);
    tP=times(NULL);
    f();
    tK=times(NULL);
    if ((tP != -1) & (tK!=-1))
    {
        return (float)((tK-tP)/tps);
    }
    else
    {
        return -1;
    }
}

void spij() //definicja funkcji do sprawdzenia
{
    time_t tt;
    int seed,n;
    seed=time(&tt); //nie chce mi tworzyc dodatkowej zmiennej
    srand(seed);
    n=rand()%10;
    sleep(n);
}

int main()
{
    float czas ;
    void (*pspij)();
    pspij = spij;

    czas = czasWykonania(pspij);
    printf("Czas wykonaia wynosi %.2d sekund\n",czas);

    return 0;
}

który zwraca całkowicie losowe wartości.

Niestety nie wiem gdzie jest błąd....

 

1 odpowiedź

0 głosów
odpowiedź 15 listopada 2018 przez adrian17 Ekspert (344,860 p.)
wybrane 15 listopada 2018 przez michulo
 
Najlepsza

Nie dostajesz aby takiego warninga?

test.c: In function ‘main’:
test.c:50:37: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat=]
     printf("Czas wykonaia wynosi %.2d sekund\n",czas);
                                  ~~~^
                                  %.2f

 

komentarz 15 listopada 2018 przez michulo Obywatel (1,240 p.)
O kurde dzieki ! Nie dostawałem, używałem kompilacji z code::blocks'a faktycznie jak dodam przełącznik -Wall to jest warning.

Dzięki, taka duperela a można stracić sporo czasu.

Michał

Podobne pytania

0 głosów
1 odpowiedź 161 wizyt
pytanie zadane 8 kwietnia 2021 w HTML i CSS przez Nearr Obywatel (1,890 p.)
0 głosów
0 odpowiedzi 173 wizyt
pytanie zadane 29 grudnia 2016 w Nasze projekty przez Michał Muzyka Pasjonat (24,080 p.)
0 głosów
1 odpowiedź 449 wizyt
pytanie zadane 25 grudnia 2017 w C i C++ przez qsoll Początkujący (440 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 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!

...