Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Silence_
0 / 0 / 0
Регистрация: 25.09.2010
Сообщений: 17
1

Почему при инициализации данных программа работает быстрей?

22.10.2010, 23:46. Просмотров 734. Ответов 10
Метки нет (Все метки)

Почему при инициализации данных программа работает быстрей?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2010, 23:46
Ответы с готовыми решениями:

Почему код на С++ работает быстрей
Не как не могу понять за счет чего код написан на С++ работает быстрей чем на C# или на других...

Почему не работает программа при некоторых входных данных
Задание найти первый и последний неотрицательные эллементы массива. и вывести их индексы если...

Почему вылетает программа при 32768, а при 20 все работает нормально?
Помогите исправить, почему программа вылетает при больших числах, а если поставить маленькие то все...

Почему при умножении на 0, программа работает правильно?
Операции ввода, такие, как cin, должны уметь преобразовывать последо- вательность символов в число....

Почему работает программа при выходе за пределы массива?
Добрый день, возникла проблема. Я задал одномерный массив из 10 элементов, однако, когда в я цикле...

10
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
22.10.2010, 23:51 2
Silence_, А это уже смотря каких данных.
Допустим, если с вектором сделать resize или reserve сразу - скорость немного поднимется. Ну со всеми контейнерами по сути.
0
Silence_
0 / 0 / 0
Регистрация: 25.09.2010
Сообщений: 17
22.10.2010, 23:53  [ТС] 3
исходных данных. когда известны начальные значения

Добавлено через 1 минуту
например я проинициализирую массив. или переменную

C
1
2
.....
 int a = 1
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
22.10.2010, 23:56 4
Silence_, А это с чего взяли? Тесты проводили? Или на глазок?
0
Silence_
0 / 0 / 0
Регистрация: 25.09.2010
Сообщений: 17
23.10.2010, 00:00  [ТС] 5
так вся загвоздка то и в этом....что я сам в сомнениях))
может я неккоректно сформулировал...
в общем, инициализация проходит на этапе трансляции....
(это вопрос из теории) так вот...я не могу никак ответить...почему быстрей...
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
23.10.2010, 00:29 6
Silence_, Ну опять же смотря какие данные... Держите пару тестов.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <ctime>
 
int main()
{
    clock_t start=clock();
    int a;
    a=5; 
    std::cout<<a<<'\n';
    std::cout<<"Difference: "<< static_cast<double>(clock()-start)/CLOCKS_PER_SEC<<'\n';
    clock_t start2=clock();
    int b=5;
    std::cout<<b<<'\n';
    std::cout<<"Difference: "<< static_cast<double>(clock()-start2)/CLOCKS_PER_SEC<<'\n';
    return 0;
}
Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <ctime>
#include <cstring>
#include <algorithm>
 
int main()
{
    const int n=10000;
    clock_t start=clock();
    int Arr[n];
    memset(Arr, 0, sizeof(int)*n);
    std::cout<<"Diff with memset: "<< static_cast<double>(clock()-start)/CLOCKS_PER_SEC<<'\n';
    clock_t start2=clock();
    int SecArr[n];
    std::fill_n(SecArr, n, 0);
    std::cout<<"Diff with fill_n: "<< static_cast<double>(clock()-start2)/CLOCKS_PER_SEC<<'\n';
    clock_t start3=clock();
    int ThirdArr[n];
    for(int i=0; i<n; ++i)
        ThirdArr[i]=0;
    std::cout<<"Diff with simple initialisation: "<< static_cast<double>(clock()-start3)/CLOCKS_PER_SEC<<'\n';
    return 0;
}
0
Silence_
0 / 0 / 0
Регистрация: 25.09.2010
Сообщений: 17
23.10.2010, 00:37  [ТС] 7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
    int main ()
{
int i;
float eps,x,a,s;
 scanf("%f",&x);
 scanf("%f",&eps);
i = 1;
a=s=1;
while(a>eps)
{a*=x/;
 s+=a;
i++;
}
printf("s=%f", s);
return 0;
}
Добавлено через 1 минуту
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
    int main ()
{
int i = 1;
float eps,x,a = 1., s=1. ;
 scanf("%f",&x);
 scanf("%f",&eps);
 
while(a>eps)
{a*=x/;
 s+=a;
i++;
}
printf("s=%f", s);
return 0;
}
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
23.10.2010, 00:39 8
Silence_, Код некорректен. Инкрементируется переменная в которой записан "мусор". Что получаем в результате? Правильно, мусор+1.
В мусоре может быть все что угодно. И 0, и -8785787 и любое значение.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main()
{
int i;
float eps,x,a,s;
 scanf("%f",&x);
 scanf("%f",&eps);
a = 1;
a=s=1;
while(a>eps)
{a*=x/;
 s+=a;
i++;
}
printf("s=%f", s);
return 0;
}
0
Silence_
0 / 0 / 0
Регистрация: 25.09.2010
Сообщений: 17
23.10.2010, 00:43  [ТС] 9
я там опечатался не a=1, а i =1 исправил

Добавлено через 37 секунд
код Си
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
23.10.2010, 00:50 10
Сверяйте. Раз 5 проверьте одни и те же варианты. Будет выдавать по-разному.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <time.h>
 
int main ()
{
size_t start=clock();
int i;
float eps,x,a,s;
 scanf("%f",&x);
 scanf("%f",&eps);
i = 1;
a=s=1;
while(a>eps)
{a*=x;
 s+=a;
i++;
}
printf("s=%f\n", s);
printf("Diff: %f\n", (double)(clock()-start)/CLOCKS_PER_SEC);
return 0;
}
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <time.h>
 
int main ()
{
size_t start=clock();
 
int i = 1;
float eps,x,a = 1., s=1. ;
 scanf("%f",&x);
 scanf("%f",&eps);
 
while(a>eps)
{a*=x;
 s+=a;
i++;
}
printf("s=%f\n", s);
printf("Diff: %f\n", (double)(clock()-start)/CLOCKS_PER_SEC);
return 0;
}
0
Silence_
0 / 0 / 0
Регистрация: 25.09.2010
Сообщений: 17
25.10.2010, 19:01  [ТС] 11
таймером только скорость выполнения програмного кода засечется)) тут на физическом уровне.
0
25.10.2010, 19:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2010, 19:01

Почему прога может зависать при инициализации массива
Проект в VS2010 простое консольное приложение Есть массив string vesa_str; При его...

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл?
void mainmenu() { cout &lt;&lt; &quot;Введи число&quot; &lt;&lt; endl; cin &gt;&gt; choice; if (choice == 1) { cout &lt;&lt;...

Почему при инициализации строки, сначала создаётся пустой объект?
Чтобы при создании присвоить строке какое-то значение, можно использовать два способа: string...


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

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

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