Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.36.141] |
|
Страницы: (32) « Первая ... 13 14 [15] 16 17 ... 31 32 ( Перейти к последнему сообщению ) |
Сообщ.
#211
,
|
|
|
а еще можно про указатели вспомнить
|
Сообщ.
#212
,
|
|
|
Там не выход, там вход Цитата Ну так достаточно весь этот код вынести из main в отдельную процедуру и использовать return. Покажи. Цитата В goto-версии циклы начинаются с нуля. Если вдруг при чтении файла что-то пойдёт не так и загрузятся неправильные значения счётчиков (ниже нуля), то получим баг. Это задача функции restore. Допустим, она по контракту гарантирует, что все счетчики будут корректными. Добавлено Тем, что там этот переход никак не сказывается на логике. |
Сообщ.
#213
,
|
|
|
Прикольно Но от goto практически не отличается. |
Сообщ.
#214
,
|
|
|
Цитата OpenGL @ Но от goto практически не отличается. Да абсолютно тоже самое. Только выглядит пугающе. Зато "без goto" Добавлено Я думаю, ты видел машину Даффа, стейтмашины на этом деле и бесстековые сопрограммы(например, в boost/asio/coroutine.hpp). |
Сообщ.
#215
,
|
|
|
Цитата D_KEY @ Там не выход, там вход Это задача функции restore. Допустим, она по контракту гарантирует, что все счетчики будут корректными. Да, поспешил. void foo() { int i, j, k; if !restore(&i, &j, &k) { i = 0; j = 0; k = 0; } for(; i < 10; i++, j = 0) for(; j < 10; j++, k = 0) for(; k < 10; k++) if !dowork(i, j, k) { save(i, j, k); return; } } |
Сообщ.
#216
,
|
|
|
Неплохо. Уже почти дошло до goto по читабельности Только циклы не от нуля надо начинать.
|
Сообщ.
#217
,
|
|
|
Цитата OpenGL @ Неплохо. Уже почти дошло до goto по читабельности Только циклы не от нуля надо начинать. Они и не от нуля начинаются. Обнуление нижестоящего счётчика происходит только после прохождения им этапа от некоего загруженного значения до максимального при изменении вышестоящего счётчика. |
Сообщ.
#218
,
|
|
|
Цитата korvin @ Обнуление нижестоящего счётчика происходит только после прохождения им этапа от некоего загруженного значения до максимального при изменении вышестоящего счётчика. Я как раз о том, что там не обнуление нужно, а что-то такое: for(; i < 10; i++, j = i) for(; j < 10; j++, k = j) |
Сообщ.
#219
,
|
|
|
Цитата OpenGL @ Я как раз о том, что там не обнуление нужно, а что-то такое: Вообще-то как раз не нужно, нужно именно обнуление. Я понимаю, что тот код с goto понять не просто, но ты постарайся. =) Там суть в том, что мы попадаем в произвольное место «трёхмерного» цикла. Т.е. тот код создаёт последовательность [0,0,0],[0,0,1],[0,0,2]...[0,1,0],[0,1,1],[0,1,2]...[0,2,0],[0,2,1],[0,2,2]... И мы попадаем в произвольное место, например в [2,3,4], цикл по k один раз проходит [4..9] и при всех следующих итерациях j начинается с нуля [0..9], как обычно, а не с загруженного значения 4. Так же и цикл по j, один раз проходит [3..9], а потом постоянно [0..9]. |
Сообщ.
#220
,
|
|
|
Почему обнуление? В том коде i <= j <= k. У тебя же это не выполняется.
|
Сообщ.
#221
,
|
|
|
Цитата OpenGL @ Почему обнуление? В том коде i <= j <= k. У тебя же это не выполняется. Да нет же. Там происходит обнуление k при каждой итерации по j и обнуление j при каждой итерации по i. Просто с помощью goto мы попадаем в некое состояние [i,j,k] = [2,3,4] например. Выполняется тело цикла по k до 9, происходит итерация j и k обнуляется. |
Сообщ.
#222
,
|
|
|
Где тут обнуление? |
Сообщ.
#223
,
|
|
|
Цитата OpenGL @ Где тут обнуление? Что-то я сегодня вообще невнимателен (видимо из-за простуды). Показалось, что там циклы с нуля начинаются. |
Сообщ.
#224
,
|
|
|
Цитата OpenGL @ Цитата korvin @ Обнуление нижестоящего счётчика происходит только после прохождения им этапа от некоего загруженного значения до максимального при изменении вышестоящего счётчика. Я как раз о том, что там не обнуление нужно, а что-то такое: for(; i < 10; i++, j = i) for(; j < 10; j++, k = j) Чем это отличается от моего второго варианта? int i = 0, j = 0, k = 0; restore(&i, &j, &k); for(; i < 10; ++i, j = i, k = j) { for (; j < 10; ++j, k = j) { for(; k < 10; ++k) { // ... } } } |
Сообщ.
#225
,
|
|
|
Объясните, почему после 0,3,3 идёт 1,2,2?
|