• Как правильнее создавать игровой цикл?

    tsarevfs
    @tsarevfs
    C++ developer
    Вызов tick() /*мне привычнее называть ее update()*/ для каждого объекта предпочтительней. За счет полиморфизма для каждого типа объекта может быть вызвана своя реализация этой функции. В зависимости от объекта, возможны различные варианты взаимодействий. Например куст может ничего не делать на своем update. А солдат должен посмотреть на всех врагов и выбрать в которого стрелять. Такое поведение не очевидно как реализовывать вашим способом. Ну и отпадает необходимость писать гигантские функции.
    Если юнитов становится слишком много, возможны различные оптимизации. Например обсчет только юнитов в определенной зоне или объединение стаи птиц в один объект с упрощенным поведением, вместо рачсета каждой птицы. Но об этом стоит думать, когда оптимизация становится необходимой.
    Еще подозрительна фраза про родящиеся и уничтожающиеся циклы. Это прероготива объектов. Циклы это просто часть кода, которая исполняется практически как набор последовательных инструкций.
    Ответ написан
  • Как начать программировать серьезно?

    tsarevfs
    @tsarevfs
    C++ developer
    С++ тяжелее в изучении, но позволяет глубже понять как работает программа. Актуальность java и С++ одинаково высока. C++ это высокопроизводительные приложения, gamedev. На Java часто пишут серверное ПО, Enterprise software.
    Изучение синтаксиса языка это 10%. Могу посоветовать книгу Философия С++. Практически сразу стоит изучать то, что называют "алгоритмы и структуры данных". Книги: Кормен, Кнут.
    Желательно писать как можно больше кода.
    Ответ написан
    Комментировать
  • Что такое машинный эпсилон?

    tsarevfs
    @tsarevfs
    C++ developer
    Корректное определение звучит так:
    FLT_EPSILON: This is the difference between 1 and the smallest floating point number of type float that is greater than 1.

    Разница между 1 и минимальным чилом представимым в float большим 1. Говорить о том, что:
    Машинный эпсилон - это минимальная разница между числами, которую компьютер в состоянии различить.

    не правильно, потому, что как вы заметили, числа меньше FLT_EPSILON вполне представимы в float и вы вполне можете с ними работать.
    Дело в том, что плотность чисел представимых в float не постоянна. Расстояние между 2 такими соседними числами может быть меньше FLT_EPSILON в окресности нуля. И наоборот для значений близких к MAX_FLOAT разница между соседними значениями может быть больше 1.
    В python тип float соответствует типу двойной точности(64 бита) и в нем представимы все целые числа. Если же воспользоваться 32-битным вариантом, то можно получить "странное" поведение. Следующий код зацикливается.
    import sys
    from numpy import float32
    a = float32(sys.float_info.max)
    while a > sys.float_info.max - 10000:
       a -= 1
    Ответ написан
    1 комментарий
  • Существует ли алгоритм максимального покрытия текста имеющимися подстроками?

    tsarevfs
    @tsarevfs
    C++ developer
    В биоинформатике занимаются такими задачами. Скорее всего задача NP полная и точного решения может не получиться.
    Ответ написан
  • Изучаю С++ самостоятельно, есть ли работа для Сишников?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    На стажировку желательно идти курсе на 3. Основы C++ должны включать не только базовый синтаксис, но и знания как это все внутри устроено. Нужен опыт написания программ и их отладки.
    Ответ написан
    Комментировать
  • Как в Vim сделать "быстрый доступ" к функции?

    tsarevfs
    @tsarevfs
    C++ developer
    Как-то так.
    Ответ написан
    Комментировать
  • Как вольты преобразовать в амперы?

    tsarevfs
    @tsarevfs
    C++ developer
    Брр... Амперы это единица измерения силы тока(I), вольты - напряжения(U), омы - сопротивления (R). По закону ома I = U / R. Таким образом при фиксированном напряжении сила тока зависит от сопротивления нагрузки.
    Если вы пытаетесь измерить силу тока подключая щупы тестера к выводам генератора, то это не правильно.
    Если вам действительно нужно понизить напряжение, существуют понижающие DC-DC преобразователи.
    Ответ написан
  • Генерация id пользователя как в vk.com ?

    tsarevfs
    @tsarevfs
    C++ developer
    Если пользователей намного меньше, чем возможных идентификаторов можно просто генерировать рандом пока не получится незанятый.
    Ответ написан
  • Парсинг грамматики в РБНФ?

    tsarevfs
    @tsarevfs
    C++ developer
    Мне кажется, что так или иначе, для построения парсера придется сконвертировать РБНФ в БНФ. Плюсом БНФ является то, что нет необходимости писать сложный парсер, чтобы считывать саму грамматику.
    Поэтому для начала реализуйте генератор парсера по БНФ грамматике.
    В приведенной вами статье есть РБНФ описание РБНФ грамматики. Вы можете вручную преобразовать его в БНФ и построить парсер для нее.
    Преобразование из РБНФ в БНФ будет заключатся в последовательной замене конструкций из РБНФ на несколько эквивалентных из БНФ. Я не уверен, что в результате получится сразу получить "хорошую" грамматику (в зависимости от выбранного алгоритма на грамматику могут накладываться различные ограничения, например отсутствие левой рекурсии, эпсилон-правил и.т.д). В таком случае придется нормализовывать полученную грамматику.
    Читайте dragon book, какой-то материал можно найти на вики.
    RE: UPD А грамматика из примера очень похожа на LL(1) грамматику. Если нет необходимости работать с РБНФ, считывание тривиальное. Правила с '|' стоит разбить на части с одинаковой левой частью. Identifier и Number я бы вообще для простоты сделал терминалами, и предоставил лексеру разбираться с ними. Про то как разбирать LL(1) грамматики, например, рекурсивным спуском материал найти очень легко.
    UPD2
    И да, еще придется подумать о том как задавать действия, которые вы хотите сделать (непосредственно компиляция С кода). Я реализовывал это на python, и все равно было много возни с этим.
    parser_gen.py и lexer_gen.py генерируют парсер_.py и лексер_.py по их описаниям в файлах *.txt
    main используя сгенерированные файлы запускает парсинг целевого текста.
    Ответ написан
  • И снова: Как найти ошибку в коде Python?

    tsarevfs
    @tsarevfs
    C++ developer
    А почему вы `n` к int приводите, а `a` нет?

    А к вопросу "как найти?" - написать какую-нибудь функцию f() например:
    def f(a):
        return a + 1
    
    def main():
        d = {}
        n = int(input())
        x = 0
        while x < n:
            a = input()
            if a in d:
                print(d[a])
            else:
                print(f(a))
                d[a] = f(a)
            x += 1
    
    if __name__ == '__main__':
        main()

    И запустить.
    Ответ написан
  • У кого-нить есть на примете скрипт или программа с помощью которой можно обработать фотографию так?

    tsarevfs
    @tsarevfs
    C++ developer
    Нашел сайт человека, занимающегося этим. К сожалению реализацию он не выкладывает, но в принципе понятно что он делает:
    *ручная разметка ключевых точек
    *триангуляция делоне
    *раскраска треугольников.

    Автоматизировать процесс наверное можно, но результат будет скорее всего хуже.
    Ответ написан
    Комментировать
  • Как устанавливается в корпус DVD привод?

    tsarevfs
    @tsarevfs
    C++ developer
    А он вам действительно нужен?
    Как вариант, можно посмотреть на внешние dvd приводы.
    Ответ написан
    Комментировать
  • Какие книги посоветуете по Алгоритмам?

    tsarevfs
    @tsarevfs
    C++ developer
    Поиск не пробовали?
    Ответ написан
    Комментировать
  • Как правильно считать время выполнения многопоточного алгоритма?

    tsarevfs
    @tsarevfs
    C++ developer
    Насколько мне кажется, вы вы создаете следующий тред только после того как предыдущий завершился. В результате вместо параллельного исполнения получается последовательное, и время суммируется.
    Thread.Join "Блокирует вызывающий поток до завершения потока или истечения указанного времени..."
    Ответ написан
    Комментировать
  • Библиотеки построения графиков на python?

    tsarevfs
    @tsarevfs
    C++ developer
    Не уверен, что существует готовое решение. Но эту функциональность несложно реализовать на основе numpy и scipy
    1. Изменяйте данные и отрисовывайте график в собственном цикле.
    2, 3 Используйте функцию интерполяции.
    Ответ написан
    Комментировать
  • Стек есть зарезервированный участок памяти на оперативно запоминающем устройстве?

    tsarevfs
    @tsarevfs
    C++ developer
    Все зависит от языка, платформы и ОС.
    Когда говорят о куче, обычно подразумевают динамическое выделение памяти. На старте приложение не резервирует память в куче, а делает это по мере необходимости.
    Если вы пишите например на C++ под платформу x86, то память под стек (несколько мегабайт) резервируется в самом начале работы приложения и освобождается только при его завершении.
    Для разных языков то как реализован стек может сильно отличаться, важно лишь то что это обязательная часть механизма работы функций. Именно через него передаются аргументы, возвращается результат. На нем могут создаваться локальные переменные для функций.
    Интерпретируемые языки могут быть устроены сильно по разному. Но в большинстве случаев они ведут себя так, как будто у них есть стек и куча.
    Ответ написан
  • Что теоретически может больше ограничить скорость потоков?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    При увеличении числа потоков, читающих из различных мест (если файл достаточно большой) на жестком диске можно столкнуться с уменьшением производительности за счет I/O scheduling. Для жесткого диска одна из самых медленных операций это seek, который сопровождается физическим перемещением головки. Для минимизации перемещений используются различные алгоритмы. Например это могут быть модификации Elevator algorithm.
    Если чтение станет узким местом, возможно стоит попробовать настроить планировщик.
    Ответ написан
    Комментировать
  • Как скомпилировать под Win 64-Bit?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    В папке с исходниками есть файл README.mingw:

    Установите MinGW and MSYS

    Для установки libdmtx, скачайте и распакуйте the libdmtx source в папку вашего MSYS . По умолчанию она называется C:\msys\1.0.

    Откройте MSYS shell и запустите следующее (напечатайте в консоли и нажмите enter):
    $ ./configure
    $ make
    $ sudo make install

    Зайдите в папку .libs:
    $ cd .libs
    $ ls

    Вы увидите такой вывод
    libdmtx.a libdmtx.la libdmtx.lai libdmtx_la-dmtx.o

    В конце запустите
    $ gcc -shared -o dmtx.dll libdmtx_la-dmtx.o -Wl,--out-implib,libdmtx.a

    Теперь у вас должен быть работающий dmtx.dll в папке .libs.
    Ответ написан
    Комментировать
  • Поможете вспомнить язык программирования по логотипу?

    tsarevfs
    @tsarevfs
    C++ developer
    Написал скрипт на python скачивающий картинки по запросу "<имя языка> logo" из гугла.
    import os
    import sys
    import time
    from urllib import FancyURLopener
    import urllib2
    import urllib
    import simplejson
    
    
    # Start FancyURLopener with defined version 
    class MyOpener(FancyURLopener): 
        version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'
    myopener = MyOpener()
    
    
    def request(searchTerm, max_count):
      # Set count to 0
      count= 0
      searchTermQuote = urllib.quote(searchTerm + ' language logo', '')
      for i in range(0, 10):
          # Notice that the start changes for each iteration in order to request a new set of images for each loop
          url = ('https://ajax.googleapis.com/ajax/services/search/images?' + 'v=1.0&q=' + searchTermQuote + '&start=' + str(i*4) + '&userip=MyIP')
          print url
          request = urllib2.Request(url, None, {'Referer': 'testing'})
          response = urllib2.urlopen(request)
    
          # Get results using JSON
          results = simplejson.load(response)
          data = results['responseData']
          dataInfo = data['results']
    
          # Iterate for each result and get unescaped url
          for myUrl in dataInfo:
              count = count + 1
              print myUrl['unescapedUrl']
    
              searchTermSafe = ''.join([c for c in searchTerm if c.isalnum() or c == '.'])
    
              name = os.path.join('imgs', searchTermSafe + str(count) + '.jpg')
              myopener.retrieve(myUrl['unescapedUrl'], name)
              if count >= max_count:
                return
    
    
    def main():
      languages_list = open('list.txt', 'r').readlines()
      for language in languages_list:
        try:
          request(language, 1)
        except:
          print "error with request" + language
        time.sleep(1)
    
    
    if __name__ == '__main__':
      main()

    Сейчас он трудится над списком из 256 языков.

    UPD:
    Единственное, хоть как-то подходящее под описание Rexx language:
    rexxla.gif
    Ответ написан
  • Почему выводится ошибка "необработанное исключение по адресу"?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    matrix[m][n] вместо matrix[i][j] в поиске элемента это выход за границу массива.

    for (int i = m; i < m; i--) //хм
    Ответ написан
    Комментировать