• Нужно подобрать регулярное выражение, можете помочь?

    tsarevfs
    @tsarevfs
    C++ developer
    Мой вариант пытается сделать буквально то что вы просите https://regex101.com/r/tWkwTe/2
    Ответ написан
  • Как исправить ошибки в пузырьковом сортировщике массива?

    tsarevfs
    @tsarevfs
    C++ developer
    1. Вы смешали табы и пробелы. Не важно как я об этом узнал XD Для Python это важно. Используйте нормальный текстовый редактор, например VSCode.
    5cf67edfef0ec629296918.gif
    2.
    n = int(input())
    3. Вы обращаетесь к элементам пустого массива.
    a[i]=int(input())
    Используйте append чтобы расширить массив.
    for _ in range(n):
        print("Введите элемент массива ")
        a.append(int(input()))
    Ответ написан
    Комментировать
  • Какой алгоритм сортировки сортирует массив с временной сложностю O(n * (N))?

    tsarevfs
    @tsarevfs
    C++ developer
    Судя по разным буквам n и N имеется в виду сортировка подсчетом. Время ее работы зависит от размера массива n и количества возможных значений в массиве N. Так, например, если мы хотим отсортировать массив состоящий из чисел от 1 до 10, то мы можем сделать это за линейное время.
    Кормен "Алгоритмы: построение и анализ" подойдет как справочник.
    Ответ написан
    Комментировать
  • Какими средствами на Qt C++ отредактировать документ *.doc?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Нужна какая-то внешняя библиотека. Например https://github.com/amiremohamadi/DuckX
    Ответ написан
    Комментировать
  • Какие требования для джуна на с++?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Зависит от компании. От джуна адекватные компании не ждут ничего конкретного. Нужно иметь минимальную базу и как-то продемонстрировать то что вы готовы учиться.
    С C++ нужно понимать основные механники:
    1. ООП. На 90% собеседований вас спросят что такое полиморфизм. Погоняют по виртуальным и не виртуальным функциям. Нужно хорошо разобраться зачем нужны конструкторы и деструкторы. Когда они вызываются. Как передаются параметры в функции. Почему что-то пишут в .h а что-то в .cpp. STL, смарт пойнтеры Итд.
    Хороший список книг:
    https://tproger.ru/books/cpp-books-middle/
    Не ожидается что в прочитаете все, но открытый на средине Майерс не должен вызывать изумления от синтаксиса в большинстве случаев.
    2. Алгоритмы. Что такое сложность в big O нотации (не обязательно дословно). Устройство и сложность основных операций для vector, list, set, map, unordered_set, unordered_map. Уметь отвечать на вопрос "Что быстрее vector или list"
    "Hacking the code interview" содержит очень краткое описание для этой части (есть перевод). Вся книга скорее на middle уровень, но почитать полезно.
    3. Иметь репозиторий даже с учебными задачами очень полезно. Я всегда смотрел код, если он был.
    4. Дальше уже специфика компании. Могут спрашивать математику, сети, Qt, ML... Тут уже смотрите что вам интереснее.
    Ответ написан
    1 комментарий
  • Слишком быстрый fps. Как сделать движения игрового объекта более медленным?

    tsarevfs
    @tsarevfs
    C++ developer
    Расчитывайте движение объекта исходя из желаемой скорости как dx = v * dt. Для вычисления dt вычитайте таймстемп с предыдущего кадра из текущего таймстемпа.
    Ответ написан
    Комментировать
  • Какой алгоритм текстового калькулятора лучше?

    tsarevfs
    @tsarevfs
    C++ developer
    Польская запись -- простой и незатейлевый алгоритм. Работает с выражениями содержащими бинарные операции и скобки. Вероятно ваш выбор.
    Низходящий разбор это то что вы пытались описать под первым пунктом. Он более универсален. Позволяет разбирать более сложные грамматики c унарными операциями и контекстной завичимостью (один знак может иметь разные значения в зависимости от контекста). В этом методе больше подводных камней. Нужно изучить много теории чтобы понять как обойти некоторые сложности, например левую рекурсию. При некоторой настойчивости можно разобраться.
    Восходящий разбор. SLR, LALR парсеры. Активно применяются на практике. Они сложные, их нет практического смысла писать самостоятельно. Если вы будете использовать генератор парсеров Bison, то это оно.

    То что вы описали вторым пунктом разбивается на выборе операции с максимальным приоритетом. В сложных случаях для этого придется разобрать выражение одним из описанных мной способов.
    Ответ написан
    2 комментария
  • Почему функция возвращает None?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    4 и 5 параметры cv::cuda::resize это коофициенты на которые домножаются исходные ширина и высота изображения. Так можно увеличить его в 2 раза:
    cv::cuda::resize(input, output, Size(), 2.0, 2.0, INTER_LINEAR);

    Подозреваю что вы туда передаете что-то в пикселях и получаете гигантский результат, который не помещается в памяти.
    Документация.
    Ответ написан
  • Можно ли в С++ стрингу преобразовать в тип?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Хорошего способа сделать этого нет.

    Паттерн который позволяет избавиться от if-ов называется Factory. Есть разные способы его реализации. Основная идея в том, что есть класс FunctionFactory который хранит map name->createFunc. Где createFunc это функция которая создает нужный экземпляр. Но этот map тоже нужно заполнить, поэтому совсем не писать лишний код не получится.
    Это все безобразие позволяет не иметь огромной функции которая знает про все зарегистрированные классы.

    Тут есть пример правильного кода
    https://dzone.com/articles/factory-with-self-regis...
    Ответ написан
    Комментировать
  • Что почитать по C++?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Вроде толковые люди делали. https://ru.coursera.org/learn/c-plus-plus-white

    С++ активно менялся, поэтому свежие книги предпочтительней. Но это не значит, что все что написано раньше полностью устарело.
    Могу посоветовать Мейерс "Эффективный с++". Но это после того как освоите базовый синтаксис.
    Ответ написан
    Комментировать
  • Почему неправильно работает освещение объекта?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Проверьте что шейдер действительно применяется как ожидается.
    1. Если задать FragColor в константный цвет меняется ли картинка?
    2. Если менять константы ...Strenght в шейдере меняется ли картинка?

    Для отладки шейдеров полезно отображать значения промежуточных переменных как цвет точки. Для этого их нужно отмасштабировать их значения в отрезок 0..1 который задает компоненты цвета. Так по цвету картинки можно будет понять что за значение у вас получилось.

    Ну и стоит начинать с чего-то простого. specular компоненту точно можно для начала убрать.
    Ответ написан
    Комментировать
  • Перегрузка функций с unsigned параметром и обычным?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Все верно, по умолчанию целочисленные константы имеют тип int.
    unetway.com/tutorial/c-konstanty-i-literaly
    Ответ написан
    Комментировать
  • Как сделать реакцию на любую команду?

    tsarevfs
    @tsarevfs
    C++ developer
    Как я понял вы используете pyTelegramBotAPI https://github.com/eternnoir/pyTelegramBotAPI#a-si...

    Второй пример там позволяет получать все сообщения:
    @bot.message_handler(func=lambda m: True)
    def echo_all(message):
    	bot.reply_to(message, message.text)


    Вместо commands там используется func, которая проверяет, подходит ли это сообщение для этого хендлера.
    Ответ написан
    1 комментарий
  • Как ускорить программу?

    tsarevfs
    @tsarevfs
    C++ developer
    Можно решать асимптотически быстрее если не заниматься симуляцией процесса.
    Идея в том, что тот кто выходил подышать позже точно окажется после того кто выходил раньше или совсем не выходил.
    spoiler
    fin = open('input.txt', 'r')
    
    n, _, *actions = (int(v) for v in fin.read().split())
    
    nToLastPos = {n : i for (i, n) in enumerate(actions)}
    
    res = sorted(range(1, n + 1),
    			 key=lambda v: nToLastPos.get(v, -1))
    
    fout = open('output.txt', 'w')
    fout.write(' '.join((str(a) for a in res)))



    Из советов по python коду:
    1. Не храните размер отдельно от списка. Его всегда можно получить с помощью len(arr)
    2. По возможности не используйте for i in range(len(arr)). Вместо этого for value in arr или for i, value in enumerate(arr)
    3. Генераторы списков или словарей очень полезны.
    4. Распакова списков в переменные тоже очень удобная тема.
    Ответ написан
    2 комментария
  • Python: как сделать GUI и скомпилировать под UBUNTU?

    tsarevfs
    @tsarevfs
    C++ developer
    Для GUI можно использовать tkinter или Qt for Python.
    Правильный путь создания приложения доступного пользователю это создвть "ярлык" в виде .desctop файла:
    https://gist.github.com/nathakits/7efb09812902b533...
    Это позволит найти программу через главное меню, добавить иконку, закрепить иконку на панели.
    Такой файл нужно положить в ~/.local/share/applications/
    Для учебных задач в 99% случаев удобно запускать код из IDE или консоли.
    Основной способ распространения программ под Ubuntu это deb пакеты. Это архив с необходимыми файлами и встроенный скрипт, который знает по каким местам в системе надо раздожить эти файлы. Делать их не трудно, но долго и муторно. Для учебных задач это тоже излишнее.
    Ответ написан
    Комментировать
  • Сколько раз выделяется память под локальные переменные цикла в С++?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    for (int i = 0, j = 10; i < j; ++i, --j)
    {
       const int l = a[i] + 1;
       const int r = a[j] + 1;
       const std::string msg = std::to_string(l + r) + " bottles of rum";
       std::cout << msg << std::endl; 
    }

    1) i, j обьявлены в заголовке цикла. Они создаются 1 раз и живут до конца цикла.
    2) l, r обьявлены в теле цикла. Каждую итерацию мы присваиваем им нове значение. Поскольку int это базовый тип, переменная просто записывется на стек без дополнительного выделения памяти.
    3) msg это уже переменная более сложного типа. Хотя она и создается на стеке, внутри конструктора она может выделять память с помощью new. И это будет происходить на каждой итерации.
    4) Более того, std::to_string(l + r) создаст временный объект std::string, который удалится после завершения operator+

    С одной стороны полезно понимать какие операции могут приводить к выделению памяти, так как это не быстро. С другой об этом можно не думать слишком много при написании бизнес кода. Преждевременная оптимизация это не есть хорошо.
    Оптимизации компилятора работают достаточно хорошо. Но они не всесильны, и не должны менять поведение. Поэтому, содавать тяжелый обьект в цикле, если можно сделать это один раз, не очень хорошая идея.
    Ответ написан
    2 комментария
  • Почему в VS программа на СИ работает неправильно, хотя в онлайн компиляторе все в порядке?

    tsarevfs
    @tsarevfs
    C++ developer
    В С++ есть понятие неопределенного поведения. Когда вы делаете что-то сильно неправильно, компилятор может делать все что ему захочется, вплоть до запуска межконтинентальных баллистических ракет.
    В вашем случае некорректное поведение воспроизводится локально, вам повезло. Студия содержит отладчик, который позволит вам исполнить программу по шагам и найти момент в который все идет не по плану.
    Ответ написан
    2 комментария