• В чем смысл do while? Как его можно использовать?

    @evgeniy_lm
    Как написано в инструкции. Тело такого цикла обязательно выполняется хотя бы один раз. Часто густо бывают ситуевины когда нужно выполнить некие действия и по их результату решить повторить их или продолжить выполнение проги далее
    Ответ написан
    Комментировать
  • Не работает деструктор. В чем ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не работает деструктор

    "Не работает деструктор" -- это когда программу компилируешь, запускаешь, а деструктор не делает того, что в нём написано. У тебя же программа не компилируется. Из-за того, что в настройках компилятора стоит "трактовать предупреждения как ошибки" и "предупреждать о неэффективном коде С++". Ну и вдобавок, предупреждение тебе правильно говорит, что если ты не реализовал конструктор копирования и оператор присваивания для класса самостоятельно управляющего памятью, то жди проблем, когда начнёшь копировать объекты этого класса.
    Ответ написан
    6 комментариев
  • Как построить одинаковый отрезок вне зависимости от порядка точек?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А в чём проблема то? Отсортируйте отрезки по координатам.
    если xA > xB
      или (xA == xB и yA > yB)
      или (xA == xB и yA == yB и zA > zB)
        то T := A, A := B, B := T
    Ответ написан
  • Как создать кастомное кроссплатформенное окно на си?

    includedlibrary
    @includedlibrary
    Надо либо использовать библиотеки GTK, QT и т.п., либо писать свою реализацию под каждую ОС
    Ответ написан
    Комментировать
  • OSError: exception: access violation reading, ctypes, Python, что делаю не так?

    Vindicar
    @Vindicar
    RTFM!
    a = c_char_p(f'{getcwd()}\\file.txt'.encode())
    b = c_char_p(b'Help me pls')

    Тут есть проблема. Ты получаешь указатель на объект, но ты не хранишь ссылку на этот объект.
    Что, если Питон сразу же его подберёт сборщиком мусора? У тебя указатель будет указывать на адрес, где был объект, а что там сейчас - фз. Если память не будет освобождена, то обращение может быть удачным. Если страницу памяти освободят - то поймаешь access violation.
    Положи строку в переменнную, и бери указатель по переменной. Тогда объект будет жить, пока жива переменная.
    Во-всяком случае, я бы начал с этого.
    Ответ написан
    2 комментария
  • Как циклом Python for пройти несколько (сотен) range?

    Vindicar
    @Vindicar
    RTFM!
    Ответ написан
    Комментировать
  • Как можно получить карту мира ввиде одного или нескольких изображений с максимальной детализацией?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Простешие арифметические вычисления вам бы показали, что единственное векторное изображение с таким количеством деталей вы ничем не сможете открыть и отрендерить.
    Растровое изображение тоже скорее всего превысит допустимые размеры популярных форматов, но даже изображения, близкие к максимальным по размеру уже будут открываться и отображаться очень долго даже на современном оборудовании.
    И это ещё речь незаходила об объёме картинки такого размера и с такой детализацией.
    Именно поэтому все современные картографические программы и сайты работают не с цельным изображением, а с тайлами: квадратными (обычно) картинками, векторными или растровыми, которые стыкуясь друг с другом ормируют фрагмент карты, который в данный момент виден на экране.

    Если бы действительно стояла такая абсурдная задача, то имело бы смысл, чтобы она стала хоть немного реалистичнее, разбить, всё же, всю карту на большие куски и рендерить их отдельно.
    Тут есть два подхода:
    1) можно качать готовые тайлы и клеить из них тайлы побольше. Есть много источников, многообразие которых можно оценить с помощью ресурса https://nakarte.me/. Это, кстати, opensource-прокт и его исодники доступны на гитхабе.
    Качать тайлы можно с помощью проги SAS planetа - www.sasgis.org/sasplaneta
    2) Самостоятельно рендерить карты загрузив и отфильтровав дамп БД OSM. Это более сложный путь, но он реализцется на готовых и вплне рабочих компонентах (за исключением абсурдного и нереализуемого требования про рендер в единый файл).

    Вы бы подробнее рассказали чего хотите добиться и для чего, а вам бы тут объяснили пределы возможного и целесоообразность разных попыток реалиации этого, а ещё как лучше делать то, что вы в итоге на самом деле хотите.
    https://habr.com/ru/post/270513/
    Ответ написан
    Комментировать
  • Как сделать плавный переход высот в шуме перлина?

    Ocelot
    @Ocelot
    Если дизеринг не подходит, а нужна именно чёткая граница, но не хочется, чтобы она проходила по прямой. Сгенерируй ещё одну случайную карту высот, с меньшим диапазоном, и пусть она задаёт пороговую высоту для каждой отдельной точки. Например, если горы от 0 до 128, а снег нужен выше 100, пусть карта порогов будет в диапазоне 90..110 — получится снеговая линия, плавно гуляющая по высоте на +-10.
    Ответ написан
    Комментировать
  • За счет чего происходит ускорение программ при наличии модуля ядра linux?

    ValdikSS
    @ValdikSS
    Модуль TUN/TAP, через которые работают все не-ядерные VPN, очень медленный из-за того, что у него есть только интерфейс получения и отправки пакетов по одному пакету за вызов. Большое количество переключений контекста между ядром и пользовательским уровнем очень затратны, что влечёт за собой неэффективное использование процессорного времени.

    Это типичная известная проблема, которую можно решить в течение месяца, но которую не решили в течение двух десятилетий. Достаточно кому-нибудь взяться, внедрить современный (io_uring, например) или какой-то отдельный интерфейс для отправки и получения нескольких пакетов за один вызов, и скорость магически увеличится на порядок-два.

    Оценить ускорение от уменьшения переключений контекста довольно просто, достаточно провести тестирование со значительно увеличенным MTU пакета. Вот какие цифры приводит проект slirp4netns.

    Implementation |  MTU=1500  |  MTU=4000  |  MTU=16384  |  MTU=65520
    ---------------|------------|------------|-------------|------------
    slirp4netns    | 1.07 Gbps  | 2.78 Gbps  |  4.55 Gbps  |  9.21 Gbps
    Ответ написан
    4 комментария
  • Как правильно обработать статистику опроса о маршрутах транспорта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    И что такого особенного в этой ситуации? Кто-то считает, что маршрут хороший, потому что одна конечная около дома, вторая около работы. Кто-то что маршрут плохой, потому что его остановки в середине маршрута и автобус всегда забит до упора. Ну и, при прочих равных, маршрут, которым ездит миллион человек в день будет в обоих рейтингах выше маршрута, которым ездит тысяча человек.
    Пока не формализованы критерии отнесения в лучший/худший и данные не приведены к количеству перевозимых пассажиров, статистика бесполезна.
    Ответ написан
    1 комментарий
  • Исходный код языка Си?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Язык Си не является программой, по этому у него нет исходного кода. Исходный код может иметь компилятор языка, которых есть более чем один.
    Ответ написан
    Комментировать
  • Есть ли хоть какое-то преимущество использования функтора перед обычной функцией в данном случае?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    У функтора перед функцией есть только одно преимущество - это наличие состояния функтора, которое может меняться между обращениями к его функциональному оператору и влиять на его поведение. Функтор настраивается эксклюзивно, функция - по понятным причинам - только глобально.
    У функции перед функтором тоже есть преимущество - это адрес функции, по которому сразу можно начать ее исполнение. У функтора всегда будет два адреса - адрес метода функционального оператора и адрес самого функтора.

    Исходя именно из этих преимуществ и следует выбирать между функтором и функцией.
    Скажем, если бы нужно было nums вписать в CSV таблицу в виде матрицы, то проще использовать функтор. Создать его, настроить поток вывода, символ-разделитель столбцов, количество выводов до перехода на следующую строку и передать в std::for_each.
    Если такая настройка поведения не требуется, от функтора лучше отказаться в пользу функции во всех случаях.

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

    1. используй std::map для хранения количества голосов за каждого кандидата и int64_t для хранения номера кандидата.
    2. Вот что первым выдаёт гугл на запрос "как найти элемент с максимальным value в std::map C++":
    https://www.techiedelight.com/find-element-with-th...
    Ответ написан
    Комментировать
  • Как получить указатель на функцию класса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что будет?

    В данном примере -- то же самое, как если просто написать obj->execute(), т.е. виртуальный вызов конечного переопределения для функции obj1::execute в объекте класса obj3. См. eelis.net/c++draft/expr.call#3

    Я не понимаю как это будет работать с классами наследниками и виртуальной функцией.

    Если почитать соответствующую главу стандарта, то можно заметить, что виртуальные функции там вообще не обсуждаются. Всё специфичное для виртуальных функций поведение определено в разделе о вызове функций и не зависит от того, как именно вызываемая функция указана -- явно или через указатель на функцию класса.
    Ответ написан
    2 комментария
  • Как реализовать Алгоритм Решето Эратосфена от определенного числа, до данного?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Решето Эратосфена всегда начинается с 2. Его принцип - на каждом шаге находим следующее невычеркнутое число, оно является простым. Для построения массива от 900000000 до 1000000000 необходимо вычеркнуть из этого массива все кратные простым числам от 2 до 500000000, а для этого надо эти простые найти.
    Ответ написан
    1 комментарий
  • Почему не работает функция в с++ пытаюсь вызвать, а она не вызывается?

    @12rbah
    return 0;
        menu_for(v);
    Казалось бы, что могло бы пойти не так, попробуйте поменять местами return и menu_for
    Ответ написан
    Комментировать
  • Нужна ли математика Python,Java программисту?

    GavriKos
    @GavriKos
    Вопрос сложный.
    По факту для того чтобы писать говнобота - математика не нужна вообще. Но при этом математика как наука формирует и воспитывает мышление.

    Но при этом математика может понадобиться непосредственно для предметной области. В том же геймдеве без нее просто нечего делать.

    Дополнительно математика позволяет понимать нормально часть терминов. Например, сложность алгоритмов.
    Ответ написан
    Комментировать
  • Как реализовать поиск маршрута в плиточном мире?

    @MarkusD
    все время мелю чепуху :)
    Плиточное поле принято называть дискретным пространством.
    В таком пространстве перемещение измеряется дискретными шагами, между которыми и может быть изменено.

    Для поиска пути в таком дискретном пространстве стоит обратить внимание на алгоритмы поиска в ширину и в глубину.
    Начать стоит с поиска в глубину. Его легко сделать и так же легко понять его неоптимальность. От поиска в глубину довольно легко перейти к поиску в ширину.
    Алгоритмы поиска в ширину и в глубину дадут первичное понимание теории построения маршрута.

    От поиска в ширину можно перейти к эвристическим алгоритмам поиска: A* или поиску по наилучшему совпадению.
    На этом этапе еще полезно познакомиться с алгоритмом JPS. Он может стать даже выгоднее обычного A*.

    A* должен стать для тебя основным инструментом поиска в дискретном пространстве. Но у A* есть проблема большой сложности поиска прямого маршрута.
    При поиске пути по прямой лучше всего использовать алгоритм Брезенхама.
    Этот алгоритм используется для рисования пиксельных примитивов. В частности - прямых.
    И суть должна быть в том, чтобы сперва путь искать через Брезенхама по прямой от точки старта до точки финиша, а если Брезенхам наткнется на препятствие, то уже перейти к поиску через A*.

    Для очень больших дискретных пространств есть варианты иерархического A*: HPA* и HAA*. Они применяются на иерархических дискретных пространствах вида открытого мира. В освоении они являются самыми сложными и самыми интересными.
    Ответ написан
    3 комментария
  • Как эффективно и лаконично отсортировать файл из строк не вмещающихся в память?

    Adamos
    @Adamos
    А зачем вам вся строка для сортировки?
    Вам она нужна только до того байта, который не совпадет с другими строками.
    Взять от каждой строки по 64Kб, отранжировать по отличиям в этой части, продолжить читать только у тех, у которых она совпадает. Повторять чтение кусков до прекращения совпадений.
    Ответ написан
    5 комментариев
  • Самопроизвольное объявление define'ов в проекта?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Получается, магическим образом, самопроизвольно, между включениями VulkanTexture.h и VulkanglTFModel.h был объявлен define.

    А на самом деле где этот define определяется и как это место относится ко всем этим заголовочным файлам?

    Разве препроцессор не последователен и может включать файлы в том порядке, в каком ему заблагорассудится, а не как я написал?

    Нет, не может, но возможно ты не вполне понимаешь сам, в каком порядке ты написал их подключение. Так, например, Helpers/VulkanTexture.h и VulkanTexture.h -- это один и тот же файл, или разные? Если один и тот же, то из-за #pragma once в нём он не подключается в VulkanglTFModel.h, а если разные -- то подключается.

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