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

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

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

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

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

Доброго времени суток!
Имеется код программы, необходимо оптимизировать вложенный цикл чтобы время потраченное на выполнение программы уменьшилось после оптимизации на заметное число >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++):

Оптимизация кода, массивы и циклы - C++
Занимаюсь программированием совсем немного, решил потренироватся. Написал консольное приложение в духе &quot;Matrix&quot;. Там объявленно отдельно...

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

Оптимизация - C++
Как-нибудь можно уменьшить размер кода, т.е. сократить количество строк данного кода: #include &lt;cmath&gt; #include &quot;windows.h&quot; ...

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

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

Серьезная оптимизация - C++
Участвую в олимпиаде, уже придумал алгоритм который обязан работать, но к сожалению вылетаю по тайм_лимит. Алгоритм линейный, я уже не знаю...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
12.06.2013, 00:03  [ТС] #16
Цитата Сообщение от lazybiz Посмотреть сообщение
Не рановато ты в оптимизацию полез?!
да рановато, а толку та, когда приспичит и не в такое полезешь. с 10 числа сижу курсовую делаю, оптимизация встроенных циклов, вчера в 3 часа дня как встал так и до сих пор не ложился завтра сдавать уже надо, время уже 7:01 (я в Приморье живу), информации вроде как нашел, прочитал, переделал, а вот с программой не думал что все так будет сложно, вот и приходится разбираться сидеть
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:04 #17
В первой итерации i=0, j=1, поэтому сначала 1. делится на 1
0
Matan!
273 / 123 / 25
Регистрация: 31.05.2013
Сообщений: 1,126
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:05 #18
Нет,i=2 в начале.А потом i++.
Ты ведь вложил один цикл в другой.

Добавлено через 1 минуту
Цитата Сообщение от DVGU.MAKC Посмотреть сообщение
int n, i=2
Цитата Сообщение от DVGU.MAKC Посмотреть сообщение
for(i=0
непонятки...
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:07 #19
Цитата Сообщение от Matan! Посмотреть сообщение
Нет,i=2 в начале.А потом i++.
Ты ведь вложил один цикл в другой.
Читай внимательней. Тут каким значением инициализируется i: for(i=0; i<n+1; i++) ?

Добавлено через 46 секунд
В самом начале =2 можно вообще убрать, на результат не повлияет.
0
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
12.06.2013, 00:09  [ТС] #20
Смотрите что получается:
n=15
F0=1
F1=0.833333
F2=0.509524
F3=0.351166
F4=0.26463
F5=0.211287
Может быть не мучиться, взять решить исходя из этих данных математически найти в результате чего происходят такие изменения и все?
Ну выполняется же сначала внутренний цикл а потом внешний или неправильно?
0
Matan!
273 / 123 / 25
Регистрация: 31.05.2013
Сообщений: 1,126
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:14 #21
Ты прав,действительно.

Добавлено через 1 минуту
Цитата Сообщение от DVGU.MAKC Посмотреть сообщение
выполняется же сначала внутренний цикл а потом внешний
Да.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:15 #22
Цитата Сообщение от Matan! Посмотреть сообщение
выполняется же сначала внутренний цикл а потом внешний
Да.
Нет. С какой стати.
0
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
12.06.2013, 00:16  [ТС] #23
Цитата Сообщение от Matan! Посмотреть сообщение

Да.
Ну получается для выполнения вложенного цикла необходимы данные, но если i=2 убрать и не чего не меняется я тогда не понимаю как, получается что бы решить внутренний он идет во внешний за данными отсюда следует, что выводимый результат надо искать во внешнем цикле?
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:18 #24
В Си/С++ все выполняется поочередно. Т.е. как написано - так и выполняется.
0
Matan!
273 / 123 / 25
Регистрация: 31.05.2013
Сообщений: 1,126
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:21 #25
Цитата Сообщение от lazybiz Посмотреть сообщение
Нет. С какой стати.
Теорию читать надо
0
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
12.06.2013, 00:22  [ТС] #26
Цитата Сообщение от lazybiz Посмотреть сообщение
В Си/С++ все выполняется поочередно. Т.е. как написано - так и выполняется.
подождите, а вот эта строчка не имеет разве значение cout<<"F"<<i<<"="<<sum<<endl; ведь она и выводит весь результат, то есть надо решить вот это sum+=(double)1/(i*i+j); я затупил.... пойду покурю
0
Matan!
273 / 123 / 25
Регистрация: 31.05.2013
Сообщений: 1,126
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:24 #27
Цитата Сообщение от DVGU.MAKC Посмотреть сообщение
Ну получается для выполнения вложенного цикла необходимы данные, но если i=2 убрать и не чего не меняется я тогда не понимаю как, получается что бы решить внутренний он идет во внешний за данными отсюда следует, что выводимый результат надо искать во внешнем цикле?
Если тебе надо,чтобы i начиналось считаться с 2,так и пиши:
for(i=0; i<n+1; i++)
{
...
}
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
12.06.2013, 00:25 #28
Эта строчка стоит после вложенного цикла, следовательно выполняться она будет тоже после цикла.

Добавлено через 40 секунд
Matan!, в твоем примере она с 2 начинает считаться?
0
Matan!
273 / 123 / 25
Регистрация: 31.05.2013
Сообщений: 1,126
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 00:25 #29
ведь она и выводит весь результат, то есть надо решить вот это sum+=(double)1/(i*i+j)

Да.
0
Wolkodav
604 / 457 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
12.06.2013, 00:25 #30
Вообще, единственная оптимизация(даже не оптимизаци, а ускорение работы) которая тут лезет-паралелить.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 00:25
Привет! Вот еще темы с ответами:

Оптимизация кода - C++
В общем дело такое, мне нужно 2 одинаковые программы(небольшие), только одна программа должна быть неоптимизированная, а другая, точно...

Оптимизация памяти - C++
Доброго времени суток. У меня есть класс(код показывать не буду, он не нужен), в приватном поле есть переменная типа int *, то есть класс...

Оптимизация и усовершенствование - C++
Здравствуйте, совсем недавно начал изучать язык программирования &quot;С++&quot;. Решил попрактиковаться, сделал маленькую консольную игру. Назвал...

Оптимизация SDL - C++
Начал изучать SDL. Все бы хорошо, но процесс созданного окна кушает 25% ресурсов процессора. Когда делал по этим урокам:...


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

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

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