Как правильно написать цикл for для обратного отсчета?
- Войдите на сайт для отправки комментариев
Вс, 13/11/2016 - 23:05
for(i = 0; i <= 6; i++)
Помогите, пожалуйста, как правильно записать цикл for чтобы он отсчитывал от числа, которое будет получено в процессе исполнения кода ( в данном примере вместо цифры 6)?
Спасибо!
Объявить переменную, которой присваивать значение по ходу выполнения программы. Потом в цикле for вместо числа писать имя переменной.
Вот я подсчитал число нажатий на кнопку (назовем clicks), далее я нажимаю на другую кнопку и начинается обратный отсчет for( clicks; clicks=0, clicks--), так? У меня не запускается..
И как запрограммировать, чтобы один раз до нуля дошел и остановился?
Вот я подсчитал число нажатий на кнопку (назовем clicks), далее я нажимаю на другую кнопку и начинается обратный отсчет for( clicks; clicks=0, clicks--), так? У меня не запускается..
Нет, не так. Я выше привёл пример.
И как запрограммировать, чтобы один раз до нуля дошел и остановился?
Цикл автоматически завершается после того, как логическое значение условия становится ложным.
Вчитался, но чтобы, допустим, от 6 до 0 отсчитывало и останавливалось, как надо записать for(int i=o; i<=6; 6--)?
Без разницы, как считать: от 0 до 6 или от 6 до 0. Цикл будет выполняться одинаково.
for (int i=0; i < 6; i++) {}
for (int i=6; i > 0; i--) {}
Обратите внимание, что при i <= 6 цикл выполнится 7 раз, а не 6. Чтобы выполнился 6 раз, надо i < 6 или i <= 5
.... 6--
Как Вы себе это представляете? Шестёрка уменьшится на 1 и станет пятёркой?
Это сильно, конечно, - конструкция для настоящих мужчин, но в этом языке так в лоб не делается. Язык-то большей частью для девочек :)
Если у Вас есть переменная вне цыкла For и Вы ее хотите использовать в качестве агрумета в For то ее и создавать не нужно просто оставляете пустым. 02 Логичнее же ( в плане читаемости скетча ) использовать цыкл While, хотя результат у них один и тот же
Дабы не плодить тем, напишу тут.
Читаю Харви и Пола Дейтел "Как программировать на С". Все примеры они пишут типа :
Почему именно так: <=SIZE-1? А то я всю дорогу пишу <SIZE, но уже , блин, не один раз обжегся на том, что вроде бы очевидные для меня вещи на самом деле оказываются не тем, что я о них представлял. :)
Дабы не плодить тем, напишу тут.
Читаю Харви и Пола Дейтел "Как программировать на С". Все примеры они пишут типа :
Почему именно так: <=SIZE-1? А то я всю дорогу пишу <SIZE, но уже , блин, не один раз обжегся на том, что вроде бы очевидные для меня вещи на самом деле оказываются не тем, что я о них представлял. :)
Разницы между
и
Нет никакой, дело вкуса, бо для нормального современного оптимизатора машинный код этих двух конструкций будет идентичен.
Нет никакой, дело вкуса, бо для нормального современного оптимизатора машинный код этих двух конструкций будет идентичен.
Ок, спасибо за ответ. Я это и предполагал, но подумалось, а вдруг есть какие-то подводные камни в этом исскустве тыкать пальцАми в клавиатуру. :)
Если вы ловите подводные камни,то
Если вы ловите подводные камни,то
И? Где камни-то?
Ну, может человеку нравится для красоты использовать двухсимвольные операции сравнения : == , <= , >=
Разница действительно есть, и при определённых условиях она может проявиться.
Это пережиток С’онизма, а именно – одна из жоп оператора #define, за что его страшно не любят тру плюс-плюс-оиды и прочие сторонники «систематического» и «безошибочного» программирования к коим, по всей видимости, относятся и авторы книги.
Смотрите, допустим, мы используем #define для того, чтобы задать количество неких объектов. По смыслу задачи таковых объектов у нас не может быть больше, чем 256. Ну, а поскольку нумеруем мы их, как все нормальные люди, с нулевого, то при переборе всех объектов, для индекса можем выбрать переменную типа uint8_t.
Тогда конструкция
будет нормально работать для любого количества объектов, кроме 256, т.е. наша i всегда заведомо меньше, чем 256.
А конструкция
Будет работать и при 256 тоже.
Почему я говорю, о «жопе #define»? Если бы вместо #define использовали бы типизированную константу, проблем бы не было.
for(int i = 0; i<=SIZE-1; i++){........}//<-- обратите на int
Вы имеете ввиду, что с точки зрения оптимизации и переносимости стоит писать
Почему я говорю, о «жопе #define»? Если бы вместо #define использовали бы типизированную константу, проблем бы не было.
Мне идея с переходом тоже в голову пришла, и я не бездействовал, а сразу нажал на капу... попробовал на этом и успокоился - в обоих случаях мотает без остановки:
Какой пример правильный для наблюдения правильного поведения?
UPD
Но компилятор действительно бормочет:
Разница действительно есть
Ну вы же понимаете, что дурак может и стеклянный хрен сломать, правда? Да и компиляторы нынче умные - и сразу расскажут, кто тут олень и почему переполнение или сравнение знакового с беззнаковым юзается. Правда вот, что по умолчанию в настройках IDE эти предупреждения "заботливо" отключены...
И
Так во втором коде памяти расходуется меньше, разумеется оперативной. А так же второй код идет без инкапсуляции. :) хотя вроде переменная и присутсвует.
И
Так во втором коде памяти расходуется меньше, разумеется оперативной. А так же второй код идет без инкапсуляции. :) хотя вроде переменная и присутсвует.
Винни, выдыхай - речь шла не о том, где объявлена переменная цикла, а об условии сравнения - перечитай внимательно стартовый пост на эту тему ;)
Винни докурил главу про классы и перешел на другое...
Короче - #define может как помочь, так и сделать великое, ужасное, чудовищное зло. Так же, как кухонный ножик - им можно резать салатик, а можно - соседа Васю за его пение невпопад, а в особенности за то, что эта сволочь сфальшивила, и вместо Си второй октавы спела Си-бемоль.
Винни, выдыхай - речь шла не о том, где объявлена переменная цикла, а об условии сравнения - перечитай внимательно стартовый пост на эту тему ;)
Да любые нюансы интересны! ;)
во втором коде памяти расходуется меньше, разумеется оперативной. А так же второй код идет без инкапсуляции. :) хотя вроде переменная и присутсвует.
За счет более короткого периода жизни i, если она объявлена внутри цикла?
Именно, т.к. в этом случае область видимости переменной ограничена телом цикла, и при выходе из цикла она того - тю-тю.
DIYMan, если вы об этом.
for(i = 0; i <= 6; i++)
Помогите, пожалуйста, как правильно записать цикл for чтобы он отсчитывал от числа, которое будет получено в процессе исполнения кода ( в данном примере вместо цифры 6)?
Спасибо!
DIYMan, если вы об этом.
for(i = 0; i <= 6; i++)
Помогите, пожалуйста, как правильно записать цикл for чтобы он отсчитывал от числа, которое будет получено в процессе исполнения кода ( в данном примере вместо цифры 6)?
Спасибо!
Винни, не кури сегодня больше - это просто абстрактный пример, из книжки. Ничего там не потеряно, т.к. объявлено на предыдущей странице книжки, всё норм, не волнуйся - мы никого не потеряли. Вопрос был не про это ;) К тому же - ты процитировал не то сообщение, интересующее нас начало - в сообщении номер 9.
Именно, т.к. в этом случае область видимости переменной ограничена телом цикла, и при выходе из цикла она того - тю-тю.
Ох и безграмотные эти чувачки, братья Дейтел :))
А если переменные инициализировать в каждом блоке - они не износятся раньше времени? А то я переживаю...
Почитайте про основной капитал и оборотный капитал.
Ох и безграмотные эти чувачки, братья Дейтел :))
Я в своё время читал трупа страуса и Майерса, Кента Бека ещё, про экстремальное программирование - зашла книжка, Герба Саттера, ну и, конечно, Герберта Шилдта. Братья Дейтелы как-то обошли меня стороной :)
Почитайте про основной капитал и оборотный капитал.
Я понял - ему в библиотеке после Кернигана и Ритчи выдали Карла и Маркса.
А братья безграмотные - это верно. Int используют для счета до 10 ;))
А если переменные инициализировать в каждом блоке - они не износятся раньше времени? А то я переживаю...
Истираются, но только с боков, и только - по нечётным дням недели. А в шаббат вообще - каждая третья не инициализируется.
Короче - #define может как помочь, так и сделать великое, ужасное, чудовищное зло. Так же, как кухонный ножик - им можно резать салатик, а можно - соседа Васю за его пение невпопад, а в особенности за то, что эта сволочь сфальшивила, и вместо Си второй октавы спела Си-бемоль.
А какие книги посоветуете для (далее следует очень нелюбимое форумчанами слово) новичка?
А какие книги посоветуете для (далее следует очень нелюбимое форумчанами слово) новичка?
Короче - #define может как помочь, так и сделать великое, ужасное, чудовищное зло. Так же, как кухонный ножик - им можно резать салатик, а можно - соседа Васю за его пение невпопад, а в особенности за то, что эта сволочь сфальшивила, и вместо Си второй октавы спела Си-бемоль.
Не я, соседка Васина. Я просто мимо проходил :)
А какие книги посоветуете для (далее следует очень нелюбимое форумчанами слово) новичка?
трупа страуса и Майерса, Кента Бека ещё, про экстремальное программирование - зашла книжка, Герба Саттера, ну и, конечно, Герберта Шилдта.
Я просто не был уверен что это для начинающих
А если переменные инициализировать в каждом блоке - они не износятся раньше времени? А то я переживаю...
Истираются, но только с боков, и только - по нечётным дням недели. А в шаббат вообще - каждая третья не инициализируется.
Я так понимаю, что где-то далее пойдет речь про подоходный налог с операций присвоения, возврат НДС при операциях вычитания и, возможно, даже церковная десятина нарисуется...
Кстати, Винни забыл про заемный капитал, как основной движитель вперед. Полагаю, что где-то в районе setup() нужно эту операцию проводить и тогда прошивка стартанет гораздо быстрее.
Я так понимаю, что где-то далее пойдет речь про подоходный налог с операций присвоения, возврат НДС при операциях вычитания и, возможно, даже церковная десятина нарисуется...
Щас винни прояснит, я в таких тонких материях не очень :)
Я просто не был уверен что это для начинающих
Не бойтесь - просто начните читать.
Ну про вывод в офшоры я говорить не буду. Конечно основную информацию можно хранить на сервере(мастере), но не жалуйтесь если вы окажетесь колонией(слейв), тогда основные капиталы оперативы будут потрачены на добычу и первичную переработку ресурсов и отправку их метрополии(серверу).
Я просто не был уверен что это для начинающих
Но компилятор действительно бормочет:
Во-во. И цикл становится бесконечным. А в IDE по умолчанию предупреждения подавлены, чтобы не пугать лохов, так что это может стать серьёзной проблемой.
Вы имеете ввиду, что с точки зрения оптимизации и переносимости стоит писать
Мне это кажется паранойей. Я ответил просто типа "забавный теоретический квирк", но не более того. на практике предпочитаю держать в уме какие у меня типы и думать, что пишу. Да и предупреждения компилятора не выключаю - они меня не пугают, а помогают, если где-то лопухнулся.
Ну вы же понимаете, что дурак может и стеклянный хрен сломать, правда?
Да, чего там стеклянный - и стальной не слабо!
по умолчанию в настройках IDE эти предупреждения "заботливо" отключены...
Во-во, для удобства новичков, что компилятор их своими глупостЯми не пужал :)
А если переменные инициализировать в каждом блоке - они не износятся раньше времени? А то я переживаю...
Чтобы не было проблем, необходимо регулярно перечислять денюжку на аммортизацию. Могу счёт подсказать. Вам в вебманях или в пэйпале удобнее?
У больших компьютеров память для программ и память для переменных это одно большое ОЗУ.
Ох не скажите! У самых больших там иногда такие затейливые архитектуры встречаются.