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

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Когда вы строите дробь a/b, у вас есть последовательность остатков:
    a_0=a%b, a_1=(a_0*p)%b, a_2=(a_1*p)%b,... где p - основание системы счисления. Как только два остатка a_x и a_y совпали - все цифры между ними ((a_x*p)/b, (a_{x+1}*p)/b,...,(a_{y-1}*p)/b) образуют период. Как эффективно найти период такой последовательности - ищите. При небольших b достаточно взять массив M с индексами от 0 до b-1, и для каждого вычисленного остатка проверять ячейку M[a_y]. Если в неё ещё ничего не записали, записать M[a_y]=y. Если там лежит какой-то x, то период найден.
    Есть и другие способы, без использования массивов.
    Ответ написан
    Комментировать
  • Нужен ли диплом для устройство на работу программистом или важны знания?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Диплом может пригодиться для работы в госучреждениях и для получения рабочей визы. Для коммерческих организаций в России, скорее всего, не нужен, но неизвестно, сколько им осталось существовать.
    Ответ написан
  • Как обработать все случаи при решении системы линейных уравнений с двумя неизвестными?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    if (a != 0) {
                        x = e / a;
                    }
                    else {
                        x = f / a;
                    }

    Если a==0, будет деление на 0. Но, возможно, ошибки есть где-то ещё.
    Ответ написан
  • Как подсчитать кол-во делителей?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Кладём в аккумулятор 1.
    Перебираем числа от 2. Если есть возможность - то только простые, или 2 и нечётные...
    Если наше число x делится на текущее число p, то делим его, пока делится, считаем, сколько раз разделилось (значит, x делился на p^n). Умножаем аккумулятор на n+1.
    Если дошли до такого p, что p^2 > x, то смотрим: если x не равен 1, умножаем аккумулятор на 2.

    Например:
    x=5040, acc=1
    p=2. x делится на 2^4. После деления x=315, acc=5.
    p=3. x делится на 3^2. После деления x=35, acc=5*3=15.
    p=5. x делится на 5^1, После деления x=7, acc=15*2=30.
    p=6. x < p^2, выходим из цикла
    x!=1 => acc=30*2=60.
    Ответ: 60 делителей.

    Если это слишком медленно - изучайте быстрые алгоритмы факторизации.
    Ответ написан
    Комментировать
  • Для чего программисту математика?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если не будете изучать математику - она и не пригодится. Если будете - пригодится много где, от анализа ДНК и расчёта газовых турбин до компьютерного зрения и игры на бирже. В любом случае будете брать задачи по своим силам.
    И если с математикой в вузе проблем не было, то повторять её специально, "чтоб было", незачем. Вы её уже знаете. И когда решите, что какая-то тема нужна для конкретной задачи, спокойно повторите именно её. Если эта тема встретится несколько раз, то и повторять её будет не надо - она уже будет в голове.
    Ответ написан
    Комментировать
  • Из чего состоит core programming languge?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Должна быть минимальная библиотека ввода-вывода. Реализованная в виде операторов языка (как в бейсике или брейнфаке) или функций (как в Си). Альтернативный вариант - наличие ассемблерных вставок и/или возможности вызова "системных" функций.
    Если в языке не предусмотрен динамический захват памяти, то потребуются функции, позволяющие взять память у системы и потом вернуть.
    Остальное можно реализовать уже в терминах самого языка.
    Ответ написан
    Комментировать
  • Подойдет ли ноутбук для программирования?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Подойдёт. Не будете отвлекаться на игры. Вот только если вдруг придётся программировать какую-нибудь числодробилку, требующую много памяти, то будет очень грустно.
    Ответ написан
    Комментировать
  • Как преобразовать определенные биты в числе?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если номер позиции pos, число разрядов len, а число, которое надо изменить - x, то ответом будет
    x | (((1 << len) - 1) << pos)
    Ответ написан
    1 комментарий
  • Не правильная конвертация из float в int C#?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Не воспроизвелось. Написал так:
    static int Val1(){
                float val = 0.94f;
                return (int)(val*100);
            }
            static int Val2() {
                float val = 0.94f;
                float val1 = val*100;
                return (int)(val1);
            }

    Обе функции вернули 94. Как у вас получилось 93?
    Ответ написан
  • Зачем нужно знать машинный код?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    В последний раз мне машинный код понадобился совсем недавно, когда я захотел посмотреть, во что компилируется функция из C#. Дебагером пользоваться нельзя - он даёт неоптимизированный код. Поэтому фрагмент кода пришлось вытаскивать прямо в программе (два прыжка по стеку - и я в окрестности точки вызова). Напечатать фрагмент в 16-ричном виде легко, а как его оттуда перетащить в какой-нибудь дизассемблер - неясно. Пришлось поднимать таблицы кодов и разбирать самому.
    Ответ написан
    2 комментария
  • С точки зрения лексем языка си минус это?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Придётся научить распознаватель выполнять операции над константами. Тогда и -1, и 2-1 будут константами, вычисленными на этапе компиляции, а (-x) и x-1 - результатом применения различных операций "минус" (которые не обязаны быть как-то связаны между собой).
    Ответ написан
    Комментировать
  • Является ли хорошим тоном постоянно использовать много методов/функций?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Иногда на каждую характеристику лучше своя функция.
    Иногда, если набор характеристик в каком-то смысле однородный (проекции модели на три координатные плоскости, число красных/зелёных/синих рёбер...) можно какой-то признак характеристики передать параметром - тогда одна функция будет вычислять любую из нескольких характеристик.
    Иногда, если несколько характеристик удобно вычислять вместе, и они логически связаны между собой (и с большой вероятностью потребуются вместе) - объединить их в структуру и заставить функцию заполнять её всю.
    Иногда - когда для вычисления характеристик уже не надо лезть в потроха объекта, а можно воспользоваться другими характеристиками, и, возможно, какими-нибудь итераторами, а кроме того, вычисление само по себе трудоёмко и требует сложных алгоритмов - вынести это вычисление в отдельный класс.
    Ответ написан
    Комментировать
  • Как решить задачу о математической игре Баше?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если позиция сразу проигрышная, то программа не помечает ход как правильный. Больше ошибок пока не видно.
    Ответ написан
  • Как найти статью на хабре о получении числа 100 из 6 цифр?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Возведения в степень там точно не было. Список вот:
    https://www.dropbox.com/s/v1gp0yp62kr1kdh/badticke...
    Но я не помню, разрешался там унарный минус, или нет.
    Дата создания файла 3 апреля 2013, но вряд ли это поможет.

    UPD. habrahabr.ru/post/174715
    К счастью, она была в хабе "алгоритмы".
    Ответ написан
    Комментировать
  • Как проверить делимость чисел из последовательности 1,11,111,...,11..1 на их порядковые номера?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если N небольшое (скажем, не больше 100000), то можно так:
    char *A=new char[N+1];
      for(int n=1;n<=N;n++){
        int a=0;
        for(int b=0;b<n;b++) a=(10*a+1)%n;
        A[n]=!a;
      }

    При больших N нужно пользоваться аналогом быстрого возведения в степень.
    Получается, что кроме 3 и 37, в числах оказываются такие простые делители, как 163, 757, 1999, 9397... Не понимаю, откуда они берутся.
    UPD.
    757 - делитель 10^27-1
    163 и 9397 - делители 10^81-1
    1999 - делитель 10^999-1
    Ответ написан
    1 комментарий
  • Возможно ли "соединить" два файла, не перемещая данные?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    В любом случае, для этого нужно, чтобы длина первого файла была кратна размеру кластера. Тогда, при наличии физического доступа к диску, шансы могут быть ненулевыми.
    Если файлы для задачи были промежуточными, то, возможно, проще было бы ввести промежуточный тип - "многофайловый файл", который сам разбирается, из какого файла что читать. Там надо переопределить метод ReadBytes() (и всякие мелочи вроде Seek, Position, Length...) Заодно и в других программах может пригодиться.
    Ответ написан
    Комментировать
  • Программируете ли вы в свободное время?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Программирую. И задачки решаю. Неприятно, когда проекты и задачи "для себя" оказываются интереснее, чем те, что для работы - тогда на работе сосредоточиться трудно.
    А уставать некогда - домашние дела никуда не деваются, и долго сидеть за компьютером не дают. Вот и сейчас надо собачек на речку вести...
    Ответ написан
    Комментировать
  • Корректно ли использование нескольких операторов "return" в функции?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Множественный return, а также операторы break, continue, switch и throw - это не более, чем маскировки оператора goto, с которым несколько последних десятилетий идёт борьба. Так что, если вы не боитесь goto - то пользуйтесь на здоровье.
    Ответ написан
  • Какие методы Вы используете, чтобы быстро найти участок в проекте с сотней тысяч строк?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Go to definition и Find all references в Visual Studio. Реже - поиск имени функции или строки по всему solution.
    Ответ написан
    Комментировать
  • Задача про стену и кирпичи. Как решить?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Строите матрицу перехода между рядами (43х43, как описано в ответе Andy_U ), потом возводите её в 9-ю степень (поскольку у нас 9 переходов) и считаете сумму всех элементов (поскольку первый и последний ряд могут быть любыми). Всё.
    Работает для любого числа рядов, хоть для триллиона :) Только потребуется быстрое возведение в степень.
    Но это будет число способов построить стену. Если имелось в виду число наборов кирпичей (сколько может быть кирпичей 3x1 и сколько 4x1), то надо подумать, как сделать проще всего.
    Ответ написан