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

Как по-русски обозвать целиком эту конструкцию? - C++

Восстановить пароль Регистрация
 
 
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.05.2012, 13:37     Как по-русски обозвать целиком эту конструкцию? #1
Ту что в круглых скобках в операторе for?
C++
1
2
3
4
for (i=0; i<n; ++i)
{
 cout<<i;
}
В фигурных скобках - тело, вся первая строка - заголовок. А то, что в круглых скобках целиком, но без самого оператора for? Я циклом пользоваться умею, мне нужна только формулировка, как он пишется.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.05.2012, 18:53  [ТС]     Как по-русски обозвать целиком эту конструкцию? #21
Совсем уж направление цикла он не меняет, а замена сравнения с числом на вычитание с последующим сравнением с нолём - это тормоза, возвращающиеся через окно. Так что речь не о том, что его надо перехитрить, а о том, что можно вручную облегчить ему задачу. А он иногда и может соптимизировать до сравнения с нолём циклы вида
C++
1
for (i=N; i>=1; --i)
, так не особо и важно, кто заменит i>=1 на i>0, сама же оптимизация та же.

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
от это весь код, который описывает реализацию факториала с инкрементом
; *Компилятору хватило мозгов всё вычислить в compile-tme
; *Всего дона операция - помещение результата в регистр EAX
Ну и ну! Всё посчитать на этапе компиляции? Ты серьёзно? А если
C++
1
2
cin>>n;
cout<<factorial(n);
? Лепим таблицу? Не всегда это разумно.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.05.2012, 18:56     Как по-русски обозвать целиком эту конструкцию? #22
Цитата Сообщение от taras atavin Посмотреть сообщение
А он иногда и может соптимизировать до сравнения с нолём циклы вида
Ты прочитал, что я пометил в *****************?
Вариант с инкрементом компилятор САМОСТОЯТЕЛЬНО высчитал в процессе компиляции и просто вписал в код результат. Цикл заменился на помещение в регистр константы. Всё! Оптимальнее некуда.


Цитата Сообщение от taras atavin Посмотреть сообщение
кто заменит i>=1 на i>0, сама же оптимизация та же
Тогда уж давай удалим лишний цикл и напишем цифру 2.)

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
Всё посчитать на этапе компиляции?
Я привёл для конкретного примера со статическим заданием числа. Этот пример разбил твоё утверждение о том, что декремент эффективнее.
С неизвестным числом код не столь красивый, не спорю.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.05.2012, 18:58  [ТС]     Как по-русски обозвать целиком эту конструкцию? #23
Цитата Сообщение от Deviaphan Посмотреть сообщение
Ты прочитал, что я пометил в *****************?
Вариант с инкрементом компилятор САМОСТОЯТЕЛЬНО высчитал в процессе компиляции и просто вписал в код результат. Цикл заменился на помещение в регистр константы. Всё! Оптимальнее некуда.
Когда аргумент один и известен на этапе компиляции, то функция не нужна вовсе, можно заранее почитать и вручную подставить готовое значение. А если сам аргумент получаем в рантайме? Так что читать не умеешь ты.

Добавлено через 1 минуту
Цитата Сообщение от Deviaphan Посмотреть сообщение
Тогда уж давай удалим лишний цикл и напишем цифру 2.)
Кто сказал, что именно 2? И почему он вдруг лишний?

Добавлено через 52 секунды
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я привёл для конкретного примера со статическим заданием числа. Этот пример разбил твоё утверждение о том, что декремент эффективнее.
С неизвестным числом код не столь красивый, не спорю.
Этот пример не имеет смысла, так как функции для этого вообще не предназначены. Функция нужна, когда её параметры заранее не известны, а тогда её нельзя свести к константе.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.05.2012, 19:01     Как по-русски обозвать целиком эту конструкцию? #24
Цитата Сообщение от taras atavin Посмотреть сообщение
Кто сказал, что именно 2? И почему он вдруг лишний?
Это сказали законы математики. Умножать на 1 не рационально.

Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Этот пример не имеет смысла, так как функции для этого вообще не предназначены.
Ну ка поясни, что в примере не так? И как сделать, чтобы в нём был смысл?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.05.2012, 19:05  [ТС]     Как по-русски обозвать целиком эту конструкцию? #25
Цитата Сообщение от Deviaphan Посмотреть сообщение
Это сказали законы математики. Умножать на 1 не рационально.
Ты про факториал двойки что ли?
C++
1
2
3
4
for (/*начальное n==10*/; n>0; --n)
{
 r*=n;
}
на самом деле r==3628800, заменяем на 2 и получаем 2. Умножение на 1 и на все числа от 1 до 10 - далеко не одно и то же. Почему ты думаешь, что все циклы лишние? Из математики это не следует.

