1. C++ / Говнокод #17761

    +68

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    int a, b ;
    //some code
    int numCount = 0;
    while ((a + numCount++) < b)    // посчитать кол-во чисел между a и b, включая a и b
       ;

    это великолепно!

    Запостил: Croessmah, 11 Марта 2015

    Комментарии (12) RSS

    • Вот так же и результат прогрессии считают через цикл.
      Ответить
      • Прогрессию еще можно понять - не все знают что есть формулы для этого. А вот в этом примере я даже не знаю, как нужно начать думать, чтобы придти к такому решению.
        Ответить
    • Интересно, а сможет ли gcc оптимизнуть эту херню до вычитания?

      P.S. Не смог. Жаль.
      Ответить
      • Хм, интересный вопрос. Нужно будет потестить дома.
        Ответить
      • Тьфу, так этот код прогрессию и считает. Коммент врёт!
        Ответить
        • По сути - не врет. Увеличение же numCount на 1 в цикле [a,b)
          Ответить
          • А, тьфу, он же a не увеличивает, а всегда юзает старое значение. Всё ок.
            Ответить
      • А вот код, который реально считает количество чисел между a и b, gcc оптимизирует до b-a+1!
        for (int x = a; x <= b; ++x)
            numCount++;
        
        subl %edx, %eax
        addl $1, %eax
        Ответить
      • Логично, что не смог. Тут нужна целебная палка-мозги-вправлялка
        Ответить
    • Помню был такой пиздец - знакомый писал сапера, я посмотрел в код и увидел как клетка, в которую кликнули, вычислялась через циклы - сначала по вертикали, потом по горизонтали.
      А ведь сейчас он где-то обитает с дипломом бакалавра...
      Вообще страшно представить, какие нынче спецы выпускаются
      Ответить
      • У меня такое ощущение, что именно они идут в преподаватели. Не знаю как Вам, а мне пока попадался только один, действительно знающий предмет, преподаватель.

        P.S. Правда не долго он в преподах пребывал - нашел работу по профилю )))
        Ответить
        • Нет, с этим у нас порядок. Большая часть преподов отлично знает знает свой предмет. Во всяком случае я всегда получал ответы на свои вопросы (или стрелку "копать в эту сторону")
          Ответить

    Добавить комментарий