• Задача по методу Эйлера, за что отвечает функция F в данном коде?

    @Mercury13
    Программист на «си с крестами» и не только
    Качество кода — на уровне студенческой лабораторной. Причём очень хреновой.

    Программа решает четыре системы.
    y = f0(t)
    y' = f1(t, y)
    y'' = f2(t, y, y')
    y''' = f3(t, y, y'')

    1. Если уж говорить о методе Эйлера — в программе ошибка.
    y[1] = y[1] + delt * y[2];
    Тут нужно старое значение y[2], а не новое.

    2. Функцию eiler стоило бы обозвать eulerStep, заодно убрав лишние параметры.

    3. Автор не знает такой концепции, как процедурный тип aka callback, поэтому работа с правой частью у него вышла вот через такую задницу.

    4. В промышленном коде метод решения ОДУ я бы вынес в отдельную процедуру, с callback’ами на правую часть и на потребителя результата. Причём внешнее (доступное пользователю библиотеки) именование должно быть такое, чтобы её пользователь мог ею воспользоваться, даже если он не читал статью, по которой библиотеку писали. Так что смотрите, какие имена являются стандартизированными, понятными по любому учебнику, а какие стоит прояснить. Внутреннее именование — это уж думайте сами, научный код обычно сложен, и его постоянно приходится сличать со статьёй. Поэтому имена как в статье — для научного кода не WTF.

    5. Не слишком удачно разделена ответственность между функцией правой части и функцией шага по Эйлеру. Это привело к ограничению — программа может решать только ОДУ y{n} = f(t, y, y', ..., y{n−1}).
    Ответ написан
    8 комментариев
  • Как улучшить крестовину в пульте для Xbox 360?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    Снова отвечаю сам себе. Копия моего отзыва с hotline.ua.

    На всякий случай напишу, как исправить крестовину.

    Замечаем, какие плечи суперчувствительны, а какие подглючивают.

    Вырезаем из пластмассы толщиной ≈0,4 мм (лавсановая упаковка от пульта?) такую конструкцию. Квадрат 19×19, в центре вырезана дырка в виде квадрата 7×7. С уголков снимаем «фаску» порядка 2…3 мм. Пульт разбираем отвёрткой PH1 (внимание, один из винтов под наклейкой с серийником) и надеваем всю эту конструкцию на крестообразный шток крестовины. Те «лучи», которые соответствуют суперчувствительным направлениям, отрезаем аж до самого отверстия.

    После этого из пластмассы толщиной <0,3 мм (изолента? блистер от лекарств?) вырезаем «конфетти» диаметром миллиметров шесть, и приклеиваем «Моментом» на плату в центр крестовины.

    Может так случиться, что всё идеально, но одна диагональ вызывается с большой силой. В таком случае разбираем крестовину (откручиваем два шурупа и пинцетом сжимаем защёлки), находим выступ, соответствующий ПРОТИВОПОЛОЖНОЙ диагонали, и счищаем немного материала с самого выступа и с того места, куда он встаёт.

    После этой переделки значительно уменьшились шансы получить в пылу игры холостую диагональ, да и «дубовые» плечи стали по-человечески нажиматься.
    Ответ написан
    Комментировать