Добавлено через 1 минуту
Цитата Сообщение от Deviaphan Посмотреть сообщение
Ну ка поясни, что в примере не так? И как сделать, чтобы в нём был смысл?
То, что ты заменил функцию переменной функцией константы, которая сама есть константа. Из-за одного значения функции не пишут.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.05.2012, 19:07     Как по-русски обозвать целиком эту конструкцию? #26
Цитата Сообщение от taras atavin Посмотреть сообщение
Почему ты думаешь, что все циклы лишние?
Не правильно выразился. Одна итерация лишняя, а не один цикл. Условие n > 0 и n > 1 равнозначны в контексте этого алгоритма.

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
заменил функцию переменной функцией константы, которая сама есть константа.
Это какая-то мантра, да? Я что-то совсем после слова "заменил" больше ничего не понял.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.05.2012, 19:26  [ТС]     Как по-русски обозвать целиком эту конструкцию? #27
Цитата Сообщение от Deviaphan Посмотреть сообщение
Не правильно выразился. Одна итерация лишняя, а не один цикл. Условие n > 0 и n > 1 равнозначны в контексте этого алгоритма.
Ну вообще то я всегда факториал пишу
C++
1
2
3
4
5
6
r=1;
for (i=2; i<=x; ++i)
{
 r*=i;
}
return r;
. Но во-первых факториал был приведён, как пример цикла, перебирающего не массив. С этим спорить не будешь? Если перебирать все значения, то лучше сранивать с нолём, но может быть лучше сократить число итераций. Что получаем? Получаем на одно сравнение меньше, на один декремент меньше, на один переход меньше и на одно умножение меньше. Минус 4 операции. Но на каждой оставшейся итерации одна операция медленнее. Я не заморачиваюсь сравнением, где больше экономия времени. Да и у факториала цикл всегда с малым числом итераций. Было бы их много, лучше один раз умножить на 1. А так не знаю и выяснять не пытаюсь, так как смысла в этом не много. Тесты, кстати, не зря придуманы. Но занимается ли ими компилятор? Сомневаюсь. И я ведь не спроста упомянул, что предел цикла может совпадать с параметром и у других функций. Для некоторых из них и последняя итерация может иметь смысл, а само число итераций измеряться миллиардами и даже триллионами. Просто чтоб не искать и не сочинять настоящую функцию была взята другая с одним совпадающим свойством. А ты зачем то подменяешь неизвестный параметр константой и мухлюешь с прямым присваиванием ответа.
Цитата Сообщение от Deviaphan Посмотреть сообщение
Это какая-то мантра, да? Я что-то совсем после слова "заменил" больше ничего не понял.
У тебя здравый смысл остался? Или только водка? Функция от константы есть константа и считать её не надо. В одном проекте был вообще цикл перебора порядка аппроксимации. Один из пределов был равен единице, но я сейчас не скажу направление цикла.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.05.2012, 19:27     Как по-русски обозвать целиком эту конструкцию? #28
Цитата Сообщение от taras atavin Посмотреть сообщение
Но занимается ли ими компилятор? Сомневаюсь.
Зря сомневаешься. Занимается. Называется это PGO.


Цитата Сообщение от taras atavin Посмотреть сообщение
Но на каждой оставшейся итерации одна операция медленнее.
Негоодяй. Такой кайф мне обломал. Я уже хотел начать тебя троллить, что заменив 0 на 1 на каждой итерации цикла будет выполняться на одну операцию больше, а ты взял и обломал меня. Я плакать.


Цитата Сообщение от taras atavin Посмотреть сообщение
и мухлюешь с прямым присваиванием ответа.
Это не я. Он сам.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2012, 19:31     Как по-русски обозвать целиком эту конструкцию?
Еще ссылки по теме:

C++ упростить конструкцию
C++ Как избежать такую конструкцию?
C++ Как это читается по-русски

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
23.05.2012, 19:31     Как по-русски обозвать целиком эту конструкцию? #29
Настройки цикла.
Yandex
Объявления
23.05.2012, 19:31     Как по-русски обозвать целиком эту конструкцию?
Ответ Создать тему
Опции темы

Текущее время: 16:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru