Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
#1

Циклы и их оптимизация - C++

11.06.2013, 21:41. Просмотров 1561. Ответов 54
Метки нет (Все метки)

Доброго времени суток!
http://www.cyberforum.ru/cpp-beginners/thread655819.html
Имеется код программы, необходимо оптимизировать вложенный цикл чтобы время потраченное на выполнение программы уменьшилось после оптимизации на заметное число >1 секунды. Можете по своему усмотрению усложнить код (вложив еще цикл) для заметности автоматизации.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream.h>
#include <math.h>
#include <process.h>
 int main()
{
    int n, i=2, j;
    double sum;
    cout<<"n= ";
    cin>>n;
    for(i=0; i<n+1; i++)
    {
    sum=0;
    for(j=1; j<i+2; j++)
        sum+=(double)1/(i*i+j);
    cout<<"F"<<i<<"="<<sum<<endl;
    }
    system("pause");
   return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2013, 21:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Циклы и их оптимизация (C++):

Заменить в коде циклы for на циклы while
int i, j, n; bool a; cin &gt;&gt; i &gt;&gt; n; for (i; i&lt;n; i++) { a = true; for...

Оптимизация
Как-нибудь можно уменьшить размер кода, т.е. сократить количество строк данного...

оптимизация
какие 5 способов оптимизации?

Оптимизация
Условие задачи: Как известно, красить забор Тому Сойеру помогали...

Оптимизация
Мне нужно на определенную часть программы дать указание компилятору не...

54
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:35 #41
Через OpenMP.
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
#include <omp.h>
#include <iostream>
 
using namespace std;
 
int main()
{
    int n;
 
    cout << "n = ";
    cin >> n;
 
    double *sum = new double [n + 1];
 
    #pragma omp parallel for
    for ( int i = 0; i < n + 1; i++ ) {
        sum[i] = 0;
        for ( int j = 1; j < i + 2; j++ ) {
            sum[i] += 1. / (i * i + j);
        }
    }
 
    for ( int i = 0; i < n + 1; i++ ) {
        cout << "F" << i << " = " << sum[i] << endl;
    }
 
    return 0;
}
0
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
12.06.2013, 00:35  [ТС] #42
Ребят, а может быть на каком простом примере можно сделать оптимизацию циклов, пусть она будет 5% но это уже оптимизация как не как, на каких - либо математических действиях
0
Matan!
Delphi/Java/DB Dev + Math
395 / 264 / 112
Регистрация: 31.05.2013
Сообщений: 2,161
Записей в блоге: 4
Завершенные тесты: 2
12.06.2013, 00:36 #43
Цитата Сообщение от Wolkodav Посмотреть сообщение
Matan!, на C# смог бы, а на плюсах таким не занимался.
Ну,если не сложно,какой-то примерчик покажи.Не здесь,так в личку
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:36 #44
Цитата Сообщение от 2e1773ce Посмотреть сообщение
Для встроенных типов разницы нет, а на итераторах, например, префиксный гораздо быстрее.
Где ты тут итераторы увидел?
0
Matan!
Delphi/Java/DB Dev + Math
395 / 264 / 112
Регистрация: 31.05.2013
Сообщений: 2,161
Записей в блоге: 4
Завершенные тесты: 2
12.06.2013, 00:37 #45
Цитата Сообщение от lazybiz Посмотреть сообщение
sum[i] += 1. / (i * i + j);
что за точка??
0
2e1773ce
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 96
12.06.2013, 00:37 #46
Цитата Сообщение от Matan! Посмотреть сообщение
Учи правила.Другой же результат будет совсем!
ты вообще о чем?
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:38 #47
Цитата Сообщение от Matan! Посмотреть сообщение
что за точка??
Точка означает тип double.
0
Matan!
Delphi/Java/DB Dev + Math
395 / 264 / 112
Регистрация: 31.05.2013
Сообщений: 2,161
Записей в блоге: 4
Завершенные тесты: 2
12.06.2013, 00:38 #48
Цитата Сообщение от lazybiz Посмотреть сообщение
Для встроенных типов разницы нет, а на итераторах, например, префиксный гораздо быстрее.
Это инкременты))
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:39 #49
Matan!, это не я писал.
0
Matan!
Delphi/Java/DB Dev + Math
395 / 264 / 112
Регистрация: 31.05.2013
Сообщений: 2,161
Записей в блоге: 4
Завершенные тесты: 2
12.06.2013, 00:41 #50
Цитата Сообщение от 2e1773ce Посмотреть сообщение
ты вообще о чем?
Это начальные главы учебников "Префиксный и постфиксный инкременты".
0
2e1773ce
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 96
12.06.2013, 00:45 #51
Цитата Сообщение от lazybiz Посмотреть сообщение
Где ты тут итераторы увидел?
ТСу экзамен сдавать , я раписал некоторые простые моменты про оптимизацию , если их тут нету(итераторов) это не значит что они ему в будущем не встретятся , преинкремент должен входить в привычку.

