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

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

Войти
Регистрация
Восстановить пароль
 
 
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
#1

Развертка циклов и не только - C++

11.06.2013, 12:26. Просмотров 860. Ответов 17
Метки нет (Все метки)

Доброго времени суток!
Помогите разобраться с техникой оптимизации циклов(коды не компилируются, не знаю по чему):
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
int main()
{
    for (int i = 0; i < iN; i++)
{
    res *= a[i];
}
    system("PAUSE");
    return 0; 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
  for (int i = 0; i < iN; i+=3)
{
       res *= a[i];
       res *= a[i+1];
       res *= a[i+2];
}
    system("PAUSE");
    return 0; 
}
Объясните пожалуйста:
1) Что обозначает iN(я так понял это число до которого необходимо считать)
2) Что происходит в первом и во втором коде
3) Что обозначает i+=3?
C++
1
2
3
4
5
6
7
for(int i = 0; i < iN; i++)
{
   a[i] = b[i] - 5;
}
   for(int i = 0; i < iN-1; i++){
   d[i] = e[i] * 3;
}
Что происходит в 3 коде, что он делает? И опять же он не компилируется, либо переменная не объявлена (возможно тип переменной) либо не подключена библиотека какая то (что такое "В gcc можно применить следующие ключи: -funroll-all-loops -funroll-loops."- не знаю.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2013, 12:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Развертка циклов и не только (C++):

Определить виды блюд, которые есть только на завтраке, только на обеде и только на ужине - C++
В столовой имеются отдельные меню на завтрак, обед и ужин. Известно, что в каждом таком меню не более 10 видов блюд.Определите, какие...

Напечатать только те слова, перед которыми в строке находятся только меньшие слова, а за ними – только большие - C++
Помогите написать программу на языке ANSI C или C++ Дана строка s, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 ...

Разное (параметры циклов и не только) - Turbo Pascal
Буду очень признательна за помощь! Раздел I. (Массивы не использовать!) 1. Вычисление f = N! описать каждым из трех вариантов...

Оператор break даёт нам выход из обоих циклов или только из внутреннего - Turbo Pascal
Господа, проконсультируйте в одном вопросе! Написав кучу программ, в голове образовался полный ахтунг, что стал тормозить на элементарных...

Функция сложения двух чисел, используя только прибавление единицы, реализованную с помощью циклов - Pascal ABC
1. функцию сложения двух чисел, используя только прибавление единицы, реализованную с помощью циклов; 2. функцию сложения двух чисел,...

Как получить сумму и произведение циклов с использованием одной строки циклов - Java SE
Как получить сумму и произведение циклов с использованием одной строки циклов, а не трёх?. class ForDrmo2 { public static...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Пaтрик
415 / 390 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
11.06.2013, 12:31 #2
iN - переменная.
1. Первый код вычисляет произведение элементов массива.
2. Вычисляет произведение элементов массива, но за одну итерацию вычисляет произведение сразу трех элементов.
3. Сами разбирайтесь.
Цитата Сообщение от DVGU.MAKC Посмотреть сообщение
В gcc можно применить следующие ключи: -funroll-all-loops -funroll-loops
Значит запустить компилятор и передать ему следующие опции.
Bash
1
gcc -funroll-all-loops -funroll-loops ..
0
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
11.06.2013, 12:35 #3
1) Что обозначает iN(я так понял это число до которого необходимо считать)

под iN подразумевается переменная-счетчик цикла. Пока условие истино (i < iN) - цикл будет крутиться. Но у вас она нигде не объявлена,как в прочем и остальные переменные (поэтому коды и не компилируются )

2) Что происходит в первом и во втором коде
Первый код, если в нем будет хватать соответствующих переменных - пытается найти произведение массива. Второй то же самое, только шаг цикла = три элемента.

