Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2011, 15:55   #1
IvaneOK
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 10
По умолчанию таймер

Здравствуйте, подскажите пожалуйста в одном вопросе.Нужно проводить не сложную операцию, а потом в виде таблицы выводить результаты на экран.Сложность заключается в том, что нужно измерять время работы программы.Я вроде сделал, но при запуске все измерения времени равны нулю, подскажите пожалуйста, как исправить
Цитата:
#include<stdio.h>
#include<time.h>

int main()
{
int i,a[1000],z,oper;
oper=0;
clock_t time; //время начала работы
time = clock();
printf("\nВведите z");
scanf("%d",&z);
printf("\nЧисло элеметов массива Число операций Время работы\n");
for(i=1;i!=1001;i++) //начало главного цикла
{
a[i]=(rand() % 100) + 1; //рандом значения
oper+=1;
if (a[i]>z) //проверка условия задачи
{
a[i]=z;
oper+=1;
} //конец самой задачи
if (fmod(i,50)==0) //вывод на экран через 50 значений
{
time = clock() - time; //измеряем время в данный момент и вычитаем начало
printf(" %d",i);
printf(" %d",oper);
printf(" %f\n", (double)time/CLOCKS_PER_SEC);
}

} //главный цикл

} //конец

Последний раз редактировалось IvaneOK; 31.05.2011 в 17:44.
IvaneOK вне форума Ответить с цитированием
Старый 31.05.2011, 16:44   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Попробуй использовать функцию gettimeofday() из <sys/time.h>.
Она позволяет высчитывать время в микросекундах.

ЗЫ У меня под Линуксом, например, связка clock() -- CLOCKS_PER_SEC вообще некорректно работает...
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 31.05.2011, 16:47   #3
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

time(NULL) - возвращает время в секундах с 1970 года.
clock() - возвращает время работы программы в clocks'ах с момента ее запуска. Чтобы получить секунды, надо разделить на CLOCKS_PER_SEC. Соответственно:
Код:
int main()
{
   // Код до того, который мы хотим померить
   double work_time = clock();
   // Код который мы хотим измерить
   work_time = clock() - work_time; // В work_time время работы в clock'ах
   printf("Working time - %f milliseconds\n", work_time / CLOCKS_PER_SEC / 1000);
   // Другой код
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 31.05.2011, 17:44   #4
IvaneOK
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 10
По умолчанию

Syuf, не помогло, все равно 0 пишет
IvaneOK вне форума Ответить с цитированием
Старый 31.05.2011, 18:29   #5
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Покажите код
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 31.05.2011, 19:49   #6
IvaneOK
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 10
По умолчанию

#include<stdio.h>
#include<time.h>
int main()
{
int i,a[1000],z,oper;
oper=0;


double work_time = clock();
printf("\nВведите z");
scanf("%d",&z);
printf("\nЧисло элеметов массива Число операций Время работы\n");
for(i=1;i!=1001;i++) //начало главного цикла
{
a[i]=(rand() % 100) + 1; //рандом значения
oper+=1;
if (a[i]>z) //проверка условия задачи
{
a[i]=z;
oper+=1;
} //конец самой задачи

if (fmod(i,50)==0) //вывод на экран через 50 значений
{
work_time = clock() - work_time;
printf(" %d",i);
printf(" %d",oper);
printf("Working time - %f milliseconds\n", work_time / CLOCKS_PER_SEC / 1000);
}

} //главный цикл

} //конец
IvaneOK вне форума Ответить с цитированием
Старый 31.05.2011, 20:06   #7
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Код:
printf("Working time - %f milliseconds\n", work_time / CLOCKS_PER_SEC * 1000);
Сори, это я налажал.
Только он, возможно, быдет также 0 выводить, потому что делать эти 50 значений будет мгновенно.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 31.05.2011, 20:14   #8
IvaneOK
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 10
По умолчанию

Syuf, спасибо)
IvaneOK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
таймер ZET78 Общие вопросы C/C++ 2 24.05.2010 12:56
таймер в C# Munky Помощь студентам 2 15.04.2010 20:30
Таймер graff Общие вопросы C/C++ 11 04.07.2009 01:36
Таймер Михаил Юрьевич Общие вопросы Delphi 1 16.07.2008 08:46
Таймер в С# kommunist Общие вопросы .NET 3 02.06.2008 12:11