• Где можно купить "белый" IPv4 адрес "навсегда"?

    @res2001
    Борис, На сколько я понимаю в США большие проблемы со свободным пулом IPv4, так что у них в этом плане вряд ли будет стабильно.
    В "долгосрок" я бы вообще не думал про IPv4, только IPv6.
    Завязывайтесь на крупных поставщиков, у них меньше шансов умереть с годами.
    В РФ можно на Ростелеком посмотреть - самые крупные в стране, да еще и гос.контора. Думаю до следующей революции можно с ними спокойно работать. Это не реклама, у меня от ростелекома только домашний интеренет :-)
  • Как подключить стороннюю библиотеку к проекту Qt через CMake?

    @res2001
    Если при вызове cmake задать параметр: -DCMAKE_VERBOSE_MAKEFILE или в самом CMakeLists.txt задать set(CMAKE_VERBOSE_MAKEFILE ON)
    то cmake будет печатать на экран весь вывод, в выводе можно увидеть и вызов компилятора с параметрами и там уже можно посмотреть чего не хватает или что что-то не правильно добавилось в аргументы. Полезно для отладки сборки и обучения.
  • Как подключить стороннюю библиотеку к проекту Qt через CMake?

    @res2001
    Если что текущий каталог (где лежит CMakeLists.txt) лежит в переменной ${CMAKE_CURRENT_SOURCE_DIR}
  • Как подключить стороннюю библиотеку к проекту Qt через CMake?

    @res2001
    Путь указывайте относительно каталога, где лежит текущий CMakeLists.txt. В cmake относительные пути отсчитываются от этого каталога.
    Например так: muParserProject/include, если CMakeLists.txt лежит в родительском каталоге muParserProject
    В кавычках или без - не принципиально.
  • Как подключить стороннюю библиотеку к проекту Qt через CMake?

    @res2001
    Egorithm, target_include_directories - для инклудов
    target_link_directories - для задания каталога поиска библиотек
    Все операции, которые можно сделать с конкретной целью начинаются на target_
    По ссылке масса всего интересного :)
  • Почему ругается Visual Studio c++?

    @res2001
    Евгений Шатунов, Roman, Спасибо за дополнения.
    Обобщу:
    Применительно к вопросу - нужно const заменить на constexpr, тогда должно компилироваться без ошибок на всех компиляторах поддерживающих С++11.
    Почему const ведет себя по разному на разных компиляторах:
    1. объявление массива так как его привел Terminator123321 не является С++ совместимым (спасибо Евгений Шатунов).
    Вот почему - В С++ нет массивов переменной длинны (VLA). Они есть только в С99 и выше. Обычные статические массивы в С++ можно задавать только используя константное выражение в качестве размерности. const не является константным выражением (а constexpr - это оно и есть). Константное выражение вычисляется на этапе компиляции, что не обязательно верно в случае const (собственно по этому const - это и не константное выражение).
    Таким образом приведенное объявление массива строго говоря является массивом переменной длины, а не обычным статически массивом Си.
    Как было сказано Евгений Шатунов компиляторы могут более углубленно проверить выражение инициализации в const и распознать его как constexpr. Но это никак не регламентируется стандартом и тут каждый компилятор ведет себя как захочется.
    2.Микрософтовский компилятор никогда полностью не поддерживал современные стандарты Си (С99 и выше), поэтому массивов переменной длины он не умеет, отсюда ошибка в MSVS.
    gcc поддерживает современные стандарты. По умолчанию, если при компиляции не указано строго придерживаться стандарта языка, то он разрешает в коде С++ использовать VLA. В общем это такое расширение gcc.
    3.Для статических массивов в С++ используйте класс std::array, впрочем на сколько я понимаю это не отменяет необходимости использовать constexpr в качестве размерности массива.
    В качестве обучения нужно попрактиковаться и с "сырыми" массивами, но в реальном коде лучше юзать классы стандартной библиотеки.

    PS: Так же как и # проверил код в MSVS - компилируется. Даже с учетом того, что отключены все оптимизации и включена опция использовать C++14. Судя по дизасемблеру msvc все таки распознал это выражение как constexpr и не выругался.
    Стоит MSVS 2017 последний раз обновлял уже в этом году, так что версия можно считать свежая. В более поздних версиях компилятора результат вполне мог быть и другим. За одно проверил - msvc так и не научился в VLA.
    Вероятно что и gcc по умолчанию способен распознать const int n = 10 как constexpr. Протестировал на mingw то же собирается без ошибок, даже с -std=c++11 -pedantic -Wall -Wextra. Дизасемблер тут уже не смотрел.
  • Как организовать рабочее окружение разработки с использованием домашнего сервера?

    @res2001
    Но на выходе получится медленное нечто

    Внутри локальной сети скорости должны быть вполне приемлемыми. Особенно по проводам, если 1 Гбит есть.
    Для доступа из инета этот вариант, конечно, не годится. Но в вопросе нигде не звучало, что нужен доступ из вне.
  • Как понять, что ты уже умеешь программировать?

    @res2001
    все время обращаюсь к справке

    Это нормальная ситуация и вряд ли когда-то будет по другому.
    И не только к справке, к гуглу, к stackoverflow и т.д. и т.п.
  • Как свапнуть строки в си?

    @res2001
    Chemodan228, Эти const относятся к строками. Сами строки константные и не изменяются, а вот указатели вполне можно менять.
    const char *str; // не константный указатель на константную строку
    const char * const str; // константный указатель на константную строку
    char * const str; // константный указатель на не константную строку

    Ну и добавьте сюда сами еще варианты для указателя на указатель на char. В этом случае вообще возможно 3 раза в типе использовать const и все 3 будут означать разные типы.
    Почитайте что-нибудь про указатели - это самая сложная тема в Си ну и самая нужная, если вы дальше планируете развиваться как Си программист.
  • Как свапнуть строки в си?

    @res2001
    Chemodan228,
    #include <stdio.h>
    
    void swap_str(const char **s1, const char ** s2)
    {
      const char *stmp = *s1;
      *s1 = *s2;
      *s2 = stmp;
    }
    
    main()
    {
      char *str1 = "Hello";
      char *str2 = "world";
      printf("%s %s\n", str1, str2);
      swap_str(&str1, &str2);
      printf("%s %s\n", str1, str2);
    }
  • Как свапнуть строки в си?

    @res2001
    Chemodan228, т.е. обменять?
    Ну поскольку в Си строки это указатель на char, то просто свапните указатели на соответствющие строки. С самими строками ничего делать не нужно. Точно так же как свапали бы целые значения.
  • Как свапнуть строки в си?

    @res2001
    Расшифруйте общественности что вы имеете ввиду под "свернуть". Такой операции ни над указателями ни над строками не существует в природе.
    Знаю операцию "свертка", но она мало применима к строкам и указателям :)
  • ABCPascal.Net. Олимпиадная задача, как ускорить код?

    @res2001
    Так же можно подумать над тем, что бы хранить крокодилов в структуре белее подходящей для задачи.
    Например можно использовать для клеток массив структур, для клетки занятой крокодилом хранить кроме стороны куда он убегает еще и 4 индекса соседних крокодилов. В таком случае проверки будут тривиальными без обхода. Массив можно заполнять сразу при вводе.
    Думаю можно придумать и другие варианты структур данных, которые позволят обходится без дорогостоящих обходов.
  • ABCPascal.Net. Олимпиадная задача, как ускорить код?

    @res2001
    Делать массив a типа integer вовсе не нужно, достаточно char (не знаю есть ли в паскале char, но его аналог точно должен быть) и хранить там те же значения, что и вводятся из входного файла. char занимает 1 байт, а integer - 4, а в задаче, на сколько я понимаю, еще присутствует и ограничение на использование памяти. На скорости проверок это ни как не скажется, но ввод у вас будет происходить быстрее.
  • ABCPascal.Net. Олимпиадная задача, как ускорить код?

    @res2001
    В задаче не сказано где находится Робинзон. Ведь логично, если крокодил побежит на Робинзона, то ему кирдык.
    Ну да ладно.
    Ясно, что ваш тривиальный вариант простым перебором самый долгий.
    Нужно усложнять алгоритм. Например если начать с внешних сторон острова, то минимум одна из сторон всегда открыта для крокодила (для южной стороны острова всегда открыто южное направление) и можно ничего не проверять. И вторая сторона то же сначала открыта, но в процессе может быть закрыта (для южной стороны и обхода с запада на восток сначала открыта западная сторона). Если натыкаемся на крокодила, который убегает в сторону обхода (на восток), то придется начать обходить сторону с другой стороны и в противоположном направлении, если при этом встретится крокодил, бегущий на запад, то эти оба крокодила остаются на острове.
    Крокодилов бегущих на север на данном этапе оставляем (можно для таких завести отдельный список, чтоб в дальнейшем снова не обходить все клетки).
    Можно использовать промежуточные списки для хранения уже пройденных клеток с крокодилами, но по которым решение сразу принять не вышло.
    Так же наверное ускорят процесс промежуточные булевы вектора, значения в которых будет означать свободно ли направление для побега или нет.
    И т.д и т.п.
    И вариантов расположения крокодилов много. Например: могут образовываться замкнутые циклы из более чем 2 крокодилов, когда несколько крокодилов так выстраиваются, что каждые 2 отдельно взятые не бегут друг на друга (т.е. теоретически могут убежать), но если рассматривать всю группу ни один крокодил убежать не может.
    Удачи!
  • ABCPascal.Net. Олимпиадная задача, как ускорить код?

    @res2001
    Напишите задачу, которую решает код.
  • Mongoose не принимает файлы более 17 мб, как это изменить?

    @res2001
    dark_king_13, Как - принцип я описал выше.
    Подробностей не скажу, т.к. веб разработкой не занимаюсь и с mongoose дела не имел.
    Пришел по тегу mongodb. С mongodb немного знаком на так сказать "низком" уровне.
  • Mongoose не принимает файлы более 17 мб, как это изменить?

    @res2001
    На сколько знаю - это ограничение в mongodb - 1 json документ может быть не больше 16 мб. По моему его никак не изменить.
    https://docs.mongodb.com/manual/core/document/#doc...
    Не храните картинки в базе, храните их в файлах на диске, а в базе - имя файла.