|
1 / 1 / 0
Регистрация: 18.01.2011
Сообщений: 83
|
|||||||||||
Целесообразность использования цикла.18.10.2011, 01:43. Показов 2964. Ответов 22
Метки нет (Все метки)
Этот момент в универе нам не объясняли. Хочу сразу сказать, я знаю зачем, как и когда используются циклы. Собственно возник не большой спор. Какое преимущество будет иметь код
0
|
|||||||||||
| 18.10.2011, 01:43 | |
|
Ответы с готовыми решениями:
22
Отсортированные по порядку случайно выбранные номера (целесообразность использования random_shuffle в задании) Шейкерная сортировка без использования while цикла
|
|
33 / 27 / 2
Регистрация: 08.09.2010
Сообщений: 402
|
|
| 18.10.2011, 03:59 | |
|
1) сокращается текст программы
2) в больших программах i может быть больше чем 10, к примеру 100, и тогда будет уже затруднительно писать 100 раз одно и тоже (просто надоест)
0
|
|
|
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 19
|
||||||
| 18.10.2011, 04:19 | ||||||
|
Цикл можно расписать как
0
|
||||||
|
Заблокирован
|
|
| 18.10.2011, 08:30 | |
|
ZaxarPal, однозначно, что первый вариант даёт бонус на этапе написания исходного кода.
А дальше нужно смотреть во что скомпилируются оба варианта. Вполне возможно, что первый вариант после компиляции примет такой же вид, как и второй. Тогда можно будит сказать, что второй вариант не даёт никаких бонусов.
0
|
|
|
1 / 1 / 0
Регистрация: 18.01.2011
Сообщений: 83
|
|
| 18.10.2011, 08:59 [ТС] | |
|
Вопрос в том, будет ли преимущество по использованию ресурсов системы программой с циклом перед программой без. Т.е. меньше операций процессора, меньше использования оперативки и т.д.
0
|
|
|
Заблокирован
|
|||
| 18.10.2011, 09:10 | |||
|
После его оптимизаций, вполне возможно что конечный код вообще изменится до неузнаваемости.
1
|
|||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 18.10.2011, 10:51 | |
|
Оптимизирующие компиляторы умеют разворачивать даже "длинные" циклы. В данном случае важно, какие операции выполняются в блоке <действие>. Т.е. если там очень сложные вычисления, то экономия одного if на итерацию ничего не даст. Если же сложность действия сопоставима со сложностью условия, то компилятор может принять решение о необходимости развернуть цикл.
В большинстве случаев лапша быстрее цикла. Во многих случаях это преимущество несущественно.
1
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||
| 18.10.2011, 10:59 | ||
|
2. Цикл компактнее в коде. А что компактнее в коде, то может быстрее исполняться. 3. В цикле можно быстро поменять число повторов, в том числе, с клавиатуры, или по результатам других операций. Но циклы не всегда целесообразны. Иногда приходится вручную повторять текст тела цикла вместо написания самого цикла и именно ради быстрого исполнения.
0
|
||
| 18.10.2011, 11:07 | |
|
1
|
|
|
|
|
| 18.10.2011, 11:10 | |
|
ZaxarPal, смотря для чего это вам. Например, при программной реализации симметричных шифров стараются избегать циклы раундовых преобразований. Вместо for(...) a[i] так и пишут a[0], a[1]... Снимется зависимость от оптимизации компилятора и код работает быстрее.
0
|
|
|
58 / 58 / 6
Регистрация: 10.07.2011
Сообщений: 229
|
||
| 18.10.2011, 11:17 | ||
|
Приходилось заменять цикл строками для экономии времени исполнения.
0
|
||
|
Higher
|
|||||||
| 18.10.2011, 11:39 | |||||||
|
Насколько я знаю, циклы реализовываются примерно так:
Приведите пример, при котором будет хоть как-то чувствоваться улучшение быстродействия, если цикл заменить на последовательность действий. Может, такой и существует, самому интересно. И это уже не говоря о том, что далеко не всегда можно заменить цикл(рекурсия не в счет, она еще менее эффективна).
1
|
|||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|||
| 18.10.2011, 11:51 | |||
|
Если в цикле сложное условие, то предиктор может часто ошибаться и производительность никакущая будет. Последовательный код всегда быстрее кода с ветвлениями, без вариантов.
1
|
|||
|
Higher
|
|||
| 18.10.2011, 12:04 | |||
|
0
|
|||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|||
| 18.10.2011, 12:17 | |||
|
Выполняется 10 итераций с выполнением неизвестного объёма кода. Так что тут вообще говорить не о чем, только пространные предположения.) Допустим, речь о инициализации массива из 10 элементов. цикл удобнее, но последовательное присваивание эффективнее. В относительных величинах - намного эффективнее. В абсолютных - несколько тактов процессора. Добавлено через 2 минуты
1
|
|||
|
Higher
|
|||||||||
| 18.10.2011, 12:34 | |||||||||
1
|
|||||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 18.10.2011, 12:39 | ||
|
Добавлено через 1 минуту С другой стороны, пока не залезешь в ассемблерный листинг не поймёшь, развернул он цикл или нет. С ещё более другой стороны, если он цикл не развернул, то, вероятно, такой потребности не возникло.)
1
|
||
|
Заблокирован
|
||
| 18.10.2011, 12:46 | ||
|
Если от "разворачивания" цикла будит ощутимый профит, неужели компилятор сам не догадается это сделать? Одно дело оптимизировать принцип хранения данных (дата-ориентированное программирование) Другое дело оптимизировать алгоритмы в узких местах. И третье - пытаться ручками оптимизировать исходный код. Можно сделать так: int a=10; int b=a; int c=b; //типа в три действия можно сделать так: int a=10; int c=a; //типа в два действия Но будит наивным полагать, что исходник с тремя действиями будит выполняться дольше. Скорее всего компилятор выбросит промежуточную переменную. А может и все три переменные выбросит, если они так больше нигде и не будут использованы.
1
|
||
|
1 / 1 / 0
Регистрация: 18.01.2011
Сообщений: 83
|
|
| 18.10.2011, 13:38 [ТС] | |
|
Вопрос был больше таки в том, как будет работать скомпилированная программа. Большинство непонятных мне моментов Deviaphan разъяснил. Спасибо.
0
|
|
| 18.10.2011, 13:38 | |
|
Помогаю со студенческими работами здесь
20
Вывод массива без использования цикла на C(pure))
Ознакомиться с операторами цикла их видами и правилами их использования
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|