• В чём отличие библиотеки от модуля в python?

    Внутри библиотеки может быть несколько модулей.
    Ответ написан
  • Как получить адрес памяти переменной в массиве, а не адрес индекса массива?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Все правильно: выводится адрес элемента в массиве. Они два не совпадают, потому что в figure_collection лежит копия line, со своим уникальным адресом в памяти.

    Edit: и вы через массив к исходному line никак не обратитесь, только если не смените тип массива на Figure*
    Ответ написан
    Комментировать
  • Выдает ошибку «идентификатор не определен». Почему?

    YuriyVorobyov1333
    @YuriyVorobyov1333
    Software Developer
    Потому что в цикле for лишний символ ";"

    for (int i = 0; i < adj[u].size(); i++); {...}
    Ответ написан
    Комментировать
  • Как работать с большими числами в C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Если числа такие большие, что ответ никуда не влезает, то надо писать длинную арифметику. Цифры числа храните в массиве, складывайте/умножайте в столбик. Удобно хранить числа развернутыми. Гуглите "длинная арифметика" - найдете и код с примерами и кучу статей.

    Но вам это, скорее всего, и не надо. В комбинаторных задачах часто все сокращается и можно получить ответ не считая очень большие числа.

    Ваш код так ужасен, что я не могу понять, что вам там надо подсчитать в итоге, но уже брасается в глаза, что у вас там считается число сочетаний. Во-первых, можно считать (n-k+1*k+2*..*n)/k!, что уже дает более мелкие числа.

    Потом, можно считать треугольником паскаля. Можно даже считать только одну строку, домножая и деля на одно число - тоже не получая в процессе чисел больше ответа.

    Если bills не больше 64, то все влезет в стандартный unsigned long long.

    Примеры дальше в вашей задаче точно не нужны, но для кругозора опишу и их.

    Если в задаче более сложная формула, то можно хранить числа в виде их факторизации на простые числа. Поддерживайте массив в котором будете хранить степени всех простых чисел до некоторого максимального. При умножении прибавляйте, при делении вычитайте. В конце все оставшееся перемножте.

    Еще более продвинутый метод: считать по модулю больших простых чисел и в конце, через китайскую теорему об остатках вычислять ответ.
    Ответ написан
    Комментировать
  • ++i быстрее чем i++?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Теоретически, ++i быстрее. Практически - нет, потому что компиляторы могут и то и другое соптимизировать в одни и те же ассемблерные инструкции в большинстве случаев. Исключение, если инкримент используется в выражении. Но тогда они не взаимозаменяемы. Еще может быть случай, если i какого-то странного типа и инкрименты перегружены и криво написаны. Или если оптимизация отключена при компиляции. Или у вас доисторический компилятор.
    Ответ написан
    Комментировать
  • Какие есть альтернативные языки и среды для программирования Arduino?

    Можно работать с Arduino не как с Arduino, а как с тем чипом, который в ней стоит - тогда можно будет использовать любой язык, который может запускаться на целевой архитектуре (AVR, arm, итд).
    Среды разработки будут соответствующие.
    Если используется си, то подключение сишных библиотек будет вполне очевидным.
    Иначе используется ffi специфичный для конкретного языка. (например в случае rust можно использовать bindgen)

    Также для Arduino есть среда разработки Platformio - там используется также язык arduino, который C++, но писать будешь не в убогом стандартном редакторе, а в vscode
    Ответ написан
    4 комментария
  • Как сократить строку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    По количеству информации на квадратный метр - эта строка вполне себе плотная и насыщенная действиями.

    Чтоб делать какой-то интересный рефакторинг - надо делать не одно-строчники а функции.

    Тоесть
    def composePath(....) -> string:
      return ....

    Вот. Функции можно покрывать тестами и таким образом гарантировать стабильность от изменений.
    Ответ написан
    Комментировать
  • Как сделать рандомное число без повторений при вызове функции?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Если вы хорошо подумаете, вы поймёте, что это практически тоже самое, что просто взять список уникальных значений, случайным образом перемешать его и вывести. Никакой принципиальной разницы по результату нет. Тогда зачем все усложнять? Шафл решит вашу проблему.
    Ответ написан
    4 комментария
  • Какой pet проект создать, чтобы выделиться?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Pet проект это не тестовый проект для портфолио.
    Пет проект делается для себя, а потом по случаю добавляется в портфолио, а не создается исключительно для того, чтобы положить его в портфолио.

    Чтобы устроитсья, тебе нужно уметь работать, а не пет проект, не заморачивайся.
    Ответ написан
    Комментировать
  • Стоит ли очищать оперативную память от массивов структур в Си?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Нет, если это локальная переменная, ничего делать не надо. Она выделяется на стеке и отчищается автоматически по выходу из функции.

    Надо вызывать free только для тех блоков памяти, который вы сами получили через malloc.
    Ответ написан
    Комментировать
  • Как в c++ записать принадлежность х к множеству целых чисел?

    Читай то что вводит пользователь как строку, а потом std::from_chars
    Ответ написан
    Комментировать
  • Как разрешить использование только конкретного наследуемого от интерфейса, не финального класса?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Практически никак. Суть полиморфизма в том, что экземпляры наследников можно вставлять вместо экземпляра предка везде и все будет работать. Поэтому вы средствами языка никак не запретите передавать C вместо B (речь об указателях, естественно). Если хочется, то можно сделать виртуальную функцию, которая возвращала бы какое-то enum, для идентификации классов A,B,C (и других наследников) и уже в функции проверять, что там не передали по ошибке экземпляр C. Но логичнее было бы выделить каие-то свойства у классов (например, количество пуль в вашем примере с MultiGun) их задать в виртуальных функциях у всех классов и дальше в функции проверять, что переданный экземпляр обладает нужными свойствами. Жестко привязываться, что можно B, но нельзя C - это плохой подход. Почему нельзя? А если потом появится D,E,F - можно ли их передавать? А если они братья B?
    Ответ написан
    Комментировать
  • Как в языке СИ проверить существует ли файл без создания нового?

    mayton2019
    @mayton2019
    Bigdata Engineer
    FILE *handle = fopen("filename", "r")
    возвращает файловый указатель. Если открываешь на чтение - то он обычно null если файла
    не было или была какая-то другая ошибка. Детали по ошибке выдает другой системный вызов errno, streeror или
    что там еще есть другое не помню точно.
    Ответ написан
    Комментировать
  • Как написать функцию со списком python?

    Vindicar
    @Vindicar
    RTFM!
    У тебя ошибка в логике.
    Ты проверяешь каждую возможную гласную, и если слово начинается с неё, ты выводишь "an".
    Но если слово НЕ начинается с этой гласной, ты выводишь "a", что ошибочно.
    Ведь тот факт, что слово не начинается с этой гласной, ещё не означает, что оно не начинается вообще с никакой гласной.
    Поэтому раздели две операции - проверка гласной, и вывод.
    Ну или научись пользоваться оператором in, как выше подсказал Dmitrii.
    Ответ написан
    Комментировать
  • Как мне разделить изображение на зоны?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Все достаточно просто. На изображении выделяете "области интереса", пусть это будут прямоугольники с координатами x0:y0 - x1:y1. Пробегаете по всем прямоугольникам и считаете "плотность" прямоугольника, если плотность отличается, то в этом прямоугольнике что-то находится - включаете нужный моторчик.
    Плотность посчитать очень просто - среднее по всем точкам прямоугольника.
    Более подробно, рекомендую книжку Гонсалеса (как бы азбука цифровой обработки)- https://www.ozon.ru/product/tsifrovaya-obrabotka-i...

    Ах, ну, да... Что-то я сомневаюсь, что в интеренете не нашлось, как кропнуть область из изображения! Вот например с использованием opencv (прям вот для python и C++, как заказывали) - https://learnopencv.com/cropping-an-image-using-opencv/
    Ответ написан
    2 комментария
  • Как извлечь элементы многобайтового массива как единое число?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Лучше так делать не надо. Это UB - нарушение всяких strict aliasing, выравниваия и вообще от порядка байт в машине зависит. Лучше руками собрать ULL по частям, вроде
    for (int i = 0; i < 8; ++i) result |= byte_array[i+1] << (8ULL*i);
    или
    for (int i = 0; i < 8; ++i) result |= byte_array[i+1] << (8ULL*(7-i));


    На худой конец, если очень узкое место, надо делать memcpy из массива в &result.
    Ответ написан
    Комментировать
  • Почему явная специализация невозможна?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Проблема вызвана использованием шаблона rewrite из шаблона search.

    Если вы перенесете специализацию шаблона rewrite вверх, до специализации search, то все скомпилируется. Или надо где-то выше первого использования шаблона rewrite задекларировать специализацию (что ваш закомментированный код и делает).

    Вызвана эта ошибка стандартом.
    Надо, чтобы специализация шаблона была задекларирована до любого использования:
    Specialization must be declared before the first use that would cause implicit instantiation, in every translation unit where such use occurs:
    Ответ написан
    1 комментарий
  • Уменьшается ли используемая память программы?

    bingo347
    @bingo347
    Crazy on performance...
    Во-первых, размер стека фиксирован, стек выделяется в момент запуска потока.
    Во-вторых, компилятор и сам достаточно умный, чтобы переиспользовать стек под разные переменные использование которых не пересекается.
    В-третьих, экономия на спичках, а читаемость ухудшается.

    P.S. такую штуку действительно иногда используют, но ради того чтоб вызвать деструктор в нужной точке кода.
    Ответ написан
    Комментировать
  • Как реализовать установку консольного приложения?

    Запакуй своё приложение в пакет для конкретной операционной системы и всё.
    В случае линукса - зависит от конкретного дистрибутива, там куча разных пакетных менеджеров.
    На винде - msi или msix

    Ну и не всегда есть смысл вообще делать инсталляторы - консольными приложениями на Windows пользуются "продвинутые" пользователи и у них явно не будет сложности с тем, чтобы прописать его в PATH.
    Ответ написан
    2 комментария
  • Как реализовать запуск приложения через консольную команду?

    GavriKos
    @GavriKos
    Для первого - и в винде, и в линуксе для этого достаточно прописать путь к папке с исполняемым файлом в PATH - все терминалы (наверное все) именно там ищут "команды" (а точнее команда это и есть бинарь).
    Ответ написан
    1 комментарий