Задать вопрос
  • Как быть со слепой ветвью в TortoiseHg?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    Нашёл решение.
    1. Перейти (update) на рабочую ветвь.
    2. Слить (merge) ветви, сказав: «Ignore changes from other branch» (или как там?)
    Ответ написан
    Комментировать
  • На чем лучше программировать для кроссплатформенности?

    @Mercury13
    Программист на «си с крестами» и не только
    Два вопроса.
    1. С чем имеет дело ваша программа/библиотека? Есть ли у неё что-то интересное сверх консоли — окна, сеть и прочее?
    2. Нужно ли, чтобы один и тот же пакет — физически один и тот же — работал под разными ОС?

    Минус-минус: это самое простое. Используйте хорошо заспецифицированный язык с реализациями под разные ОС вроде Си++, Java и Питона.
    Плюс-минус: используйте такой же язык, но с кроссплатформенным фреймворком. Я бы предложил фреймворк Qt и библиотеку Boost, хотя на каждом языке есть что-то своё.
    Минус-плюс: Используйте язык со стандартизированным промежуточным кодом вроде Java. Или Питон и JavaScript, исполняющие напрямую исходный текст.
    Плюс-плюс: Тут нужны и стандартизированный промежуточный код, и кроссплатформенный фреймворк. Поскольку часто этот фреймворк нужно отдельно качать в версии под нужную ОС — тут покатит Java и, возможно, Питон.
    Ответ написан
    2 комментария
  • Где и как хранится имя переменной?

    @Mercury13
    Программист на «си с крестами» и не только
    Для компилируемого языка (коим является Си) — в объектном файле (и будет выброшено, когда линкер соберёт EXE) и в отладочных данных. Больше нигде. Переменные различаем их адресом.
    Возьми DosBox, возьми старый добрый Turbo Assembler и собери какой-нибудь COM-файл (пускай даже по руководству). А затем возьми хакерский просмотрщик типа Hiew и посмотри дизассемблер того, что получилось. Почему COM — потому что устроен он просто.
    Ответ написан
    Комментировать
  • Как решить данную задачу?

    @Mercury13
    Программист на «си с крестами» и не только
    Задача сложна и требует серьёзного исследования. Дело тут в том, что второй эшелон — склад промежуточного хранения — добавляют, если затраты НЕлинейны и в больших объёмах развоз товара дешевле. Это, конечно, можно сымитировать более дешёвым завозом на склады. (А также чтобы разгрузить «мёртвые запасы» магазинов и законом больших чисел скомпенсировать случайные колебания спроса, но это, как я понял, не ваше дело.)

    У вас написано: «Стоимость доставки это расстояния между точками». Таким образом, стоимость доставки не зависит от объёма подвоза, а зависит только от расстояния? Тоже, так сказать, нелинейное поведение. Приближённое решение ищите в алгоритмах кластеризации: зона, охватываемая одним складом — и есть кластер. Если же нужно точнее, приходится использовать какие-нибудь эвристики.

    Например, расположим семь складов в каких-нибудь городах, вычислим вытекающую стоимость. А теперь вопрос: можно ли перенести какой-нибудь склад в соседний город, чтобы было дешевле? Итерационно работаем, пока не уляжемся в «оптимальное положение». Случайно набрасываем семь точек — и «скатываемся вниз», пока не успокоимся, и так много-много раз.

    Лучше выводить не одно решение, а несколько — например, до 120% от оптимального. Дело в том, что после компьютерного вычисления возникнут какие-то человеческие факторы: узнав, что восточный склад только в Комсомольске-на-Амуре, а северо-западный можно ставить где угодно в окрестностях Ленинграда, принимаем решение ставить склады в Комсомольске и недалеко от ленинградского метро.
    Ответ написан
    Комментировать
  • Как реализовать приближенный двоичный поиск?

    @Mercury13
    Программист на «си с крестами» и не только
    Алгоритм такой.
    1. Реализуй двоичный поиск с указанием места, куда вставить (см. Википедию).
    2. Если вставить до первой позиции или за последнюю — return соотв. первое или последнее число.
    3. В противном случае выяснить, какое ближе из (i−1)-го и i-го.

    Дома проверю, где там ошибка в двоичном поиске, в нём любят ошибаться.

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

    @Mercury13
    Программист на «си с крестами» и не только
    На клиенте — как уже было сказано, это невозможно. Производители браузеров затягивают и затягивают гайки, чтобы даже плагины неугодные не работали, давая попущение только Флэшу. Что уж говорить про машинный код.
    Но существует несколько обходов.
    Первый применён в службе GoToMeeting. Без программы под вашу ОС не обойтись, но по обычной HTTP-ссылке запускается эта программа. Как технически — не исследовал.
    Второй обход. Существуют службы, которые запускают EXE на своих виртуальных машинах и транслируют наружу результат. Спрошу у босса, какой пользуемся конкретно мы.
    Третий — часто в браузере делают игры для DOS и старых приставок через эмулятор, написанный на Java.
    Ответ написан
    1 комментарий
  • Как задать в Windows 10 цвет плитки по умолчанию?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    А я нашёл.
    https://msdn.microsoft.com/en-us/library/windows/a...

    Вкратце. Создаём файл НазваниеПрограммы.VisualElementsManifest.xml с таким содержимым.
    <Application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <VisualElements
            BackgroundColor="#000066"
    		ForegroundText="light" 
    		ShowNameOnSquare150x150Logo="on" />
    </Application>

    Этого мне хватило. Если нужны ещё и большие иконки — см. по ссылке.
    Ответ написан
    Комментировать
  • Как сравнивать значения строки в структуре на языке С++?

    @Mercury13
    Программист на «си с крестами» и не только
    1. У вас неверное условие (z[i].birth >= ageyoungest).
    2. Никакой защиты от переполнения буфера в scanf.
    3. Идентификатор birth реально означает возраст. Плохо.
    4. Неверное условие
    if (z[i].education == "master" || z[i].education == "specialist" || z[i].education == "bachelor")
    . Для массивов это просто сравнение адреса массива с адресом вкомпилированной в программу строчки, что автоматически даёт false. Используйте str(n)cmp.
    5. Излишнее условие
    else if (z[i].education != "master" || z[i].education != "specialist" || z[i].education != "bachelor")
    . Оно автоматически выполнено.
    6. Отсутствует delete[] employees;
    Ответ написан
    Комментировать
  • В чем проблема файла std lib facilities.h?

    @Mercury13
    Программист на «си с крестами» и не только
    Проблема в подключённом к нему файле hash_list или hash_map (они никогда не были стандартом Си++, но по факту их многие реализовывали, с двумя разными стандартами — один от SGI, второй переименованный вошёл в STL).
    Переименуйте в unordered_list, unordered_map. И надейтесь, что третий и далее параметры шаблонов не использовались.

    Существуют версии этого файла, откорректированные под C++11.

    А можно заглушить ошибку, добавив в «#defines» проекта _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS. И будьте готовы, что в один прекрасный день вы обновите компилятор и хватитесь этого файла.
    Ответ написан
    Комментировать
  • Как найти среднее Hue (или другую «закольцованную» величину)?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    Пока самый удачный способ таков.

    Переходим в координаты (x, y): x = cos(hue) · sat, y = sin(hue) · sat.
    Там можно получить среднее (x, y) и взять atan2.
    Ответ написан
    Комментировать
  • Как нарисовать изгиб мостика под нагрузкой?

    @Mercury13
    Программист на «си с крестами» и не только
    В первом приближении (деформации малы, балка лёгкая) — половина параболы.
    Если точно — решить можно только численно.
    Ответ написан
    Комментировать
  • Почему появляется ошибка при выделении памяти?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Чему равняется nChilds?
    2. Сам-то CalculateCountOfObjectsInside() в порядке?
    3. Случайно наша система не ходит по каталогам «.» и «..»?
    Ответ написан
    3 комментария
  • Что изучить C или C++?

    @Mercury13
    Программист на «си с крестами» и не только
    Информационная безопасность требует от вас понимать, что такое эксплойт. Потому нужны оба языка. Может, не очень глубоко, но какой-то код надо писать на том и на другом.
    Дело в том, что «няшная сишка» стала отличным полигоном для эксплойтов, да и низкоуровневые библиотеки пишут часто на ней (для компактности). А на Си++ пишут современный софт.
    Раз вы на ПэХаПэ, вы не понимаете, что такое указатель, и потому лучше начать с Си++. Просто потому, что как-то можно программировать без указателей, а понять, что это за чёрт указатель — дело наживное.
    Ответ написан
  • Как создать связный список?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Виртуальный деструктор тут нужен — ведь в списке будут вперемешку элементы разных классов.
    2. Не видны два компонента, которые и делают список связным — указатель на следующий элемент (test* next) и указатель на голову (test* head = NULL).
    3. В попытке скрыть реальную жизненную задачу — ведь СС не вещь в себе, а решает какую-то задачу вроде «держать список объектов в игре» — вы слишком уж напереименовывались.
    Ответ написан
    4 комментария
  • Найти максимальное и минимальное значение от деления нацело?

    @Mercury13
    Программист на «си с крестами» и не только
    UPD. Переписал с нуля.
    r <= z/x < r + 1
    l <= z/y < l + 1

    Тогда y/x = z/x : z/y > r / (l+1)
    С другой стороны: y/x < z/x : z/y < (r+1)/l

    Пока вижу диапазон [r / (l+1)]; [(r+1)/l]
    Второе — минус один, если точное целое: приблизиться-то можно, а достичь нельзя. Сымитируем это таким образом…
    [r / (l+1)]; [r/l]

    Покажем, что границы достижимы (например, первая). Она затрагивает два неравенства.
    z/x < r + 1
    z/y >= l
    Подбором x, y и z можно довести второе до равенства и сколь угодно сильно приблизить первое.

    UPD2. Пусть r = [z/x] = 10, l = [z/y] = 3
    Тогда [y/x] будет в пределах от [10/4] = 2 до [10/3] = 3. А Если без целой части — то от 2,5 до 3 2/3.
    z = 100.000, x=10.000, y=25.001, y/x = 2,5001
    z = 100.000, x = 9091, y=33.333, y/x ≈ 3,66659
    Ответ написан
    Комментировать
  • Как быстро проверить правильная ли скобочная последовательность?

    @Mercury13
    Программист на «си с крестами» и не только
    Критерий таков.
    1. Баланс ( и ) должен сохраниться.
    2. а) Либо вырожденный случай (скобку меняем дважды на противоположную);
    б) либо ) → ( идёт перед ( → );
    в) либо уровень вложенности обеих скобок не менее 3, при этом они сидят в общих скобках 2-го уровня.

    Из-за 2в без предобработки за O(n) проверить невозможно. Но предобработка хороша, если мы решаем кучу таких запросов, и с этим отдельный вопрос. В таком случае, вероятно, лучше использовать дерево отрезков, обрабатывающее каждый запрос за log n. Пока мне алгоритм понятен не до конца; если вы скажете, что действительно задача про кучу запросов — подумаю..
    Ответ написан
    Комментировать
  • Какую функцию использовать для построения такого графика?

    @Mercury13
    Программист на «си с крестами» и не только
    Вариантов много. Считаем пока, что никаких требований к f(0) нет. Перемасштабируем наши переменные:
    x' = (x − 1)/9
    y = 8y' + 2.
    Тогда x' и y' будут от 0 до 1, в то время как x и y — 1…10 и 2…10. И тогда варианты.
    1. Степенная функция: y' = x'a, a = 0…1. Если a=½, то квадратный корень, ⅓ — кубический корень…
    2. Четвертушка эллипса: y' = sqrt(1 − x'²)
    3. Синус: y' = sin((pi/2)·x')

    Если же f(0) = 0, то масштабируем по-другому:
    x' = x/10
    y = 10y'
    Ответ написан
    4 комментария
  • Есть ли игры в открытом мире с круглой землей (картой)?

    @Mercury13
    Программист на «си с крестами» и не только
    В первую очередь авиасимуляторы. Знаю, что из-за масштабов Земли им приходится справляться с ошибками float: если Земля 12000 км в поперечнике, то единица младшего разряда — полметра.
    Первый X-COM имел круглую землю, но полёты были по локсодроме. А вот в опенсорсном ремейке 2014 года полёты уже по большому кругу.
    Симуляторы бога от Питера Молиньё: Populous, Black and White. Возможно, и другие симуляторы богов (например, Spore — не проверял).

    Я говорю именно про шарообразную карту, а не трубу/тор.

    А так — я бы предостерёг от шарообразной земли с открытым миром. 1) Расстояния (глобальная карта с ускоренным временем или без времени не в счёт). 2) Навигация по миру (в том числе понятие «север»), проекция миникарты. 3) В какой-то момент нужно закругляться и выкатывать игру, а в какой-то — выдавать аддон. Тяжеловато будет. Кстати, во всех упомянутых играх мир или замкнутый, или намного больше, чем одна планета.

    P.S. Моё определение открытого мира: игра, дающая относительную свободу действий и передвижения, но локальный участок, где орудует игрок/группа, намного меньше мира. В замкнутом мире, наоборот, участник орудует практически по всему «миру», оперативно переходя с одного участка на другой. Есть и пограничные случаи: огромное побережье нового Hitman — открытый мир или замкнутый?
    Ответ написан
    1 комментарий
  • Почему в ряде Тейлора есть факториал и выражение в скобках имеет степень?

    @Mercury13
    Программист на «си с крестами» и не только
    Самый прикол ряда Тейлора — почему у него такой остаточный член.
    У Лагранжа и Коши
    Члены очень хороши.
    А у Шлёмильха и Роша
    Самый, говорят, хороший.

    Решим задачу попроще: прикинем на пальцах форму степенного ряда Sum{aixi}, который приближает функцию в окрестности x=0.
    0-е приближение: f(x) ≈ f(0).
    1-е приближение: f(x) ≈ f(0) + f'(0)·x.

    Пока никаких нареканий. Подумаем над вторым приближением.
    f(x) ≈ f(0) + f'(0)·x + ax².
    Хотелось бы, чтобы этот многочлен имел такие же производные вплоть до второй, как и функция f. (x²)|x=0=(x²)'|x=0=0, с этим никаких проблем. Поскольку (x²)''|x=0=2, получается, что a=f''(0)/2.

    И сразу n-е приближение.
    f(x) ≈ f(0) + f'(0)·x + f''(0)·x²/2 + … + bxn.
    И этот многочлен должен иметь такую же n-ю производную, как и функция f. Чему равен (xn)(n)|x=0? Разумеется, n!. Отсюда и коэффициент f(n)(0)/n!.
    Ответ написан
    1 комментарий
  • Языки программирования для работы с API?

    @Mercury13
    Программист на «си с крестами» и не только
    Любой, работающий с HTTP.
    Привязки к cURL — а именно он в большинстве случаев используется для HTTP — есть практически везде.
    Проверено: есть сайты, где Indy (стандартная сетевая библиотека Delphi) не пройдёт, а cURL — за милую душу. Видимо, криптография + «Indy слишком вумный и скрытно корректирует сообщение».
    Ответ написан
    Комментировать