• Почему выполнение программы ускоряется?

    @Mercury13
    Программист на «си с крестами» и не только
    Потому что у вас неэффективный алгоритм вычисления НОД, работающий на вычитании, а не на делении с остатком.
    Естественно, НОД(1,6) = НОД(1, 6−1=5) = НОД(1, 5−1=4) = НОД(1, 4−1=3) = НОД(1, 3−1=2) = НОД(1, 2−1=1) = НОД(1, 1−1=0) = 1
    НОД(2,6) = НОД(2, 6−2=4) = НОД(2, 4−2=2) = НОД(2, 2−2=0) = 2
    С арифметическим переполнением никак не связано. Просто даже в результате переполнения получились немаленькие числа.

    Как надо: НОД(1,6) = НОД(6, 1%6=1) = НОД(1, 6%1=0) = 1
    Аналогично для НОД(6,2) — в общем, сходится довольно быстро.
    Ответ написан
    Комментировать
  • Как правильно связывать между собой разные интерфейсы?

    @Mercury13
    Программист на «си с крестами» и не только
    Тут лучше всего использовать шаблонные классы.
    interface Collection <T> {}
    class PeopleCollection implements Collection <Person> {}
    Ответ написан
    Комментировать
  • Насколько работает линкер GOLD в MinGW и почему Invalid character?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    В 2021 используйте LLD.
    Ответ написан
    Комментировать
  • Существует ли библиотека Zip с потоковой записью?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    В конце концов перешёл на собственный порт MiniZip.
    Ответ написан
    Комментировать
  • Существует ли где-то libmysql.dll x86 8.0?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    Лучше использовать MariaDB с плагинами. Мария меньше и для неё есть что угодно.
    Ответ написан
    Комментировать
  • Что означают фигурные скобочки и то что в них написано в векторе с++?

    @Mercury13
    Программист на «си с крестами» и не только
    Это так называемый «универсальный инициализатор» Си++11. Иногда это действительно initializer_list, но не сейчас. Здесь он эквивалентен вызову конструктора
    std::vector<char>(data.get(), data.get() + size)
    Ответ написан
    Комментировать
  • Как выводить переменную в MessageBox?

    @Mercury13
    Программист на «си с крестами» и не только
    Собственно, Александр Ананьев всё сказал.
    А я хочу дополнить.
    1. Вы решили заложиться на компиляцию ANSI/Unicode, но (LPCTSTR)L"Account Details" неправильно сконвертируется в ANSI. Правильно _T("Account Details"). Хотя двадцать два года спустя на компиляцию ANSI, думаю, можно и забить?
    2. MessageBox не предполагает выбора — зачем функции возвращать int?
    Ответ написан
  • Дедекиндово сечение. Какой в нем смысл?

    @Mercury13
    Программист на «си с крестами» и не только
    Один из способов получить из рациональных чисел действительные.
    Проблем не будет.
    Однако эти супремумы и инфимумы стоило бы помучить.
    Ответ написан
    1 комментарий
  • Почему при делении 5/9 получается 0.55555....6?

    @Mercury13
    Программист на «си с крестами» и не только
    Калькулятор Windows использует компьютерный double для трансцендентных операций, и (как, впрочем, и электронные калькуляторы) самописную десятичную арифметику для сложения/вычитания/умножения/деления. Ну и хорошо — про артефакты компьютерных (двоичных) дробных рассказывать не придётся.
    Возьми и округли в десятичной системе 0,5555555555555… — разумеется, будет 0,556. Или 0,5555556 — всё зависит от того, сколько разрядов хочешь оставить.
    Ответ написан
    Комментировать
  • Не понимаю задачу, немогу решить,объясните решение?

    @Mercury13
    Программист на «си с крестами» и не только
    Ваш код решает одну задачу, постоянно выводя 38 — и ту через какую-то задницу.
    Во-первых, надо ВВЕСТИ информацию, а не пережёвывать цифры 12 и 126 непонятно каким раком.
    Во-вторых, вам надо получить x = n % 50. Если он 0, то и вывести 0 — иначе вывести 50 − x.
    Ответ написан
    Комментировать
  • Vector - объявление элементов, в чем разница между двумя способами?

    @Mercury13
    Программист на «си с крестами» и не только
    Первый способ: создаётся initializer_list, вызывается конструктор. Наиболее эффективен для простых тупых объектов.

    Второй способ эквивалентен push_back(string("vec1")) и сильно полагается на оптимизацию передаваемых параметров. Наименее эффективен.

    Третий способ гарантированно не создаёт промежуточные объекты (вызывает конструктор string(const char*) уже на месте). Вместе с reserve(3) наиболее эффективен для управляемых объектов.

    UPD. 2 и 3 для string() не очень сильно различаются из-за эффективного переноса. А вот для более крупных объектов 3 лучше.

    UPD2. Начиная с Си++20, 1 лучше, но только из-за того, что Си++ научился делать полноценные string’и при компиляции — то есть управляемый объект string обзавёлся некоторыми чертами тупого.

    UPD3. Ни один компилятор пока constexpr string пока не поддерживает. Но ведь ни у кого стабильного 20 пока нет, правильно?
    Ответ написан
    9 комментариев
  • Как работает просчёт траектории в играх типа Angry Birds?

    @Mercury13
    Программист на «си с крестами» и не только
    От массы тела зависит взаимодействие с другой массой.
    От силы броска и массы тела — начальная скорость v.

    Чаще всего действительно не доводят до аналитического решения, а каждый кадр происходит шаг численного решения дифференциального уравнения:
    (vx, vy)′ = (0, −g) — ну или сопротивление воздуха добавьте
    (x, y)’ = (vx, vy)

    Гуглите «методы Рунге—Кутты», нам хватит метода второго порядка.
    Ответ написан
    Комментировать
  • Как создать изображение из массива uint8_t?

    @Mercury13
    Программист на «си с крестами» и не только
    Дело не в этом. Массив 16·8 (вместо 32×32) и такая картинка — вероятно, формат 1-битный.
    Попробуйте Format_Mono или Format_MonoLSB.
    Ответ написан
  • Как использовать одну гарнитуру на двух устройствах одновременно?

    @Mercury13
    Программист на «си с крестами» и не только
    Для микрофона — простейший тумблер. Для звуков — минимальный микшер с AliExpress.

    ВНИМАНИЕ! Компы обычно проверяют микрофоны по вставленному разъёму, а телефоны — по электрическому подключению. Если ваше устройство реагирует именно на подключение — в НЕиспользуемом устройстве микрофон подключить к земле.
    Ответ написан
    Комментировать
  • Что не так в Eclipse IDE?

    @Mercury13
    Программист на «си с крестами» и не только
    printf("%c", x);
    Форматную строку упустил.
    Ответ написан
    1 комментарий
  • Как изменить константу C в общем уравнении прямой Ax+By+C=0 при сдвиге прямой по вектору?

    @Mercury13
    Программист на «си с крестами» и не только
    U=(A,B) — перпендикулярный вектор прямой.
    Тогда dC = PrUV·|U| = U·V
    Всего лишь скалярное произведение.
    Проверка. x + y = 0, U=(1,1), V = (1,2)
    dC = 1·1 + 1·2 = 3, правильно?
    Ответ написан
    Комментировать
  • Как посчитать математические градусы?

    @Mercury13
    Программист на «си с крестами» и не только
    А арктангенс надо брать arctg((200−100)/(200−100))
    Кроме того, для этого есть функция atan2, определённая для всех x и y, одновременно не равных 0.
    Ответ написан
    4 комментария
  • Как переписать данный код?

    @Mercury13
    Программист на «си с крестами» и не только
    Я бы предложил поискать в коде ошибку, есть большое подозрение — первым множителем так и просится size. Ну или деление size %/ msize — невозможно сказать. Ну или условием будет не меньше, а больше или больше-равно. Но будем работать как есть.

    int v = msize / size;
    if (i < msize % size) ++v;
    int teqportion = msize * v;


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

    @Mercury13
    Программист на «си с крестами» и не только
    Java.
    «Технологии» вам не нужны, вам нужно программить что-то минимально действующее. А в Си++ слишком легко «выстрелить в ногу».
    А когда научитесь программить — тогда и Си (с крестами и без) станет понятнее.
    Ответ написан
    Комментировать
  • Можно ли удалить пробелы в начале и в конце строки без создания нового массива?

    @Mercury13
    Программист на «си с крестами» и не только
    Строковый литерал " ab " находится в особом сегменте данных, который (если процессор и ОС позволяют) только для чтения. А память сегмента данных освободить и сделать «кучей» нельзя.

    Если предположить, что текст " ab " находится в «куче» — эта самая куча является сложной структурой данных и память выделяется с выравниванием. Потому функция realloc может (но не обязана) отдать конец или приделать память к концу. Отдать начало будет сложнее, и ни одна известная мне библиотека функций на это не способна.

    Кроме того, Си++ придумал объект string_view именно для этого — чтобы передавать строки в функцию, абстрагируясь от выделения памяти и даже от оконечного нуля. Потому у string_view нет функции c_str().

    Разумеется, вы можете сделать что-то вроде
    char* str2 = str + 2;
    str2[2] = '\0';
    // А str оставь, уничтожать как-то придётся

    Разумеется, если str находится в куче. Сегмент с литералами, напоминаю, только для чтения, и в ОС вроде DOS, где менять можно, такая замена может вызвать нехорошие побочки.
    Ответ написан
    3 комментария