Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Andrew_ku
0 / 0 / 0
Регистрация: 02.04.2011
Сообщений: 31
#1

Уменьшение времени выполнения цикла - C++

03.06.2011, 18:53. Просмотров 1711. Ответов 15
Метки нет (Все метки)

Нужна помощь, мне надо засечь время выполнения цикла, который инициализирует элементы массива.
А потом надо как-то развернуть цикл и засечь уже время выполнения развернутого цикла. И у меня два вопроса:
1) Как засечь время такого маленького цикла(пробовал и clock() и GetTickCount() не улавливают) ?
2) Как вообще развернуть этот цикл?

Помогите пожалуйста! Очень надо.

Напишу код всей проги а не только цикла
Вот код:
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
int sum;
 char ch,p;
int main ()
{  
  srand(time(0)); 
 
  
  int const L=80;
 
 int Array[L];
   
  
    for(int i=0;i<L;i++)
    
 
        Array[i]=rand()%20;
 
 
 
    cout<<endl<<"Massiv soderzhit:"<<endl;
    for (int i=0; i<L; i++)
    {
      cout<<"["<<i+1<<"]"<<Array[i]<<"  ";
    }
 
    for(int i=0;i<L;i++)
      {
        int sum=0;
        while (Array[i]!=0)
     {
        sum += Array[i]%10;
        Array[i] /= 10;
     }
 
      cout<<"\nSumma cifr elementa[ "<<i+1<<"]"<<sum;
 
    }    
      
        
  
   getch(); 
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2011, 18:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Уменьшение времени выполнения цикла (C++):

Уменьшение времени работы программы - C++
Добрый вечер. Решил задачу, и решил прогнать по ********. Программа заваливается по времени выполнения, выходит 2.5 секунд, в идеале должно...

Условие выполнения цикла - C++
#include &lt;iostream.h&gt; void main() { char a; int r=1; cin&gt;&gt;a; if(a==r) { cout&lt;&lt;&quot;test&quot;&lt;&lt;endl; ...

Замедление выполнения цикла for - C++
Всем привет.пишу прогу для lpt порта для параллельной микросхемы...для перебора адресов использую цикл for. проблема в том что цикл...

Операторы в условии выполнения цикла while - C++
do{ m = atof(p); if (i&gt;9) break; }while(p = strchr(p, ','), p++); Объясните, пожалуйста, что означает последняя строка? Это...

Возвращение цикла do после выполнения while - dev C++ - C++
Здравствуйте! Нужен код, чтобы возвращал цикл do после выполнения while Помогите пожалуйста! Заранее спасибо!

Выход из цикла или продолжение выполнения в С++ - C++
Надо чтобы при вводе W, A, S или D цикл прекратился, а если не введено ничего -- продолжался. При этом он не должен останавливаться. С++

15
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.06.2011, 19:27 #2
попробуйте Ваше полученное время - число (если оно реально маленькое, то оно будет равно 0) умножить, например, на 100 или 1000 и т.д., пока не будет выведено число, отличное от нуля...
0
Andrew_ku
0 / 0 / 0
Регистрация: 02.04.2011
Сообщений: 31
03.06.2011, 19:47  [ТС] #3
Цитата Сообщение от Mиxaил Посмотреть сообщение
попробуйте Ваше полученное время - число (если оно реально маленькое, то оно будет равно 0) умножить, например, на 100 или 1000 и т.д., пока не будет выведено число, отличное от нуля...
Пытался..( Все равно выводил 0
0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.06.2011, 19:58 #4
Andrew_ku, 80 итераций цикла, выполняется за очень-очень маленькое время... если поставить 1Е6, тут уже ощутимо должно быть... Короче говоря, сделайте больше число итераций цикла...
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
03.06.2011, 20:08 #5
а у меня выводит 0,063 sec. (code::blocks) он, кстати, автоматически выдает время выполнения программы.
0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.06.2011, 20:13 #6
no0ker, Вы умножали на что - то? Или у Вас очень слабый комп
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
03.06.2011, 20:16 #7
ну, у меня старенький ноутбук плюс куча параллельных задач.
и еще - вы можете засечь 6 сотых секунды? =)
0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.06.2011, 20:19 #8
Теоретически, это можно, но не заметно... =)
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
03.06.2011, 20:23 #9
ну как бы сказать, человек может отследить 50 гц, а это как никак 0,02 сек.
и на время работы влияет вывод с помощью cout. если без него, время колеблется от 0,016 до 0,000.
и еще, видимо мой пк все-таки круче ваших - он не только успевает выполнить программу, но еще и засечь время. =))
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.06.2011, 20:24 #10
Пингвин рулит
Код
real	0m0.003s
user	0m0.000s
sys	0m0.000s
0
Somebody
2789 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
03.06.2011, 20:24 #11
Цитата Сообщение от Andrew_ku Посмотреть сообщение
1) Как засечь время такого маленького цикла
Можно
QueryPerformanceCounter
QueryPerformanceFrequency
Ещё лучше
http://www.agner.org/optimize/#testp
Цитата Сообщение от Andrew_ku Посмотреть сообщение
2) Как вообще развернуть этот цикл?
Типа такого. Если L чётное
C++
1
2
3
4
5
for (int i = 0; i < L ; i += 2)
{
  Array[i] = rand() % 20;
  Array[i + 1] = rand() % 20;
}
Если компилируется нормальным компилятором с включенной оптимизацией, быстрее не станет.
0
denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
03.06.2011, 20:25 #12
Andrew_ku, таймером воспользуйся
0
drfaust
261 / 152 / 37
Регистрация: 02.10.2008
Сообщений: 569
Записей в блоге: 1
Завершенные тесты: 1
03.06.2011, 20:37 #13
Andrew_ku, Как я понял дело в оптимизации цикла.
1. Можно данную операцию: Arr[i]=rand()%20; "затормозить", дав ей в "навесок" что-то типа delay(100);

