• Можно ли менять логический оператор в зависимости от переменной?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    if (f_pos.x * x_direction > R) {
        rot_direction2 = false;
    }
    Ответ написан
    Комментировать
  • Как написать браузер на C++ для Linux?

    revenger
    @revenger
    49.5
    Почитайте для начала, может передумаете
    https://habr.com/ru/post/541196/
    Ответ написан
    Комментировать
  • Как добавить в конец char символы?

    @rPman
    в c++ уже очень давно есть полноценные (и соответственно медленные, но не в реализации а идеологически) строки, класс string с которыми и + прокатит и синтаксически удобные
    Ответ написан
    Комментировать
  • В каких случаях лучше использовать wchar_t, char16_t, char32_t вместо char в C++?

    vabka
    @vabka
    Токсичный шарпист
    В тех случаях, когда ты хочешь использовать UTF-16LE, UTF-16 или UTF-32 соответственно.
    Если хочешь использовать восьмибитную кодировку или UTF-8, то бери char или char8_t, последний сделан специально для UTF-8
    Ответ написан
    Комментировать
  • Можно ли увидеть программный код?

    DollyPapper
    @DollyPapper
    1)Да если она опенсорс, ну или дизассемблировать
    2)Это называется отладчики(windbg, x64dbg, softice) и дизассемблеры(ida, radare наверное еще есть, я не спец. в данной теме)
    3)Множество техник, но добиться "никто никогда его не увидел" невозможно, только если эта программа будет хранится у вас на диски и в интернет не попадет. В ином случае знающие люди вооружившись инструментами из п.2 смогут увидеть код ваш программы.
    4)Так же как и обычной программы, вооружившись инструментами из п.2 и знаниями об устройстве ОС, процессора, языка С(не обязательно) и ассемблера(обязательно). Хотя вирусная программа может быть написана и на вообще скриптовом языке, который в маш. код не компилируется(ну на прямую), тогда можно просто сесть и читать код вредоносной программы ровно в том виде в котором он написан.
    Ответ написан
    4 комментария
  • Как отсортировать точки против часовой стрелки в трёхмерном пространстве по правилу правой руки имея их координаты и нормаль?

    Ocelot
    @Ocelot
    Берём два вектора: 1->2 и 1->3, считаем их векторное произведение. Если его направление совпадает с направлением нормали треугольника, значит точки идут в правильном порядке. Если нет, меняем точки 2 и 3 местами.
    Ответ написан
    Комментировать
  • Что такое Статический и Динамический массив?

    @res2001
    Developer, ex-admin
    Память под статический массив выделяется на стеке. При выходе из области видимости стек очищается и память под массивом освобождается автоматически (не нужна операция освобождения памяти, операция есть, но о ней позаботится компилятор самостоятельно).

    Память для динамического массива выделяется в динамической памяти (в куче) (new[]). Когда массив становится не нужным память должна быть освобождена (delete[]), иначе произойдет утечка памяти.

    В связи с вышеизложенными принципиальными отличиями, есть несколько следствий:
    1. Имя статического массива это не указатель. Это можно понять например сравнив, что возвращает sizeoff() для статического массива и для динамического. Хотя в некоторых ситуациях компилятор ведет себя так, как будто имя статического массива это указатель, например: можно передать имя статического массива в функцию, принимающую указатель.
    2. У динамического массива нет имени. Операция new[] возвращает указатель. Имя есть у указателя.
    3. Внимание! Оба варианта массивов имеют фиксированный размер. Изменять его нельзя!
    То что в std::vector вы можете укладывать кучу элементов постепенно, не указывая нигде предварительного размера является следствием того, что std::vector скрывает от вас всю работу, которую он при этом делает. При добавлении нового элемента, для которого нет места, он выделяет память для нового массива большего размера, копирует старый массив в новый, удаляет старый массив, добавляет новый элемент. Если идет интенсивная работа с push_back(), то это может ОООЧЕНЬ дорого стоить. std::vector - это удобно, но необходимо всегда помнить, за счет чего достигается это удобство. std::vector - это не динамический массив - это обертка над ним для более удобной работы с динамическим массивом.

    В языке Си (C99) есть такая штука как Variable Length Array (VLA) - это статический массив с изменяемым размером. Т.е. вы можете, например, в функции объявить int arr[N], где N будет передаваться в функцию как параметр.
    В стандарте С++ VLA нет! Но, например, тот же gcc с опциями по умолчанию разрешает его использования в С++ проектах. С опциями, заставляющими gcc более жестко следовать стандарту, он может запрещать использовать VLA в С++ проектах. Но не рассчитывайте, что все компиляторы будут так делать. Например микрософтовский компилятор в принципе не умеет в VLA (хотя я уже пару лет не проверял это).
    VLA может показаться классной штукой.
    Но, например, в ядре Линукс в свое время проводили целую компанию по выпиливанию VLA из исходников. Торвальдс высказывался негативно про VLA. Все это при желании можно нагуглить.
    Стоит помнить, что размер стека ограничен, а VLA то же выделяется на стеке. Кроме того выделение памяти для обычного статического массива это просто увеличение счетчика стека на константу (и все, одна операция сложения регистра с константой, а компилятор одной операцией выделяет память для всех переменных в текущей области видимости). С VLA все сложнее с выделением и удалением. Так же sizeof() для обычного статического массива это операция времени компиляции (при выполнении будет уже заранее известная константа), для VLA - это полноценный вызов функции.
    Ответ написан
    1 комментарий
  • Компилятор для простого к примеру main.cpp файла?

    vabka
    @vabka
    Токсичный шарпист
    1. Visual Studio build tools - MSVC тулчейн, и прочие инструменты, но без Visual Studio.
    2. msys2 или mingw - юниксовый тулчейн
    3. WSL2 - нормальный линукс со всеми тулзами, но требовательный к ресурсам, тк запускается виртуалка, и места не мало занимает. Зато по производительности не уступает полноценному линуксу, в отличие от mingw/msys.
    Ответ написан
    2 комментария
  • Как можно посчитать площадь сложной фигуры?

    hugga
    @hugga
    Код на Python

    import numpy as np
    from skimage import draw
    
    height, width = 700, 1300
    image = np.zeros((height, width), dtype=np.uint8)
    
    # генерируем рандомные окружности
    N = 250
    np.random.seed(10)
    xy = np.random.randint((0, 0), (height, width), (N, 2))
    radii = np.random.randint(40, 60, N)
    
    
    # закрашиваем окружности (цветом 1, фон 0)
    for x, y, r in np.column_stack((xy, radii)):
        rr, cc = draw.disk((x, y), r, shape=(height, width))
        image[rr, cc] = 1
    
    
    # подсчитываем количество ненулевых пикелей
    # или просто суммируем, если единицы
    # и получаем долю от всех пикселей
    area_percent = np.count_nonzero(image)/(height * width)
    print(f'площадь занимаемая окружностями {area_percent*100}%')


    Вывод: площадь занимаемая окружностями 88.35087912087913%

    Можно увеличить разрешение изображения, отмасштабировав окружности и получить высокую точность площади

    perimeter.jpg?extra=M1Y1hNBKZUDrgIvmBLNUDQxrMue771W8rPZ7E9CuGAhCLOH46lxqTV5PWrEssBMxi6Q40IxaBK7w8vIc0OqyVE8PNlgkO51Ixc12kGLKscxRPPS3rKpV6RVn2icBbtqNQRr4mNYVDLHvKYba8v39Itc
    area.jpg?extra=Esxrkd7zGib63ZDJTIN6Bc_vG31ZSX9x5kSLuFJu8un3kPV0vZC1YK8WveCfqGHmugstHIcTsGGh0NpDjVpeRppfi5vGlinT_mh6JyJk1fBh529PvnWE8RDPPj7gepkJ7eKpGwOnyDYa5_srB6IHegM
    Ответ написан
    Комментировать
  • Есть песненные синтезаторы речи?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Конечно есть.
    Гугли по слову Vocaloids.

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

    На ардуино есть отличная функция map и на англ., для преобразования диапазонов.
    spoiler

    _______________________
    Математически функция map() может быть записана так:
    
    long map(long x, long in_min, long in_max, long out_min, long out_max)
    {
      return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
    }
    //а если заменить long на float или double, то она будет работать с плавающей точкой
    //и соответственно изменить имя функции, что бы оно не пересекалось с родной библиотекой ардуины

    _______________________

    Если считать в милливольтах, т.е.
    y = map(x, 0, 1023, 0, 5000), т.е. 1023 - соответствует 5000 мВ, т.е. 5 В.

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

    GavriKos
    @GavriKos
    Можно.
    Ну вообще нормальные компляторы умеют не пересобирать весь проект если менялся один файл.
    Но можно и в библиотеку скомпилить - так и гуглить c++ compile to library. Получите на выходе dll (или еще что в зависимости от платформы) и будете ее юзать
    Ответ написан
    Комментировать
  • Как сделать анализ двоичных кодов на возможность обнаружения?

    GavriKos
    @GavriKos
    Скажем так - эта задача не относится прям к плюсам. Тут больше про алгоритмизацию, математику и вот это все. А язык всего лишь инструмент. Так что вот берете гугл, и читаете про "коды коррекции" и прочее.
    Ответ написан
    Комментировать
  • Как оптимизировать алгоритм по выводу поля игры сапёр?

    hint000
    @hint000
    у админа три руки
    Выкинуть mine_search(...) в мусор целиком.
    sapper(...) переписать следующим образом: сначала проходим циклом по m_array и расставляем в array мины.
    Только после полной расстановки мин заполняем нулевые клетки. Это очень сильно ускорит выполнение.
    Ответ написан
    1 комментарий
  • Как сгенерировать все возможные комбинации из двух списков?

    hint000
    @hint000
    у админа три руки
    С уточнением про повторения цифр это эквивалентно перебору комбинаций
    0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 1
    0 0 0 0 0 0 1 0
    0 0 0 0 0 0 1 1
    ...
    1 1 1 1 1 1 1 1
    (всего 256 комбинаций),
    где 0 означает, что берём элемент из atoms,
    1 означает, что берём элемент из dopedatoms, например
    1 0 0 0 0 0 0 0 соответствует ['Mn1', 'Co2', 'Co3', 'Co4', 'Co5', 'Co6', 'Co7', 'Co8']
    Так что можете сделать цикл от 0 до 255, разбивать переменную цикла на биты и по битам формировать комбинации.
    В условиях не упомянуты граничные случаи 0 0 0 0 0 0 0 0 и 1 1 1 1 1 1 1 1, если они не нужны, то цикл делать от 1 до 254.
    Ответ написан
    2 комментария
  • Где ошибка.....?

    @res2001
    Developer, ex-admin
    Функцию count реализуйте макросом:
    #define count(arr)     (sizeof(arr) / sizeof(arr[0])

    Внутри функции вы не можете получить размер статического массива, объявленного в другой функции.
    Ответ написан
    Комментировать
  • Вместо значений выдает -nan(ind). Что делать?

    15432
    @15432
    Системный программист ^_^
    вы (2 * a * c) в скобки-то возьмите,
    а то вы не делите, а умножаете
    Ответ написан
    Комментировать