Ответы пользователя по тегу C++
  • Как оформить сортировку по алфавиту?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужна функция предикат или перегруженный оператор сравнения. Вот посмотри как тут пишут
    https://stackoverflow.com/questions/2758080/how-to...
    Ответ написан
    3 комментария
  • Как хранится c++ struct в памяти и как определить размер вручную?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Скорее всего такого алгоритма нет. Размер структуры будет зависеть
    от разрядности платформы и от типа компиллятора и возможно от всяких
    опций типа #pragrma pack. Тоесть получается нехилый квест.

    Технически, тебе достаточно sizeof для решения твоих прикладных задач.
    Ответ написан
    1 комментарий
  • Как реализовать побитовый сдвиг чисел, которые записаны как строки ( длинные числа хранятся в строках)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Сдвиг на 2^64 это я так понимаю что сдвиг влево на 64 бита. Иначе смысла бы не было. Получили бы ноль.

    Сдвиг влево - это умножение на 2 в степени числа сдвигов. Тоесть

    2^32 * 2^64 = 2^96

    (при умножении степеней показатели складываются)
    Ответ написан
    5 комментариев
  • Как хранятся многомерные массивы в памяти?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да. Ты правильно рассуждаешь. Многомерные зубчатые массивы имеют накладные расходы в виде служебных указателей которые должны предварять вход в каждое измерение. И не просто в измерение а там получается
    дерево массивов массивов массивов указателей на данные.

    Но для такого твоего кейса матрицу можно линеаризовать. И разложить последовательно.

    int arr[6] = { 1,2,3,1,2,3};

    Формула доступа будет простая. Надо будет к базовому указателю прибавить дистанцию от начала
    до нужного элемента помня о том что LINE_WIDTH у нас уже известен и это длина строки в элементах.

    *(basePointer + i * LINE_WIDTH + j)

    Таким-же образом можно вывести формулу для 3х, 4х и более измерений. И массив можно отобразить
    на гиперкуб.
    Ответ написан
    Комментировать
  • В чем преимущества использования С++ в embedded?

    mayton2019
    @mayton2019
    Bigdata Engineer
    ООП и метапрограммирование.
    Ответ написан
    Комментировать
  • Как переделать код под ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Программирование в ООП предполагает что мир состоит из "объектов".
    Например твоя программ (процесс) калькулятор это уже объект. Даже не имея декларации
    она уже является объектом с точки зрения ОС.

    Но если твой преподаватель - такой душный, то сделай

    class Calculator {
       ...
    }

    Можно сделать объектом число и операцию над ним (унарная или бинарная) но это уже немотивированное
    (или слабо мотивированное) действие. Теоретики ООП всегда пишут что введение объекта должно иметь смысл. Иначе так можно
    дойти до абсурда и объявлять объектом любую чепуху, что только усложнит написание кода
    и создаст бюрократию на пустом месте.

    Поясни это преподавателю если он будет сильно настаивать на том что мало объектов.
    Ответ написан
    Комментировать
  • Как правильно подключить #include?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если буквально переводить ошибку
    In included file: unknown type name 'c_image'clang(unknown_typename)
    window.hpp(24, 25): Error occurred here

    То будет - во включаемом файле неизвестное имя типа c_image
    и ошибка находится здесь window.hpp(24, 25)
    Ответ написан
    Комментировать
  • Откуда взялся const?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Попробуй так.

    void printMessage(const char str[]);

    Чем новее становится версия стандарта С++ - тем строже проверки.
    Ответ написан
    Комментировать
  • Тонкости Компиляторов. Почему в классах с++ не требуется объявление функции до вызова?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Конвейер компилляции С++ точно не прост. На хай-левеле это 3 шага. Препроцессор, компилляция и линкер.
    А сама компилляция в свою очередь тоже сложна. Там полюбому будет работа с шаблонным процессором
    и еще будет обязательно проход оптимизации. Это когда из кода можно выкинуть недостижимые ветки или
    размотать циклы. И это тоже шаг.
    Ответ написан
    Комментировать
  • Нейросеть без библиотек. Как можно реализовать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если сфокусироваться на решении задач про созданию простой двухслойной нейросети то тебе
    нужна матрица и вектор и операции над ними. И активационная функция. И функция обучения.

    Вот это все
    neuron
    layer
    network

    я-бы на твоем месте не делал. Это уже архитектура и интеграция. Если развивать проект дальше.

    И ты должен сам себе ответить на вопрос - что ты хочешь изучать. ООП или нейросети.
    Нейросети это тяжелая тема. Там много экспериметов. Много разочарований. Много работ
    дата-инжениринга по сбору и фильтрации входных данных. И этого всего настолько много
    что для ООП там уже сил не остается. Тоесть твоя декомпозиция задачи на 3 класса на старте
    тебе ничего пока не дает. Но обязывает тебя очень многому.

    Я-бы предложил делать прототип в олипиадном стиле.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ты наверное новичек?

    Переменную не рекомендуется дважды использовать в разных ролях в одном блоке кода.
    Ты-же не в ассемблере пишешь? Верно? Зачем тебе эта экономия. Создание новой переменной -
    безопаснее и надежнее. Хороший компиллятор уже сам разебертся где оптимизировать а ты
    - просто напиши чортов правильный код.

    И не забывай инициализировать. И не забывай про scopes.

    for(int i = 0; i < n; i++) {...}

    Иногда профессионалы могут использовать переменную дважды для достижения какой-то другой
    цели. Тут надо смотреть use-case.

    Но Quod licet Iovi, non licet bovi. Тебе пока не позволено. Научись сначала просто
    писать код без ошибок а потом уже делай трюки.
    Ответ написан
    2 комментария
  • Как отобразить байт в двоичном виде?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Программист С++ должен уметь работать с битами. Сдвигать влево-вправо. Делать булевы операции.
    Тем более что ты там сериал-порты собрался крутить.

    Вот сам алгорим
    https://stackoverflow.com/questions/111928/is-ther...

    От него уже можно и форматировать массив и перегружать "птичку влево".

    Qt - хорошее корбочное решение. Но твой вопрос должен был пойти не от Qt.
    Ответ написан
    Комментировать
  • Как нарисовать кривую Серпинского (см. ниже), не используя графические библиотеки, а '*' или слешы?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Самый простой путь - рисовать эту картинку внутри матрицы (растр).
    А потом перевести элементы этой матрицы в псевдографику https://en.wikipedia.org/wiki/Box-drawing_character

    Но я тебе это не советую, потому что выглядит как сильно грубое разрешение.

    Рисование слешами или зведочками возможно. Но это ASCII art. Иногда выглядит красиво
    а иногда вообще нечитабельно.
    Ответ написан
    4 комментария
  • Как найти минимальный ограничивающий параллелепипед?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я не уверен что стоит вообще искать идеальное решение. Особенно для 800 точек. Задача
    пахнет комбинаторной со всеми вытекающими.

    Я-бы предложил дать программе время (секунд) или количество итераций через которые
    она должна выдать почти-минимальный параллелепипед. Но мы при этом понимаем что это не самый идеальный.

    Для малого числа точек (8) можно построить выпуклую оболочку. И попробовать прикладывать
    первую грань параллелепипеда к каждой грани выпуклой оболочки. А оставшиеся грани мы можем
    получить вращением параллелепипеда до тех пор пока bounding volume не будет минимален.
    Учитывая дискретность выпуклой оболочки, поворот тоже может быть дискретным. Например там
    проверить штук 20 углов. Вот как-то так.
    Ответ написан
    2 комментария
  • Неверная компиляция классов C++ в Unreal engine 5?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Начни с простого. Сделай новый проект в UE и сымитируй одну ошибку. Так проще разбираться.
    Ответ написан
    Комментировать
  • Есть ли хорошие пошаговые туториалы проектов на С++ для новичков?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно С++ в вакууме не существует. Его учат сразу применительно к программированию UI под Windows,
    или к Unreal Engine, или к сетевому программированию под Linux/Unix. Или еще более специфичный
    сегмент - сетевое оборудование и микроконтрллеры. Это неизбежно.

    Особенно когда ты доходишь до дисковой подсистемы, сетей или мультизадачности - ты просто выходишь за рамки С++ и нужно разбираться во всем остальном. И мне кажется что в этом главный челлендж. Не сам язык а
    системная архитектура и прикладные фреймворки.

    Тоесть в самом вопросе ты должен сам решить куда ты дальше со знаниями С++ пойдешь.

    P.S. С++ за 14 дней... - это завсегда можно найти.
    Ответ написан
    3 комментария
  • Где ошибка в коде?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот тут как-то странно написано.
    if(m == 'd') racket.x + 1;
    if(m == 'a') racket.x - 1;


    Если хочешь чтоб результат сохранился то надо или инкремент написать или выражение с присваиванием
    racket.x = racket.x + 1;
    Ответ написан
    2 комментария
  • Почему если выносим конструкции из шаблонной функции, нужно заново прописывать тип и шаблон?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Декларация класса и реализация его методов могут лежать в разных файлах исходного кода (*.h, *.cpp)
    Ответ написан
    Комментировать
  • Как параллельно подгружать файлы в C++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У тебя должна быть shared memory для всех потоков-участников этого процесса.
    И один из потоков (главный) должен заранее планировать что какие-то части
    файлов должны находится в shared memory в нужное время. Технически
    для C/C++ это решенная задача. Тут единственное что интересно - это
    обсуждать логику главного потока. Тоесть когда и в какой момент времени
    главный должен решать что подгружать. А может он передумает и решит
    что надо срочно выгружать потому что сюжет игры меняется. Или игрок
    будет бегать между 2 левлами через портал и постоянно перегружать
    уровни туда-сюда.
    Ответ написан
  • Не работает простой код хотя он правильный в чем может быть проблема?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Так вроде лучше

    for (int i = 0; i < 10; i++) {
            cout << i << endl;
    }
    Ответ написан