2. Можно этот цикл воткнуть внутрь другого цикла, и так несколько раз, пока время не станет о-очунь заметно.
З.Ы. Стоит также отключить оптимизацию в компиляторе...
0
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
03.06.2011, 20:39 #14
Добавь этот цикл в другой цикл, и проведи его n тыс раз подряд. Полученное число подели на количество циклов (n). Так ты получишь среднее время выполнения своего цикла.
0
Andrew_ku
0 / 0 / 0
Регистрация: 02.04.2011
Сообщений: 31
03.06.2011, 21:17  [ТС] #15
Цитата Сообщение от Mиxaил Посмотреть сообщение
Andrew_ku, 80 итераций цикла, выполняется за очень-очень маленькое время... если поставить 1Е6, тут уже ощутимо должно быть... Короче говоря, сделайте больше число итераций цикла...
Можно конечно попробовать сделать больше итераций, но не знаю можно ли (все таки в задаче 80 сказано).... Может есть все таки какая-нибудь функция на подобии clock(), но более точная?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2011, 21:17
Привет! Вот еще темы с ответами:

Окно программы во время выполнения цикла - C++
Пока выполняется цикл в программе окно становится не доступным. Ни свернуть не переместить и тд. Как с этим бороться? Цикл запускается...

Определить значение переменной после выполнения цикла while - C++
Определить значение переменной s после выполнения следующих операторов: s=0; i=0; while(i&lt;s) { i=i+1; s=s+1/i; }

Очистка экрана после каждого выполнения цикла! - C++
#include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;iostream&gt; using...

Как задать время выполнения цикла в секундах? - C++
Здравствуйте. кусок кода для вывода строки текста на экран const char string1 = &quot;sample of text&quot;; HDC dc = CreateDC(TEXT(&quot;DISPLAY&quot;),...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
03.06.2011, 21:17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru