Ответы пользователя по тегу Программирование
  • Как правильно генерировать псевдослучайные числа?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Практически все генераторы псевдослучайных чисел генерируют именно последовательности, где, зная начальное число (seed), можно повторить всю последовательность. Для генерации действительно случайных чисел используют аппаратные приспособления или накопление энтропийных событий (задержки между нажатиями на клавиши, движения мыши).
    Код, который использует Java, приведён в этой же статье, как и код, восстанавливающий seed по двум подряд идущим результатам nextInt.
    Ответ написан
    Комментировать
  • Как посчитать количество знаков после запятой у флоат?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Тут основная проблема в том, что для компьютера, при использовании чисел одинарной точности, 4.63710 = 100.1010001100010010011012 = 4.636999607110, то есть точно посчитать количество десятичных знаков после запятой невозможно. Приблизительно можно считать беря дробную часть числа. Если эта часть близка к нулю (r < epsilon) или к единице (1-r < epsilon), то, с какой-то вероятностью можно сказать, что мы посчитали длину дробной части. Если нет - то умножаем дробную часть на 10, увеличиваем счётчик и проверяем сначала.
    Ответ написан
    8 комментариев
  • Как найти дубликаты в массиве 64-битных чисел по (битовому) расстоянию Хэмминга?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Расстояние Хэмминга на MySQL посчитать несложно.
    BIT_COUNT(HEX(:value1) ^ HEX(:value2))
    Но надо определиться с понятием "группы таких чисел". Возьмём три двоичных числа (001, 011, 111) и определим расстояния между ними.
    d(001, 011) = 1
    d(001, 111) = 2
    d(011, 111) = 1
    Таким образом, первое и третье числа находятся на расстоянии 1 до второго, но между собой они находятся на расстоянии 2. Если границей расстояния выбрать 1, то как должны сформироваться группы?
    Ответ написан
    8 комментариев
  • Правильно ли делать циклы рекурсиями?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В JS - неправильно, поскольку не поддерживается концевая (хвостовая) рекурсия.
    Ответ написан
    Комментировать
  • Возможен ли универсальный абстрактный алгоритм подхода к решению нетривиальных задач?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    На самом деле, ханойская башня - пример тривиальной задачи, и решается практически всегда именно рекурсией, по принципу индукции - решение задачи по перекладыванию N колец со стержня A на стержень C - это перекладывание N-1 кольца с A на B, 1 кольца с A на C и N-1 кольца с B на C.
    Ответ написан
    Комментировать
  • Как сделать множественный выбор C++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    int res;
    if (2 == a && 2 == b && 2 == c)
      res = 0;
    else if (1 == a && 1 == b && 1 == c)
      res = 1;
    else if (2 == a && 1 == b && 1 == c)
      res = 9;
    Ответ написан
  • Как применять перечисляемый тип enum?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Всё очень просто. Enum используется, когда вариантов значений не очень много и они заранее известны. Например простейший светофор имеет три цвета:
    typedef enum {
      red,
      yellow,
      green
    } color;

    Теперь определив переменную типа color мы можем присваивать ей значение не в виде числа, а в виде цвета.
    color traffic_light_state;
    traffic_light_state = red;

    По умолчанию C трактует значения enum как целые числа начиная с нуля. Поведение можно изменить прямым указанием, например
    typedef enum {
      red = -1,
      yellow,
      green = 3
    } color;

    определит red как -1, yellow как 0 (-1 + 1), green как 3.
    Ответ написан
    1 комментарий
  • Как избавиться от переполнения?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Что значит "переполнения беззнаковых целых быть не должно"?
    То есть, объявив переменную как unsigned int я сразу получу возможность считать любую разрядность?
    Конечно же переполнение есть, uint32 может содержать значения [0..4'294'967'295], uint64 - [0..18'446'744'073'709'551'615]. Хотите больше - используйте или пишите сами реализацию длинной арифметики.
    Ответ написан
    3 комментария
  • Как определить входит ли координаты в круг?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. Записать маршрут в базу данных, например MySQL умеет работать с географическими данными.
    2. Определять отклонение от маршрута (ST_Distance), если больше заданного - оповещать.
    Ответ написан
  • Как проверить два *.txt на наличие совпадений по словам на C?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для начала надо определиться, что значит "одинаковые слова". Если важен смысл слов, то это непросто (идти, иду, пойду, шёл - одно и то же слово).
    Если слово берёте просто как цепочку символов, то всё проще. Открываете файл через open(name, O_RDONLY | O_BINARY), пишете подпрограмму, которая читает файл посимвольно, пропускает всё до первой буквы, читает пока не встретится небуквенный символ, возвращает слово. В основном цикле получаете из подпрограммы слово, записываете его в словарь. Если пишете на чистом C, то словарь придётся реализовать самому, например как дерево.
    Затем также читаете второй файл и ищете слова в собранном словаре.
    Ответ написан
    3 комментария
  • Как нарисовать только часть окружности, заданной точками кривой Безье?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. Если отрезок P0P2 делит окружность пополам, значит центр окружности лежит на этом отрезке.
    2. Из условия непонятен радиус окружности. Если она должна проходить через точки P0 и P2, то центр окружности лежит на середине отрезка.
    3. Раз отрезок делит окружность пополам, то дуга будет начинаться от угла вектора P2P0, и заканчиваться на ±π от этого угла. Направление вращения определяется положением точки P1 относительно вектора P2P0.
    Ответ написан
    Комментировать
  • Как получить полное тело страницы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Открываете сайт в браузере, запускаете средства разработки (F12), переходите в раздел "Сеть", нажимаете на странице "показать всё", в логах смотрите запрос со всеми параметрами.
    P.S. Смотрите куку запроса simasettings, там фрагмент
    s:16:"isInfinityScroll";i:0
    меняется на
    s:16:"isInfinityScroll";i:1
    Ответ написан
  • Как рассчитать время выполнения программы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Взять ассемблерный код программы, для каждой команды по справочнику определить количество тактов, за которые она выполняется. Пройти по коду программы, определив все ветвления и количество проходов каждого цикла. Просуммировать такты всех выполняемых команд, умножить на время выполнения одного такта.
    На современных процессорах с вычислительным конвейером расчёт невозможен, так как количество тактов на команду однозначно не определено.
    Ответ написан
    Комментировать
  • Wi-Fi на Arduino: ESP8266 AT-команды в режиме клиента как получить веб страницу?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Минимально надо передать две строки HTTP-запроса и пустую строку после них
    GET / HTTP/1.1
    Host: arduino.zhodinovel.com
    Ответ написан
    5 комментариев
  • Как сделать BigInteger?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Можно представить число в виде строки, можно как набор "цифр" по основанию, скажем, 1'000'000'000, записанных в массив. После выбора представления надо написать операции для работы с ним (сложение, вычитание, деление, умножение и т.д.), затем оформить это всё в класс с перегруженными операциями.
    Ответ написан
    4 комментария
  • Как реализовать рекурсивную функцию волнового алгоритма на языке c?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как-то вы перемудрили, рекурсия здесь совершенно не нужна.
    Для начала создаём очередь, включаем в неё исходную точку.
    Пока очередь не пуста берём из неё точку, всем её доступным незаполненным соседям записываем длину пути и помещаем их в очередь. Можно прервать цикл и раньше, по достижении заданной точки.
    Обратным ходом восстанавливаем путь.
    Ответ написан
  • Как преобразовать число 568be27e005bd6b61a8b4567?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Основание 16 - 4 бита
    Основание 64 - 6 бит
    Соответственно, читаем из строки по три символа справа (12 бит), рассматриваем их как целое число, делим на две части по шесть бит, составляем часть новой строки из двух соответствующих символов. Взяв 64-значный алфавит [0-9A-Za-z@#]
    568be27e005bd6b61a8b456716
    56716 = 0101'0110'01112 = 010101'1001112 = Ld64
    8b416 = 1000'1011'01002 = 100010'1101002 = Yq64
    ...
    56816 = 0101'0110'10002 = 010101'1010002 = Le64
    568be27e005bd6b61a8b456716 = LelYVW1RrROQYqLd64
    Ответ написан
    2 комментария
  • Как найти из 4 чисел, где 3 равные между собой одно не равное, за один раз?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Без явных условий, но с плавающей арифметикой, посему неточно:
    sqrt(pow(x1+x2-x3-x4))
    С одним условием при положительных числах:
    x = x1+x2-x3-x4;
    if (0 > x) x = -x;
    Ответ написан
    Комментировать
  • Как получить значение из потока c++ builder?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Перед чтением верните указатель в начало потока
    fs->Seek(0, soFromBeginning);
    Ответ написан
    1 комментарий
  • Как реализовать обработчик консольных комманд в приложении?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Тут всё зависит от уровня сложности этих команд. Если там одна-две лексемы, то достаточно сравнения строк, если команды сложные - можно написать небольшой лексер и конечный автомат, отрабатывающий команды.
    Ответ написан
    Комментировать