• Отладка непреднамеренных модификаций массива?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Firefox:
    // 5, 10, 15, 20
    // Array(4) [ 5, 10, 15, 20 ]
    Chrome:
    // 5, 10, 15, 20
    // (4) [5, 10, 15, 20]
    Node.JS:
    // 5, 10, 15, 20
    // [ 5, 10, 15, 20 ]
    В чём проблема?
    Ответ написан
    Комментировать
  • Алгоритм Флойда-Уоршалла?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Попробуйте инициализировать next[i][j] = getNodeWithIndex(j). Выведите path перед алгоритмом. Код слишком запутан, где-то хранится MyMapNode, где-то индекс, и туда-сюда идут переходы. Попробуйте next сделать int - это сильно упростит код.

    Сама реализация алгоритма, вроде, правильная.

    Edit: а нет. Путь надо восстанавливать так:

    Изначально next[i][j] = j. А в алгоритме при перезаписывании пути из i в j через k: next[i][j] = next[i][k]

    В таком подходе восстановление пути делается одним циклом - через i = next[i][j]. next[i][j] всегда будет указывать на следующую вершину в пути из i в j.
    Ответ написан
    Комментировать
  • Альтернативы и операторы goto в C?

    @mayton2019
    Bigdata Engineer
    Давайте не будем рефакторить этот код а создадим новую функцию. Которая делает тоже самое и докажем что полученый код эквивалентен. Тогда и проблема goto будет иметь еще одно решение. Наша функция предположительно будет такая:

    int find_first_zero_row(int **matrix, int cols, int rows) {
       .....
       return -1;
    }


    Будет такой контракт что если строка из нулей найдена то мы получаем ее номер или -1 в противном случае.

    Нам может понадобиться вспомогательная функция.

    int all_items_are_zero(int *items, int length) {
       ....
    }


    Мне кажется что с таким набором нам не понадобится goto. Декомпозиция кода на функции - это один из способов избежать goto.

    P.S. Не бойтесь вводить в код функции. Торвальдс не запрещает функции в языке С. Ценнее код который работает правильно а не тот который выглядит как колбаса и глючит временами.
    Ответ написан
    Комментировать
  • Как часто оператор goto используется в C?

    Приве! я заюзал много сайтов по манере письма на си, вроде как корни языка из древле, когда вместо настольного компа были чипы из калькулятора. Само по себе преждевременный выход из кучи вложенных циклов наталкивает на мысль-че там у тебя такое сложное? По идее, с коммерческой стороны-покупай библиотеки которые помогут сократить количество вложеных циклов, с другой стороны-пойми, быстродействие количества вложенных циклов! Ты уже в них вошел.
    Ответ написан
    1 комментарий
  • Как часто оператор goto используется в C?

    @mayton2019
    Bigdata Engineer
    Оператор goto является неотъемлемой частью любого процесора. Он реализован в виде команд JZ, JNZ.. e.t.c.
    Вобщем де-факто он существует всегда. Хотя для языков высокого уровня и в особенности для т.н. структурного
    программирования
    считается что он мешает восприятию чтения кода. Тоесть в идеале вы должны
    читать глазами код сверху-вниз.

    Апологеты структурщины также считают что надо делать выход из системы вложенных циклов через флажки. Но как по мне for с флажками выглядит еще хуже чем for с goto.

    Еще минусом в адрес goto является тот факт что он для машинного кода сбивает конвейер команд. Конвееру нужно время на прогрев чтобы заново заполниться после goto. Поэтому код будет работать непроизводительно
    если он набит многочисленными goto.
    Ответ написан
    1 комментарий
  • Как часто оператор goto используется в C?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Полностью отказываться не надо. Иногда он все-таки может сильно упростить код. Но это большая редкость. Стоит его использование минимизировать, потому что goto часто приводит к очень сложно читаемому и поддерживаемому коду.

    Вот текущий ваш код отлично реализуется и циклом while(true) c break, если числа правильные.
    И если тут все еще более менее просто с goto, то если вы и дальше будете его использовать, то у вас рано или поздно в функции будет несколько меток и разветвленная структура переходов между ними - вы уже сами на следующий день будете рвать волосы на голове в попытках понять, что там происходит.
    Ответ написан
    Комментировать