• Как исправить ошибку vector subscript out of range?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Как правильно замтили отвечашие ранее, такие вещи надо искать в отладчике, а при чтении кода можно, разве что, заметить подозрительные места. В частности, я вижу подозрительное место в функции buildFanoTable - вот этот оператор:
    if (abs(diff1 - diff2) < abs(diff1 - diff2 - frequencies[mid + 1].frequency)) {
            mid++;
            diff += frequencies[mid].frequency;
        }

    В предыдущем цикле mid может дойти до end-1, и обращение по индексу mid+1 будет как раз выходом за границу вектора.
    Ответ написан
    Комментировать
  • Как исправить ошибку vector subscript out of range?

    maaGames
    @maaGames
    Погроммирую программы
    Запускаешь под отладчиком, включив перехват исключений. В той строчке, где будет выход за границы массива, будет брошено исключение и отладчик на этой строчке остановится и сможешь посмотреть конкретное место и что в стеке лежит.
    А ещё, в коде логическая ошибка в RLE кодировании-декодировании: недопустимы последовательности символов более 9 штук подряд. Если будет 10 и больше символов, то твой алгоритм поломается.
    Ответ написан
    Комментировать
  • Почему любую булеву функцию можно представить в виде СДНФ или СКНФ?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Потому что эти формы - это тупо перечисление всех наборов входных значений, которые дают истину, или ложь (в другой форме). В СДНФ вы получаете слагаемые, объедененные через ИЛИ. Каждое слагаемое через И задает все переменные так, что только вот в конкретном наборе входных данных это слагаемое будет истинно. Раз они все через ИЛИ соединены, то вся функция истинна только если входные значение из нужного набора. Аналогично СКНФ - но там каждая скобочка истина, если входные переменные не равны набору, на котором функция должна давать ложь.
    Ответ написан
    Комментировать