На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL, ALXR
Страницы: (12) « Первая ... 4 5 [6] 7 8 ...  11 12 все  ( Перейти к последнему сообщению )  
> #define ИЛИ template? , C++
   
#define ИЛИ template
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Цитата OpenGL @
    Иными словами - вне зависимости от того, что ты восстановил, ты пойдёшь крутиться в циклах с самого начала

    А, не, вру - не с самого начала. Мои поздравления - переменную i ты восстановил. Осталось восстановить ещё три оставшихся переменных :D

    Добавлено
    Цитата KILLER @
    С чего вдруг?

    ExpandedWrap disabled
          bool          mega_ok = true;
          if (_access("savedstate.dat", 4) == 0)     // Проверить, нет ли сохранённого состояния от предыдущего запуска
          {                                             // Если есть, восстановить и продолжиться
              std::ifstream inFile("savedstate.dat");
              
       
              mega_ok = mega_ok && inFile.read(reinterpret_cast<char*>(&i), sizeof(i)).gcount() == sizeof(i);
              mega_ok = mega_ok && inFile.read(reinterpret_cast<char*>(&j), sizeof(j)).gcount() == sizeof(j);
              mega_ok = mega_ok && inFile.read(reinterpret_cast<char*>(&k), sizeof(k)).gcount() == sizeof(k);
              mega_ok = mega_ok && inFile.read(reinterpret_cast<char*>(&l), sizeof(l)).gcount() == sizeof(l);
              if (mega_ok && (inFile.good() || inFile.eof()))
              {
                  std::cout << "The saved state is successfully restored." << std::endl;
                  //goto resume;
              }
              else return std::cerr << "The saved state restoring error. State file is wrong." << std::endl,
                  1;
          }

    1) До условия mega_ok всегда true.
    2) Мы зашли в условие. Если mega_ok в нём поменялась на false - внутреннее условие у тебя уйдёт в return и до цикла не дойдёт.
    3) Поскольку в других частях кода присваиваний mega_ok нет, то вышеозвученный вывод - что mega_ok всегда true - верен.
    Сообщение отредактировано: OpenGL -
      Цитата OpenGL @
      Как следствие, инициализация счётчиков цикла у тебя всегда будет идти по ветке false, т.е. ровно так, как в исходном цикле, если бы мы зашли в него как обычно. Иными словами - вне зависимости от того, что ты восстановил, ты пойдёшь крутиться в циклах с самого начала :)

      Вот лог - когда для всех счетчиков в файле savedstate.dat записано 3:
      Цитата
      i = 3, j = 3, k = 3, l = 3
      i = 3, j = 3, k = 3, l = 4
      i = 3, j = 3, k = 3, l = 5
      i = 3, j = 3, k = 3, l = 6
      i = 3, j = 3, k = 3, l = 7
      i = 3, j = 3, k = 3, l = 8
      i = 3, j = 3, k = 3, l = 9
      i = 3, j = 3, k = 4, l = 4
      i = 3, j = 3, k = 4, l = 5
      i = 3, j = 3, k = 4, l = 6
      i = 3, j = 3, k = 4, l = 7
      i = 3, j = 3, k = 4, l = 8
      i = 3, j = 3, k = 4, l = 9
      i = 3, j = 3, k = 5, l = 5
      i = 3, j = 3, k = 5, l = 6
      i = 3, j = 3, k = 5, l = 7
      i = 3, j = 3, k = 5, l = 8
      i = 3, j = 3, k = 5, l = 9
      i = 3, j = 3, k = 6, l = 6
      i = 3, j = 3, k = 6, l = 7
      i = 3, j = 3, k = 6, l = 8
      i = 3, j = 3, k = 6, l = 9
      i = 3, j = 3, k = 7, l = 7
      i = 3, j = 3, k = 7, l = 8
      i = 3, j = 3, k = 7, l = 9
      i = 3, j = 3, k = 8, l = 8
      i = 3, j = 3, k = 8, l = 9
      i = 3, j = 3, k = 9, l = 9
      i = 3, j = 4, k = 4, l = 4
      i = 3, j = 4, k = 4, l = 5
      i = 3, j = 4, k = 4, l = 6
      i = 3, j = 4, k = 4, l = 7
      i = 3, j = 4, k = 4, l = 8
      i = 3, j = 4, k = 4, l = 9
      i = 3, j = 4, k = 5, l = 5
      i = 3, j = 4, k = 5, l = 6
      i = 3, j = 4, k = 5, l = 7
      i = 3, j = 4, k = 5, l = 8
      i = 3, j = 4, k = 5, l = 9
      i = 3, j = 4, k = 6, l = 6
      i = 3, j = 4, k = 6, l = 7
      i = 3, j = 4, k = 6, l = 8
      i = 3, j = 4, k = 6, l = 9
      i = 3, j = 4, k = 7, l = 7
      i = 3, j = 4, k = 7, l = 8
      i = 3, j = 4, k = 7, l = 9
      i = 3, j = 4, k = 8, l = 8
      i = 3, j = 4, k = 8, l = 9
      i = 3, j = 4, k = 9, l = 9
      i = 3, j = 5, k = 5, l = 5
      i = 3, j = 5, k = 5, l = 6
      i = 3, j = 5, k = 5, l = 7
      i = 3, j = 5, k = 5, l = 8
      i = 3, j = 5, k = 5, l = 9
      i = 3, j = 5, k = 6, l = 6
      i = 3, j = 5, k = 6, l = 7
      i = 3, j = 5, k = 6, l = 8
      i = 3, j = 5, k = 6, l = 9
      i = 3, j = 5, k = 7, l = 7
      i = 3, j = 5, k = 7, l = 8
      i = 3, j = 5, k = 7, l = 9
      i = 3, j = 5, k = 8, l = 8
      i = 3, j = 5, k = 8, l = 9
      i = 3, j = 5, k = 9, l = 9
      i = 3, j = 6, k = 6, l = 6
      i = 3, j = 6, k = 6, l = 7
      i = 3, j = 6, k = 6, l = 8
      i = 3, j = 6, k = 6, l = 9
      i = 3, j = 6, k = 7, l = 7
      i = 3, j = 6, k = 7, l = 8
      i = 3, j = 6, k = 7, l = 9
      i = 3, j = 6, k = 8, l = 8
      i = 3, j = 6, k = 8, l = 9
      i = 3, j = 6, k = 9, l = 9
      i = 3, j = 7, k = 7, l = 7
      i = 3, j = 7, k = 7, l = 8
      i = 3, j = 7, k = 7, l = 9
      i = 3, j = 7, k = 8, l = 8
      i = 3, j = 7, k = 8, l = 9
      i = 3, j = 7, k = 9, l = 9
      i = 3, j = 8, k = 8, l = 8
      i = 3, j = 8, k = 8, l = 9
      i = 3, j = 8, k = 9, l = 9
      i = 3, j = 9, k = 9, l = 9
      i = 4, j = 4, k = 4, l = 4
      i = 4, j = 4, k = 4, l = 5
      i = 4, j = 4, k = 4, l = 6
      i = 4, j = 4, k = 4, l = 7
      i = 4, j = 4, k = 4, l = 8
      i = 4, j = 4, k = 4, l = 9
      i = 4, j = 4, k = 5, l = 5
      i = 4, j = 4, k = 5, l = 6
      i = 4, j = 4, k = 5, l = 7
      i = 4, j = 4, k = 5, l = 8
      i = 4, j = 4, k = 5, l = 9
      i = 4, j = 4, k = 6, l = 6
      i = 4, j = 4, k = 6, l = 7
      i = 4, j = 4, k = 6, l = 8
      i = 4, j = 4, k = 6, l = 9
      i = 4, j = 4, k = 7, l = 7
      i = 4, j = 4, k = 7, l = 8
      i = 4, j = 4, k = 7, l = 9
      i = 4, j = 4, k = 8, l = 8
      i = 4, j = 4, k = 8, l = 9
      i = 4, j = 4, k = 9, l = 9
      i = 4, j = 5, k = 5, l = 5
      i = 4, j = 5, k = 5, l = 6
      i = 4, j = 5, k = 5, l = 7
      i = 4, j = 5, k = 5, l = 8
      i = 4, j = 5, k = 5, l = 9
      i = 4, j = 5, k = 6, l = 6
      i = 4, j = 5, k = 6, l = 7
      i = 4, j = 5, k = 6, l = 8
      i = 4, j = 5, k = 6, l = 9
      i = 4, j = 5, k = 7, l = 7
      i = 4, j = 5, k = 7, l = 8
      i = 4, j = 5, k = 7, l = 9
      i = 4, j = 5, k = 8, l = 8
      i = 4, j = 5, k = 8, l = 9
      i = 4, j = 5, k = 9, l = 9
      i = 4, j = 6, k = 6, l = 6
      i = 4, j = 6, k = 6, l = 7
      i = 4, j = 6, k = 6, l = 8
      i = 4, j = 6, k = 6, l = 9
      i = 4, j = 6, k = 7, l = 7
      i = 4, j = 6, k = 7, l = 8
      i = 4, j = 6, k = 7, l = 9
      i = 4, j = 6, k = 8, l = 8
      i = 4, j = 6, k = 8, l = 9
      i = 4, j = 6, k = 9, l = 9
      i = 4, j = 7, k = 7, l = 7
      i = 4, j = 7, k = 7, l = 8
      i = 4, j = 7, k = 7, l = 9
      i = 4, j = 7, k = 8, l = 8
      i = 4, j = 7, k = 8, l = 9
      i = 4, j = 7, k = 9, l = 9
      i = 4, j = 8, k = 8, l = 8
      i = 4, j = 8, k = 8, l = 9
      i = 4, j = 8, k = 9, l = 9
      i = 4, j = 9, k = 9, l = 9
      i = 5, j = 5, k = 5, l = 5
      i = 5, j = 5, k = 5, l = 6
      i = 5, j = 5, k = 5, l = 7
      i = 5, j = 5, k = 5, l = 8
      i = 5, j = 5, k = 5, l = 9
      i = 5, j = 5, k = 6, l = 6
      i = 5, j = 5, k = 6, l = 7
      i = 5, j = 5, k = 6, l = 8
      i = 5, j = 5, k = 6, l = 9
      i = 5, j = 5, k = 7, l = 7
      i = 5, j = 5, k = 7, l = 8
      i = 5, j = 5, k = 7, l = 9
      i = 5, j = 5, k = 8, l = 8
      i = 5, j = 5, k = 8, l = 9
      i = 5, j = 5, k = 9, l = 9
      i = 5, j = 6, k = 6, l = 6
      i = 5, j = 6, k = 6, l = 7
      i = 5, j = 6, k = 6, l = 8
      i = 5, j = 6, k = 6, l = 9
      i = 5, j = 6, k = 7, l = 7
      i = 5, j = 6, k = 7, l = 8
      i = 5, j = 6, k = 7, l = 9
      i = 5, j = 6, k = 8, l = 8
      i = 5, j = 6, k = 8, l = 9
      i = 5, j = 6, k = 9, l = 9
      i = 5, j = 7, k = 7, l = 7
      i = 5, j = 7, k = 7, l = 8
      i = 5, j = 7, k = 7, l = 9
      i = 5, j = 7, k = 8, l = 8
      i = 5, j = 7, k = 8, l = 9
      i = 5, j = 7, k = 9, l = 9
      i = 5, j = 8, k = 8, l = 8
      i = 5, j = 8, k = 8, l = 9
      i = 5, j = 8, k = 9, l = 9
      i = 5, j = 9, k = 9, l = 9
      i = 6, j = 6, k = 6, l = 6
      i = 6, j = 6, k = 6, l = 7
      i = 6, j = 6, k = 6, l = 8
      i = 6, j = 6, k = 6, l = 9
      i = 6, j = 6, k = 7, l = 7
      i = 6, j = 6, k = 7, l = 8
      i = 6, j = 6, k = 7, l = 9
      i = 6, j = 6, k = 8, l = 8
      i = 6, j = 6, k = 8, l = 9
      i = 6, j = 6, k = 9, l = 9
      i = 6, j = 7, k = 7, l = 7
      i = 6, j = 7, k = 7, l = 8
      i = 6, j = 7, k = 7, l = 9
      i = 6, j = 7, k = 8, l = 8
      i = 6, j = 7, k = 8, l = 9
      i = 6, j = 7, k = 9, l = 9
      i = 6, j = 8, k = 8, l = 8
      i = 6, j = 8, k = 8, l = 9
      i = 6, j = 8, k = 9, l = 9
      i = 6, j = 9, k = 9, l = 9
      i = 7, j = 7, k = 7, l = 7
      i = 7, j = 7, k = 7, l = 8
      i = 7, j = 7, k = 7, l = 9
      i = 7, j = 7, k = 8, l = 8
      i = 7, j = 7, k = 8, l = 9
      i = 7, j = 7, k = 9, l = 9
      i = 7, j = 8, k = 8, l = 8
      i = 7, j = 8, k = 8, l = 9
      i = 7, j = 8, k = 9, l = 9
      i = 7, j = 9, k = 9, l = 9
      i = 8, j = 8, k = 8, l = 8
      i = 8, j = 8, k = 8, l = 9
      i = 8, j = 8, k = 9, l = 9
      i = 8, j = 9, k = 9, l = 9
      i = 9, j = 9, k = 9, l = 9


      Добавлено
      Цитата OpenGL @
      А, не, вру - не с самого начала. Мои поздравления - переменную i ты восстановил. Осталось восстановить ещё три оставшихся переменных :D

      Короче, может хватить гадать? Давай ты мне скажешь что мне нужно сделать, что бы получить неверные данные, а не будешь говорить что у меня там происходит, даже не запустив программу? Я запускал без файла и сохранненного состояния, полученные данные кидал в мержиловку - все ок.
      Потом сохранял состояния и запускал, полученные данные сравнивал с исходными.
      Напиши сценарий что мне нужно сделать что бы получить не валидные данные? Я хз как тестить, чтоб получить то, что тыговоришь?
        Цитата KILLER @

        Короче, может хватить гадать? Давай ты мне скажешь что мне нужно сделать, что бы получить неверные данные, а не будешь говорить что у меня там происходит, даже не запустив программу? Я запускал без файла и сохранненного состояния, полученные данные кидал в мержиловку - все ок.

        Запусти с состояния, где все переменные различны.
          Цитата OpenGL @
          Фиаско. У тебя, если ты дошёл до цикла, mega_ok всегда равно true.
          Та не. Просто въехать в архитектуру коды втрое сложнее, и работает оно вдвое медленнее. А так нормально, этот вариант тоже приводился.
            Цитата OpenGL @
            1) До условия mega_ok всегда true.
            2) Мы зашли в условие. Если mega_ok в нём поменялась на false - внутреннее условие у тебя уйдёт в return и до цикла не дойдёт.
            3) Поскольку в других частях кода присваиваний mega_ok нет, то вышеозвученный вывод - что mega_ok всегда true - верен.

            То есть выпадет в ошибку? Так это притензии к Qraizery, а не ко мне, я этот код не трогал. Я там только название переменной изменил, чтоб не было конфликта имен.

            Добавлено
            Цитата OpenGL @
            Запусти с состояния, где все переменные различны.

            Ну ок, щас сохраню их.
              Правда, работает неправильно.
                Цитата Qraizer @
                Та не. Просто въехать в архитектуру коды втрое сложнее, и работает оно вдвое медленнее. А так нормально, этот вариант тоже приводился.

                Я выше объяснил, почему в его коде смысла в mega_ok нет никакого. Я понимаю, что он хочет сделать, и да - вердикт этому коду ты уже озвучил.
                  А кто-нибудь помнит, как вы от define и template перешли к goto и весёлым конкурсам по написанию говнокода?
                    А вообще, по-моему замечательная демонстрация. Код переписан без goto, ещё не работает, но уже непонятен - я не сразу понял, что именно там не работает :lool:
                      Короче, предлагаю перенесли полемику о goto в подобающую ему тему. Эта как бы о другом. Не то я счас скажу, что "рекурсия – это говнокод".

                      Добавлено
                      Ой, сказал :blush:
                      Сообщение отредактировано: Qraizer -
                        KILLER, видел? Можешь ещё по той теме погулять, там и код был и срач(с твоим участием тоже)

                        Цитата D_KEY @
                        Нашел ту тему, там даже мои варианты были. Вот два из них:
                        Цитата D_KEY @

                        ExpandedWrap disabled
                          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) {
                           
                                // ...
                           
                              }
                            }
                          }


                        Цитата D_KEY @
                        Есть еще вариант со switch :D
                        Не проверял, мог опечататься

                        ExpandedWrap disabled
                          int i = 0, j = 0, k = 0;
                          switch (restore(&i, &j, &k))
                          case 0:
                            for(i = 0; i < 10; ++i) {
                              for (j = i; j < 10; ++j) {
                                for(k = j; k < 10; ++k) {
                          default:
                                   // ...
                              
                                }
                              }
                            }
                          }



                        Сам я в той теме считал вариант с goto более понятным.
                          Цитата D_KEY @
                          А кто-нибудь помнит, как вы от define и template перешли к goto и весёлым конкурсам по написанию говнокода?

                          Это всё я :crazy: Мне стало интересно - действительно ли у них в примерах и SDK много goto, и я попросил пруфов. А потом внезапно всё заверте... :D
                            Цитата OpenGL @
                            Запусти с состояния, где все переменные различны.

                            Вот состояния переменных в файле:
                            // int i(3), j(4), k(5), l(6);

                            Результаты идентичны. Скажи конкретные цифры, какие нужно задать, чтоб не работало?

                            Добавлено
                            Цитата OpenGL @
                            Код переписан без goto, ещё не работает, но уже непонятен - я не сразу понял, что именно там не работает :lool:

                            А что именно не работает? Я просто реально понять не могу :-?

                            Цитата Qraizer @
                            Правда, работает неправильно.

                            Qraizer, ну хоть ты объясни где не правильно? Результаты выдает идентичные, я сравниваю их в мержиловке, на которую кинул ссылку.

                            Добавлено
                            Цитата Qraizer @
                            Не то я счас скажу, что "рекурсия – это говнокод".

                            Нет, не согласен. Иногда здорово выручает и облегчает жизнь. Хотя уйти в стековерфлоу да, легко можно, если что то проглядеть.

                            Добавлено
                            Цитата OpenGL @
                            Я выше объяснил, почему в его коде смысла в mega_ok нет никакого. Я понимаю, что он хочет сделать, и да - вердикт этому коду ты уже озвучил.

                            Это всего лишь твои домыслы, причем пока не подтвержденные. И какой вердикт этому коду? С goto - ой какой красивый код, ну супер просто, с тернарным оператором - вердикт коду - говно? Так мне лень было вообще все переписывать и перепроектировать, я пошел по самому простому пути, оставить все как есть, и убрать только goto.
                              Цитата KILLER @
                              Результаты идентичны. Скажи конкретные цифры, какие нужно задать, чтоб не работало?

                              Собственно, на 3, 4, 5, 6 оригинальный код должен стартануть с них, а твой - с 3, 3, 3, 3. Если же у тебя разницы нет, то либо ты скопипастил сюда другой код, либо не тот вывод в дифвьювер.
                                Цитата OpenGL @
                                Собственно, на 3, 4, 5, 6 оригинальный код должен стартануть с них, а твой - с 3, 3, 3, 3. Если же у тебя разницы нет, то либо ты скопипастил сюда другой код, либо не тот вывод в дифвьювер.

                                Да, точно. Видимо при раскоментировании блока, случайно расскоментировался goto. Ладно, подумаю потом еще.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (12) « Первая ... 4 5 [6] 7 8 ...  11 12 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0483 ]   [ 17 queries used ]   [ Generated: 3.05.24, 04:07 GMT ]