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....