Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.236.86.184] |
|
Страницы: (12) 1 2 [3] 4 5 ... 11 12 все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
В изначальном примере от Qraizer'а состояние сохранялось в файл, а при повторном запуске программы — восстанавливалось. Предлагаешь в качестве «восстановления» прокручивать циклы в холостую с самого начала, пока он не дойдёт до нужных значений счётчиков? |
Сообщ.
#32
,
|
|
|
Цитата korvin @ В изначальном примере от Qraizer'а состояние сохранялось в файл, а при повторном запуске программы — восстанавливалось. Предлагаешь в качестве «восстановления» прокручивать циклы в холостую с самого начала, пока он не дойдёт до нужных значений счётчиков? Состояние переменных не обязательно спасать, если они не портятся. Переменные-счётчики циклов (да и все остальные, какие нужно) нигде не портятся независимо от их расположения. Например, в стеке. А если они не портятся то и восстановления не требуют. Циклы прокручивать не нужно, поскольку вызов процедуры происходит внутри них |
Сообщ.
#33
,
|
|
|
Цитата ЫукпШ @ Состояние переменных не обязательно спасать, если они не портятся. В смысле «не портятся»? Программа завершилась. Всё. Память перетёрлась другим процессом. Цитата ЫукпШ @ Переменные-счётчики циклов (да и все остальные, какие нужно) нигде не портятся независимо от их расположения. Например, в стеке. Ещё раз: программа завершила работу. На середине цикла. Штатно. Так задумано. Нужно сохранить счётчики в файл и при следующем запуске — восстановить. |
Сообщ.
#34
,
|
|
|
ЫукпШ, можно по-разному. Только в понятности алгоритма, скорости его кодирования, скорости исполнения и простоте отладки goto даст фору на все четыре пункта вперёд.
Добавлено Поймите, любой костыль будет тратить больше ресурсов. Нарисуйте блок-схему любого алгоритма «делать что-то долго, поэтому предусмотреть возможность стать на паузу с сохранением состояния и продолжить позже» и внезапно увидите стрелку вовнутрь. Алгоритм исходно неструктурен. Любые попытки его структурировать сделают его хуже. Добавлено Цитата ЫукпШ @ Он дурак. Мало знать возможности своего инструмента, нужно их понимать. Любой аспект может быть в разных ситуациях как положительным, так и отрицательным фактором. Сам по себе goto не есть зло. Злом является его использование не к месту. Это справедливо для любого аспекта языка. Любого языка. Или ты думаешь, что классы в Плюсах только для ООП? А шаблоны только для параметризации типов? Я так думал 20 лет назад. Ещё я думал, что знаю C++. И думал я так не первый раз. И не последний, впрочем. А потом мне попалась книжка Александреску. От одного специалиста мне достались для работы некие важные исходные тексты. Он использовал С компилятор как ассемблер и goto - его любимый оператор. Надо ли продолжать описание ситуации ? =:0 |
Сообщ.
#35
,
|
|
|
Было же уже. Не помню только, в холиварах или в C/C++.
|
Сообщ.
#36
,
|
|
|
Цитата D_KEY @ Было же уже. Не помню только, в холиварах или в C/C++. Об этом и написано в первом сообщении: “Некоторое время назад эта тема затрагивалась вскользь.” Да, был пример от Qraizer’а |
Сообщ.
#37
,
|
|
|
Цитата korvin @ Об этом и написано в первом сообщении Ну так тут вроде ничего нового не появилось особо. |
Сообщ.
#38
,
|
|
|
Цитата D_KEY @ Ну так тут вроде ничего нового не появилось особо. Да нет - появилось! А именно ИМХО очень правильное высказывание Qraizer'а: Цитата Сам по себе goto не есть зло. Злом является его использование не к месту. Это справедливо для любого аспекта языка. Любого языка. Простой пример - программирование "автоматной логики". Это когда ваш алгоритм не расписывается "деревом", а расписывается "сетью". И приходится на части вычислений "впрыгивать" в какие-то ранее обозначенные конструкции. Определенные "профессионалы" сразу заявят - "говнокод - разноси по функциям". Они просто не помнят уже цену операторов помещения и извлечения из стека. Ну што сказать - поколение Пепси Вот тут и подойдет прекрасный оператор GOTO, который может гонять алгоритм по неизведанным путям. Спешал фор Киля! Я знаю твою лютую, можно сказать - бешенную ненависть к прекрасному оператору GOTO. Специально для тебя лучшие умы Сколково уже давно придумали "case-switch" подход. На языке программирования Цэ это будет примерно так: // ... int mode = init_value; while(1+1) Х switch (mode) { case 1: ( // if, run, modify mode, continue/break } case 2: ( // if, run, modify mode, continue/break } // ... case 'N': ( // if, run, modify mode, continue/break } default: break; } } //... ADD: сорян - изначально забыл все это хозяйство завернуть в бесконечный цикл! Просто забыл... Хотя ... по-сути, это просто "сахаро-заменитель", замещяющий использование прекрасного императора GOTO Что имеем по факту! |
Сообщ.
#39
,
|
|
|
Цитата Majestio @ Цитата D_KEY @ Ну так тут вроде ничего нового не появилось особо. Да нет - появилось! А именно ИМХО очень правильное высказывание Qraizer'а Могу ошибаться, но он и в прошлый раз что-то такое говорил |
Сообщ.
#40
,
|
|
|
Возможно. Повторение - мать учения, могу ошибаться
|
Сообщ.
#41
,
|
|
|
Цитата Majestio @ Вот тут и подойдет прекрасный оператор GOTO Отвратительный оператор в 99.9999% случаев. Но иногда может и стоит его использовать. Но нужно крепко подумать. А потом еще раз. Даже в этом кейсе с сохранением, как мне кажется, вполне и без него ок. |
Сообщ.
#42
,
|
|
|
Цитата D_KEY @ Отвратительный оператор Для программистов-дауншифтеров - самое то!!! |
Сообщ.
#43
,
|
|
|
Цитата D_KEY @ Конечно можно. Но вот насчёт ок... Приведу свой же структурный код ещё раз, несколько упростив детали:Даже в этом кейсе с сохранением, как мне кажется, вполне и без него ок. int i, j, k, l; int i0 = 0, j0 =i0, k0 =j0, l0 =k0; if (needRestore()) { bool ok = restoring(i0, j0, k0, l0); if (ok) std::cout << "The saved state is successfully restored." << std::endl; else return std::cerr << "The saved state restoring error. State file is wrong." << std::endl, 1; } for (i=i0; i<10;) { for (j=j0; j<10;) { for (k=k0; k<10;) { for (l=l0; l<10; ++l) { if (needSave()) { bool ok = saving(i0, j0, k0, l0); if (!ok) return std::cerr << "The state saving error." << std::endl, 1; return std::cout << "The state successfully saved." << std::endl, 2; } /* ... */ std::cout << "i = " << i << ", j = " << j << ", k = " << k << ", l = " << l << std::endl; Sleep(1); } l0 = ++k; } l0 = k0 = ++j; } l0 = k0 = j0 = ++i; } Добавлено Любой алгоритм может быть представлен в структурной форме. Это доказанная (?) теорема. Другое дело, а всегда ли надо. Я утверждаю, что нет, хотя и в крайне редких случаях. Добавлено P.S. Для меня лично эти вопросы тривиальны. Код с goto был проаппрувлен через три секунды после появления идеи о нём в голове. И реализован за минуту. И сразу работал, без отладки. И понятен (??) любому, кто его увидел. В сухом остатке мне как-то коллинеарно на эмоции, которые этот код у кого может вызвать. Кому не нравится если, волен писать стек лямбд, абстрактный объект, машину состояний и вообще всё что его душе угодно. Совсем уж чтоб: исключения диссонанса не вызывают? Куда уж ещё более неструктурно-то... |
Сообщ.
#44
,
|
|
|
Цитата Qraizer @ В сухом остатке мне как-то коллинеарно на эмоции, которые этот код у кого может вызвать. Кому не нравится если, волен писать стек лямбд, абстрактный объект, машину состояний и вообще всё что его душе угодно Ну будешь в одной команде с кем-то, будете холиварить. И думаю, что каждый человек, который будет видеть этот код с goto, будет задавать вопросы. Так что тут все зависит от того, с кем ты работаешь и какие правила есть в команде/организации |
Сообщ.
#45
,
|
|
|
Цитата D_KEY @ Ну будешь в одной команде с кем-то, будете холиварить. И думаю, что каждый человек, который будет видеть этот код с goto, будет задавать вопросы. Так что тут все зависит от того, с кем ты работаешь и какие правила есть в команде/организации Как обычно, ответ не по существу и ни о чём. Пять баллов! ) |