Добавлено через 1 минуту
Цитата Сообщение от Matan! Посмотреть сообщение
Это начальные главы учебников "Префиксный и постфиксный инкременты".
Ты к чему это пишешь?
0
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
12.06.2013, 00:46  [ТС] #52
не меня вот такие задания вообще в ступор ставят, не часто дают, но если дадут то это ужс... надо короче забить на танки и начать изучать с++
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:47 #53
Цитата Сообщение от 2e1773ce Посмотреть сообщение
преинкремент должен входить в привычку.
Не должен. Если ты знаешь чем они отличаются то должен это понимать.

В итераторах инкремент перегружен. Это отдельная тема. Можно создать контейнер с перегруженным пост-инкрементом, который будет работать быстрее пре-инкремента.
0
Genn55
378 / 225 / 108
Регистрация: 26.12.2012
Сообщений: 744
12.06.2013, 01:54 #54
DVGU.MAKC, если вам все равно что нужно я вам скину 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
#include <iostream>
#include <iomanip>
#include <math.h>
 
using namespace std;
 
 
inline bool simple(int);
 
int main()
{
for(int i = 1; i <= 100000; i++)
if(simple(i))
cout << setw(5) << setiosflags(ios::left) << i;
 
return 0;
}
 
inline bool simple(int num)
{
if(num < 2)
return false;
else
for(int i = 2; i <= sqrt(num); i++)
if(num % i == 0)
return false;
 
return true;
}
это оптимизирована
эта нет
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
#include <iostream>
#include <iomanip>
#include <math.h>
 
using namespace std;
 
 
 bool simple(int);
 
int main()
{
for(int i = 1; i <= 100000; i++)
if(simple(i))
cout << setw(5) << setiosflags(ios::left) << i;
 
return 0;
}
 
 bool simple(int num)
{
if(num < 2)
return false;
else
for(int i = 2; i <= num/2; i++)
if(num % i == 0)
return false;
 
return true;
}
вычисляют простое число.Сравните скорость выполнения.
0
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
12.06.2013, 01:56  [ТС] #55
Хорошо, сейчас посмотрю, опробую, большое спасибо Вам и всем кто старался, пытался помочь. А при помощи какого способа осуществлялась оптимизация?
0
12.06.2013, 01:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 01:56
Привет! Вот еще темы с решениями:

Циклы. Напечатать числа в виде таблицы, используя только циклы
Напечатать числа в виде таблицы, используя только циклы (массивы и строки не...

Циклы. Напечатать числа в виде таблицы, используя только циклы
4. Напечатать числа в виде таблицы, используя только циклы (массивы и строки не...

Переведите исходные циклы в циклы других форматотв:
Переведите исходные циклы в циклы других форматотв: For i:73 to 122 do в...

Циклы в Паскале (циклы с пост- и предусловием)
Требуется напиcать программу, которая запрашивает числа с клавиатуры до тех...


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

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

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