3) Что обозначает i+=3?
Означает увеличить текущее значение переменной i на 3
0
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
11.06.2013, 12:36  [ТС] #4
А почему он не компилируется? gcc -funroll-all-loops -funroll-loops .. - получается надо вставить куда то...только куда, прочитав про gcc я понял что это программа, но я использую Dev-C++
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
int main()
{
    for (int i = 0; i < 10000; i++)
{
    res *= a[i];   //обижается на вот эту строчку, что необходимо с ней сделать?
}
    system("PAUSE");
    return 0; 
}
0
Пaтрик
415 / 390 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
11.06.2013, 12:38 #5
Переменные res и a не объявлены.
1
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
11.06.2013, 12:38 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
    int a[10000];
    int res = 1;
    for (int i = 0; i < 10000; i++)
{
    res *= a[i];
}
    system("PAUSE");
    return 0; 
}
1
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
11.06.2013, 12:40  [ТС] #7
Не ну как написано так и сделал: "Используй ключевое слово register перед определением переменных в циклах".
Спасибо большое ребята, а то мы с парнишкой сидим уже часа 2 понять не можем в чем проблема
0
ITDeveloper
85 / 85 / 5
Регистрация: 14.01.2011
Сообщений: 263
11.06.2013, 12:40 #8
Переменные у вас не объявлены!!!
0
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
11.06.2013, 12:44  [ТС] #9
Так это все хорошо, он компилируется, не чего не делается, просто написано:"Для продолжения нажмите клавишу....". Он же должен выводить счет до числа
0
Пaтрик
415 / 390 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
11.06.2013, 12:45 #10
Цитата Сообщение от DVGU.MAKC Посмотреть сообщение
Он же должен
он ничего не должен. Код работает так, как написал его автор.
0
Tulosba
11.06.2013, 12:46
  #11

Не по теме:

Ещё язык не освоили, а уже оптимизациями занимаетесь.

0
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
11.06.2013, 12:49  [ТС] #12
Цитата Сообщение от Пaтрик Посмотреть сообщение
он ничего не должен. Код работает так, как написал его автор.
Почему он не чего не должен? Как я понял программа выводит счет от 0 до iN, во 2 коде получается либо идет так 0-3-6-9 и т.д. либо сразу выполняется 3 действия, получается код работает в 3 раза быстрее.
Я могу ошибаться и не понимать, но тогда почему тут он считает и выводит на экран значения?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
    int a;
    for (int i=0;i<3000;i++)
 
 
 
    cout<<"a="<<i<<endl;
    system("PAUSE");
    return 0; 
}
0
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
11.06.2013, 13:06 #13
DVGU.MAKC, Мил человек. Код делает то, что хотите вы, а не то, что хочет код. Добавили cout - стал выводить результаты работы на консоль. Не добавили - не стал.
0
DVGU.MAKC
0 / 0 / 0
Регистрация: 13.01.2012
Сообщений: 35
11.06.2013, 13:08  [ТС] #14
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
DVGU.MAKC, Мил человек. Код делает то, что хотите вы, а не то, что хочет код. Добавили cout - стал выводить результаты работы на консоль. Не добавили - не стал.
Все догнал, и не надо писать в основах не разобрался, лезет в оптимизацию - пошло же до меня, логика смекалка и все будет, вот что у меня получилось:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int main()
{
    int a[10000];
    int res = 1;
 for (int i = 0; i < 10000; i+=3)
{
 res *= a[i];
 res *= a[i+1];
 res *= a[i+2];
 cout<<"a="<<i<<endl;
}
    system("PAUSE");
    return 0; 
}
0
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
11.06.2013, 13:10 #15
DVGU.MAKC, B и что у вас получилось?) вывели номера элементов массива? А для чего тогда вычислять произведение? может и его выведете (после цикла только).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2013, 13:10
Привет! Вот еще темы с ответами:

РАзвертка и юнити - Unity, Unity3D
Сделал в Blender Модель помещения ,запек текстуры(развертка),модель экспортирую в FBX далее импортирую в юнити модель как префаб кидаю на...

Развертка геосферы - 3D моделирование
Посоветуйте где можно найти формулы Есть прямоугольная карта мира и геосфера из равных треугольников задача - определить цвет вершины...

Текстурная развертка - DirectX
Уважаемые, простите за тупой вопрос, но никак не мог нигде найти на него ответ. У меня имеется 3d объект (оружие) и имеется для него...

Кадровая развертка - Free Pascal
В листинге программы встретил такую запись : while (port and 8) = 0 do; {ожидаем обратный ход луча кадровой развертки} Что она...


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

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

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