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

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

Войти
Регистрация
Восстановить пароль
 
Silence_
0 / 0 / 0
Регистрация: 25.09.2010
Сообщений: 17
#1

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

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

Почему при инициализации данных программа работает быстрей?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2010, 23:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему при инициализации данных программа работает быстрей? (C++):

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

Почему не работает программа при некоторых входных данных - C++
Задание найти первый и последний неотрицательные эллементы массива. и вывести их индексы если значение size указать 20 то всё...

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7973 / 4735 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 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
В астрале
Эксперт С++
7973 / 4735 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 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
В астрале
Эксперт С++
7973 / 4735 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 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
В астрале
Эксперт С++
7973 / 4735 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 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
В астрале
Эксперт С++
7973 / 4735 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2010, 19:01
Привет! Вот еще темы с ответами:

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

Почему при инициализации строки, сначала создаётся пустой объект? - C++
Чтобы при создании присвоить строке какое-то значение, можно использовать два способа: string str1(”bla-bla-bla”); или string str2 =...

При инициализации массива в отладке не попадаю в обработчик, поясните почему? - C++
имеется два класса struct Integer { explicit Integer(int const &amp;value) : value_(value) { } Integer() ...

Почему программа выдает ошибку при первом запуске, а дальше работает нормально? Код C - C++
Подскажите почему программа выдает ошибку при первом запуске, а дальше работает нормально? #include &lt;iostream&gt; #include &lt;cstdlib&gt; ...


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

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

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