Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 8

Clock_t не работает вычитание

19.12.2015, 22:51. Показов 3116. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется программа, написанная в C++ Builder XE8. Необходимо посчитать время выполнения алгоритма, но при вычитании получается ноль! Отдельно переменные выводятся нормально, вычитание, как ты его не крути, не работает.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::Button7Click(TObject *Sender)
{
randomize();
int k=0;
 for (int i=0; i<10; i++)
    {
    if(first==0)
        first=new _derevo(k);
    else
        k=random(50);
        first->add(k);
    }
    clock_t t_vst1=clock();
    first->find_vst(random(50));
    clock_t t_vst2=clock();
    ShowMessage((t_vst2-t_vst1)/CLOCKS_PER_SEC);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.12.2015, 22:51
Ответы с готовыми решениями:

Функция GetTickCounter вместо clock_t
Помогите понять как использовать эту функцию, перегуглил гугл, форум но так и не понял. можно ли как-то на простых примерах или в моем...

Когда используется тип clock_t?
Всем здрасьте. В одном из примеров нашёл вот это чудо clock_t. В просторах интернета нечего не нашёл , а когда и нашёл , всё равно не...

Не работает вычитание
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

15
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
19.12.2015, 22:53
Оно работает, но find_vst выполняется явно быстрее одной секунды.
0
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 8
19.12.2015, 23:00  [ТС]
zss, даже если не делить значение на CLOCKS_PER_SEC, а просто вычесть время друг из друга, так же выводится ноль. Хотя если вывести их по отдельности, получается 1265 и 890. Не вижу проблемы в выводе их разности.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.12.2015, 23:01
Приведи к double, чтобы дробь была.
0
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 8
19.12.2015, 23:05  [ТС]
Пишу так:
C++
1
2
3
4
5
clock_t t_vst1=clock();
first->find_vst(5);
clock_t t_vst2=clock();
double t=(t_vst2-t_vst1)/CLOCKS_PER_SEC;
ShowMessage(t);
Все равно ноль.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.12.2015, 23:07
C++
1
ShowMessage(static_cast<double>(t_vst2-t_vst1) / CLOCKS_PER_SEC);
0
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 8
19.12.2015, 23:13  [ТС]
nmcf, безрезультатно
Миниатюры
Clock_t не работает вычитание  
0
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 8
19.12.2015, 23:19  [ТС]
При этом сложение работает
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
19.12.2015, 23:23
Пробуй:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <ctime>
...
 
clock_t t1 = clock();
 
//... тут код, время работы которого нужно замерить
 
clock_t t2 = clock();
cout << (t2 - t1 + .0) / CLOCKS_PER_SEC << endl;
 
 
//Более точно (выдаёт 0 в Windlows, в Linux - 200 -400) на С++11 (очень короткие промежутки):
 
#include <iostream>
#include <chrono>
 
int main() 
{
    auto t1 = std::chrono::high_resolution_clock::now();
  
    int s = 0;
    for (int i = 0; i < 10; ++i)
        s += i;
  
    auto t2 = std::chrono::high_resolution_clock::now();
    long dt = ((std::chrono::nanoseconds)(t2 - t1)).count();
    std::cout << dt << std::endl;
  
    return 0;
}
 
//Ещё один вариант С++11 (на цикле из предыдущего кода всё равно 0 выдаёт (в Windows, в Linux не проверял, но //наверное выдаёт не 0), даже если микросекунды заменить на наносекунды):
 
#include <algorithm>
#include <chrono>
#include <functional>
#include <iostream>
#include <iterator>
#include <vector>
 
using std::chrono::duration_cast;
using std::chrono::microseconds;
using std::chrono::steady_clock;
 
int main()
{
    std::vector<int> vec(10000000);
    steady_clock::time_point start = steady_clock::now(); // start
    auto max = *std::max_element(vec.begin(),vec.end());
    vec.erase(
        std::remove_if(
            vec.begin(), vec.end(),
            std::bind2nd(
                std::equal_to<int>(), max)
            )
        ,
        vec.end()
    );
    steady_clock::time_point end = steady_clock::now(); // end
 
    std::cout << "First: "
              << duration_cast<microseconds>(end - start).count() << std::endl; //diff
 
    // *************************************************************************
    std::vector<int> vec2(10000000);
    start = steady_clock::now();
    vec2.erase(
        std::remove_if(
            vec2.begin(), vec2.end(),
            std::bind2nd(
                std::equal_to<int>(),*std::max_element(vec2.begin(),vec2.end())
            )
        ),
        vec2.end()
    );
    end = steady_clock::now();
 
    std::cout << "Second: " << duration_cast<microseconds>(end - start).count() << std::endl;
}
0
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 8
19.12.2015, 23:30  [ТС]
nord_v, E2209 Unable to open include file 'chrono'
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
19.12.2015, 23:31
С++11.
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 11
19.12.2015, 23:40
Цитата Сообщение от nord_v Посмотреть сообщение
С++11.
Программа написана в Borland'е, такой вариант не работоспособен.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.12.2015, 23:57
ShowMessage() умеет дробные числа выводить? Преобразуй сначала результат в строку. Там же есть функция форматирования. И после выводи.
0
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 11
20.12.2015, 00:07
да, может выводить.
0
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 8
20.12.2015, 00:08  [ТС]
nmcf, при сложении спокойно выводит дробные числа
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
20.12.2015, 08:39
Вставь туда явную задержку и проверь результат.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.12.2015, 08:39
Помогаю со студенческими работами здесь

Как работает вычитание SUB?
Добрый день! &quot;вычитает из первого операнда второй и результат помещает по адресу первого операнда&quot; sub AX, BX; вычесть...

Не работает вычитание в цикле
Вот программа должна (пока) отнимать от Х У, но делает только раз, хотя условие стоит &quot;while (zal&lt;y);&quot; в чем проблема? ...

Рекурсия. Сложение и вычитание через сложение/вычитание единицы
Помогите пожалуйста народ!! Задача: Сложение и вычитание через сложение/вычитание единицы :wall:ПоМОГИТЕ

Вычитание
Нужно из одного поля таблицы, вычесть другое, но проблема в том, что поля состоят из двух слов (Розничная цена, например) (изменить...

Вычитание
Нужно решить уравнение (w1-b1-b3)+d1/b2 По условию задачи в сегменте данных b1 db 10 b3 db 10 w1 dw 10 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru