0 / 0 / 1
Регистрация: 01.04.2013
Сообщений: 49
1

Как правильно задать параметр "время выполнения алгоритма"?

02.10.2014, 22:58. Показов 1352. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как правильно задать параметр "время выполнения алгоритма"?
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
#include <iostream>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <iomanip>
#include <locale.h>
#include <ctime>
#include <stdio.h>
#include <conio.h>
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE,"Russian");
    srand(time(0));
    //int n = 0;
 
    clock_t start, end;
    double t = 0;
    //cin>>n; //Считываем с клавиатуры размер массива
    //int **a = new int* [n]; //Создаем массив указателей
    //for (int i = 0; i<n; i++)
    //{
   // a[i] = new int [n]; //Создаем элементы
   // }
    const int n = 5;
    int i,j,arr[n][n];
    cout<<"Матрица: "<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++)
        {
            arr[i][j]=rand()%20-10;
            cout<<setw(5)<<arr[i][j];
        }
        cout << endl;
    }
    start = clock();
    for (j=0; j<n; j++)
 
 
        {
        for (i=0; i<n; i++)
        {
            if (arr[i][j]==0)
            {
                cout<<"Первый нулевой элемент есть в "<<j+1<<"-ом столбце"<<endl;
return 0;
 
}
        }
 
 
    }
    end = clock();
t = (end - start)/CLK_TCK;
    if (arr[i][j]!=0)
    {
        cout<<"Нулевых элементов в матрице нет"<<endl;
//return 0;
    }
end = clock();
t = (end - start)/CLK_TCK;
 
//Вывод результата на экран
cout << "time = " << t <<endl;
 
//Удаление массива
/*for(int i=0; i<n; i++)
{
delete[]a[i]; //Удаляем каждый элемент
}
delete [] a; //Удаляем массив
return 0;*/
}
Вот такой код, сама программа вычисляет нужный вопрос правильно, а вот с определением времени работы алгоритма что-то не получается. После того как программа находит первый 0-ой элемент время работы алгоритма вообще не показывает, а когда 0-ого элемента нет в матрице - то всегда время 0 секунд. Что не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.10.2014, 22:58
Ответы с готовыми решениями:

Как "подкрасить" некоторые элементы массива на выводе во время выполнения программы
как &quot;подкрасить&quot; некоторые элементы массива на выводе во время выполнения программы в общем,...

Error C2664: atoi: невозможно преобразовать параметр 1 из "_TCHAR *" в "const char *" Как исправить эту ошибку в коде?
#include &quot;stdafx.h&quot; #define _XOPEN_SOURCE 500 #include &lt;conio.h&gt; #include &lt;stdio.h&gt;...

Как узнать время выполнения алгоритма
Мне нужно сравнить несколько алгоритмов сортировки. Но таким способом как у меня, дает очень...

Error C2664: RegisterClassW: невозможно преобразовать параметр 1 из "WNDCLASSEX *" в "const WNDCLASSW *"
почему выдаёт ошибку? int RegClass(WNDPROC Proc,LPCTSTR szName,UINT brBackground){ WNDCLASSEX...

13
5496 / 4891 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2014, 23:08 2
Цитата Сообщение от 1_vlad Посмотреть сообщение
После того как программа находит первый 0-ой элемент время работы алгоритма вообще не показывает
А где там вывод времени?
Цитата Сообщение от 1_vlad Посмотреть сообщение
а когда 0-ого элемента нет в матрице - то всегда время 0 секунд. Что не так?
Очень маленькое время, в windows не получится вывести.
Измерение времени работы кода
0
0 / 0 / 1
Регистрация: 01.04.2013
Сообщений: 49
02.10.2014, 23:40  [ТС] 3
А где там вывод времени?
так и сам не вижу где, на то и спрашиваю
0
5496 / 4891 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.10.2014, 23:57 4
Цитата Сообщение от 1_vlad Посмотреть сообщение
так и сам не вижу где, на то и спрашиваю
То есть, видите, что вывода нет, и спрашиваете почему не выводит? Ответ разве не ясен?
0
0 / 0 / 1
Регистрация: 01.04.2013
Сообщений: 49
03.10.2014, 00:07  [ТС] 5
А где там вывод времени?
вот окончание времени подсчета кода
C++
1
2
3
4
5
end = clock();
t = (end - start)/CLK_TCK;
 
//Вывод результата на экран
cout << "time = " << t <<endl;
но всегда срабатывает когда в мартице нет 0-ого элемента. а мне нужно что и при определении в мартице 0-ого элемента срабатывал код.
стартовое время установлено
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
start = clock();
    for (j=0; j<n; j++)
 
 
        {
        for (i=0; i<n; i++)
        {
            if (arr[i][j]==0)
            {
                cout<<"Первый нулевой элемент есть в "<<j+1<<"-ом столбце"<<endl;
return 0;
 
}
        }
 
 
    }
    end = clock();
t = (end - start)/CLK_TCK;
    if (arr[i][j]!=0)
    {
        cout<<"Нулевых элементов в матрице нет"<<endl;
//return 0;
    }
end = clock();
t = (end - start)/CLK_TCK;
 
//Вывод результата на экран
cout << "time = " << t <<endl;
0
5496 / 4891 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.10.2014, 00:12 6
Цитата Сообщение от 1_vlad Посмотреть сообщение
вот окончание времени подсчета кода
Это я вижу. Есть вопрос:
Цитата Сообщение от 1_vlad Посмотреть сообщение
После того как программа находит первый 0-ой элемент время работы алгоритма вообще не показывает,
А я задаю встречный вопрос: а где вывод времени:
Цитата Сообщение от 1_vlad Посмотреть сообщение
После того как программа находит первый 0-ой элемент
Не понятно? Вывод сделайте - будет показывать время.
0
шКодер самоучка
2175 / 1882 / 912
Регистрация: 09.10.2013
Сообщений: 4,146
Записей в блоге: 7
03.10.2014, 00:18 7
смотрим 48-ю строку и понимаем, что до 56-й мы никак не дойдем
0
0 / 0 / 1
Регистрация: 01.04.2013
Сообщений: 49
03.10.2014, 00:20  [ТС] 8
Не понятно? Вывод сделайте - будет показывать время.
я вас понял. вначале я тоже думал, что нужно после того кода, который определяет 0-ой элемент, вставить код
C++
1
2
3
end = clock();
t = (end - start)/CLK_TCK;
cout << "time = " << t <<endl;
.

но все равно ничего не происходит тогда, когда же опять находит 0-ой элемент. если у вас есть предположения, где нужно этот код времени еще вставить - посоветуйте.

Добавлено через 1 минуту
Цитата Сообщение от Cra3y Посмотреть сообщение
смотрим 11-ю строку и понимаем, что до 19-й мы никак не дойдем
так а что нужно конкретно изменить? подскажите!
0
5496 / 4891 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.10.2014, 00:23 9
Цитата Сообщение от 1_vlad Посмотреть сообщение
вначале я тоже думал, что нужно после того кода, который определяет 0-ой элемент, вставить код
Цитата Сообщение от 1_vlad Посмотреть сообщение
но все равно ничего не происходит тогда,
Покажите, как вставляли.
0
шКодер самоучка
2175 / 1882 / 912
Регистрация: 09.10.2013
Сообщений: 4,146
Записей в блоге: 7
03.10.2014, 00:24 10
return в 48й строке завершает программу. на совсем. естественно до вывода времени не доходит.
Можно вынести проверку в отдельную функцию... ну или флаг прерывания цикла ...
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
#include <iostream>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <iomanip>
#include <locale.h>
#include <ctime>
#include <stdio.h>
#include <conio.h>
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE,"Russian");
    srand(time(0));
    //int n = 0;
 
    clock_t start, end;
    double t = 0;
    //cin>>n; //Считываем с клавиатуры размер массива
    //int **a = new int* [n]; //Создаем массив указателей
    //for (int i = 0; i<n; i++)
    //{
   // a[i] = new int [n]; //Создаем элементы
   // }
    const int n = 5;
    int i,j,arr[n][n];
    cout<<"Матрица: "<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++)
        {
            arr[i][j]=rand()%20-10;
            cout<<setw(5)<<arr[i][j];
        }
        cout << endl;
    }
    start = clock();
    bool have_zero = false;
    for (j=0; j<n; j++)
    {
        for (i=0; i<n; i++)
        {
            if (arr[i][j]==0)
            {
                have_zero = true;
                goto no_more_if;
//              break;
            }
        }
//      if(have_zero)
//          break;
    }
no_more_if:
    end = clock();
    t = double(end - start)/double(CLK_TCK);
    if (have_zero) {
        cout<<"Первый нулевой элемент есть в "<<j+1<<"-ом столбце"<<endl;
    }
    else {
        cout<<"Нулевых элементов в матрице нет"<<endl;
    }
    end = clock();
    t = (end - start)/CLK_TCK;
 
    //Вывод результата на экран
    cout<< "time = " << t <<endl;
 
//Удаление массива
/*for(int i=0; i<n; i++)
{
delete[]a[i]; //Удаляем каждый элемент
}
delete [] a; //Удаляем массив
return 0;*/
}
0
0 / 0 / 1
Регистрация: 01.04.2013
Сообщений: 49
03.10.2014, 01:05  [ТС] 11
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
start = clock();
    for (j=0; j<n; j++)
        {
        for (i=0; i<n; i++)
        {
            if (arr[i][j]==0)
            {
                cout<<"Первый нулевой элемент есть в "<<j+1<<"-ом столбце"<<endl;
 
return j;
 
}
        }
 
 
    }
    end = clock();
t = (end - start)/CLK_TCK;
    if (arr[i][j]!=0)
    {
        cout<<"Нулевых элементов в матрице нет"<<endl;
//return 0;
    }
end = clock();
t = (end - start)/CLK_TCK;
 
//Вывод результата на экран
cout << "time = " << t <<endl;
 
//Удаление массива
/*for(int i=0; i<n; i++)
{
delete[]a[i]; //Удаляем каждый элемент
}
delete [] a; //Удаляем массив
return 0;*/
}
вот, после цикла for, к примеру.

Добавлено через 4 минуты
Цитата Сообщение от Cra3y Посмотреть сообщение
return в 48й строке завершает программу. на совсем. естественно до вывода времени не доходит.
Можно вынести проверку в отдельную функцию... ну или флаг прерывания цикла ...
спасибо, этот вариант уже лучше, но что еще нужно добавить, чтобы время вычисления было в мили секундах? сейчас читаю об этом.

Добавлено через 35 минут
еще вопрос, как сделать время вычисления кода алгоритма а миллисекундах?
0
шКодер самоучка
2175 / 1882 / 912
Регистрация: 09.10.2013
Сообщений: 4,146
Записей в блоге: 7
03.10.2014, 01:23 12
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
#include <locale>
#include <iostream>
#include <cwchar>
 
#include <chrono> // [url]http://www.cplusplus.com/reference/chrono/[/url]
namespace test {
    using namespace std::chrono;
    template <typename functor>
    milliseconds get_run_time(functor func) {
        system_clock::time_point start, end;
        start = system_clock::now();
        func();
        end = system_clock::now();
        return duration_cast<milliseconds>(end - start);
    }
}
 
 
int wmain(int argc, wchar_t** argv) {
    (argc); (argv);
 
    auto diff = test::get_run_time([]()->void { // читаем про c++11
        // здесь пишем код который нужно замерить
    });
    std::wcout << diff.count() << std::endl;
    return 0;
}
Добавлено через 2 минуты
P.S.: я не говорю что это правильный способ, это просто один из вариантов
0
5496 / 4891 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.10.2014, 09:32 13
Цитата Сообщение от 1_vlad Посмотреть сообщение
еще вопрос, как сделать время вычисления кода алгоритма а миллисекундах?
По выложенной ссылке почитали тему?
Цитата Сообщение от alsav22 Посмотреть сообщение
Очень маленькое время, в windows не получится вывести.
0
0 / 0 / 1
Регистрация: 01.04.2013
Сообщений: 49
05.10.2014, 22:38  [ТС] 14
Цитата Сообщение от alsav22 Посмотреть сообщение
Очень маленькое время, в windows не получится вывести
и как теперь быть? эту функцию QueryPerformanceCounter не пойму как применять. Был вариант увеличить количество циклов или увеличить количество элементов матрицы - итог один и тот же - "0".
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2014, 22:38
Помогаю со студенческими работами здесь

error C2664: CWnd::MessageBoxW: невозможно преобразовать параметр 2 из "long" в "LPCTSTR"
при компиляции выдаёт ошибку указанную в теме, код: void Clab_12_2Dlg::OnClickedAri() { //...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR"
msoftcon.h //msoftcon.h //declarations for Lafore's console graphics functions //uses Window's...

Преобразовать параметр из "WCHAR [260]" в "const char *"
Подскажите пожалуйста, как &quot; преобразовать параметр из &quot;WCHAR &quot; в &quot;const char *&quot;&quot;? Вот,по коду я...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru