Ответы пользователя по тегу C++
  • Как написать цикл, чтобы рамка подбирала размер под текст на языке С++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот эти вот символы (191, 192, 196, 217, 218). лучше не использовать. Берите сразу Unicode в разделе BoxDrawing https://www.w3.org/TR/xml-entity-names/025.html

    Что за душный душнило этот ваш преподаватель? Расскажите ему уже что на дворе 2022 год.
    Ответ написан
    Комментировать
  • На сколько корректна такая реализация?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут зубчатый массив не нужен. Можно и одномерным прекрасно обойтись.
    for (int i = 0; i < heightGameField; i++)
          gameField[i] = new int[widthGameField];


    Тут всё поле можно не перерисовывать. Змейка это вообще - эконом-игра. В ней можно обновлять
    только голову змеи и хвост. И те места на карте где выпадает еда.

    for (int i = 0; i < heightGameField; i++)
        {
          for (int j = 0; j < widthGameField; j++)
          {
            switch (gameField[i][j])

    Я не кодил на SFML/Graphics.hpp. Моя С++ библиотека когда-то называлась Borland C++ BGI. Но там мне хватало
    вот такого частичного обновления экрана.

    Зачем этот метод? Он безсмысленный.
    int** getGameField(void)
      {
        return gameField;
      }

    Он взламывает инкапсуляцию класса. После него всё ООП должно пойди по звезде. Вобщем можешь его даже не делать.

    Вообще в данной игровой логике ООП не очень нужно. Ну тоесть я не вижу ниакой мотивации к ООП. Между змеей и локацией нет никакой секретности. Короче пиши набор функций и не парься. Если SFML жостко не требует ООП
    то и не беспокойся об этом. Шаблонизация тут как я понимаю важнее чем ООП. А об этом еще великий Степанов
    говорил.
    Ответ написан
    1 комментарий
  • Достаточно ли будет чтения cppreference для освоения STL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В 99м году я покупал в бумажном виде Леен Аммераль С++ для Программиста. Это было несложно чтиво потому что библиотека опиралась еще на легкий С++. Сегодня уже я-бы просто не брался. Слишком кучеряво всё стало в мире плюсов. Да и я ушел в другой сегмент разработки.

    К чему я это все. К тому что если автор не является миддлом в С++ то читать ему просто книгу по современному STL будет недостаточно. Нужно будет штудировать и сам язык который стал сложнее многократно.
    Ответ написан
  • Зачем нужен отдельный синтаксис для препроцессора?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Макросы - это рудимент. Пережиток прошлого. Во многих современных языках их нету принципиально. Хотя в C/C++ они выполняют функцию такого себе прозрачного преобразования исходника перед сборкой. С помощью М. можно например принять решение о платформенной компилляции WIN32/LINUX/MAC. Напихать ассемблера с вариантами.

    В gcc кажется есть ключи которые позволяют увидеть код программы после макро-подстановки.

    Вообще с помощью М. можно делать разные веселые вещи например переименовать TRUE в FALSE. Такая себе тема троллинга на собеседовании.

    Вот это предложение - хорошее.
    compiled{
       if(something){
       }
    }

    Но я думаю что комитет его уже обсуждал. Надо найти только протоколы.

    Почитайте еще спецификацию ZigLang. Там были реализованы какие-то фичи с compile time.
    Ответ написан
    Комментировать
  • [OpengGL] Почему вращается ось, а не фигура?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне вспоминается мульсериал Футурама. Там когда профессора спросили - на каком принципе летает его космическая ракета - он ответил что она на самом деле не летает. Она стоит на месте. Просто она двигает вокруг себя всю вселенную.

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

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

    Вот ссылочка на DLL-linked ordering. Может будет полезна

    https://docs.microsoft.com/en-us/windows/win32/dll...
    Ответ написан
    Комментировать
  • Как построчно сравнить два файла txt?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Первое. Тема топика Python + PowerShell. Тоесть непонятно тебе нужно программировать и развивать этот софт или решить задачу 1 раз и забыть. В зависимости от желания - будет разная реализация.

    Второе. Есть коробочные утилиты fc (Windows) diff (Linux) которые такое сравнение делают. Но обычно для исходников и при условии что изменений мало. Почитай про них. Возможно это частично решит твою задачу.

    Третье. Ты хочешь сравнивать одну строку со всеми из другого файла. Это декартово произведение. В данном случае тебе можно сортировать оба файла и тогда одинаковые значения будут кластеризованы рядом. Sort + Diff решают твою беду.

    Вобщем думай. Но лучше 1 раз сделай покрывающий пример двух файлов. И результат чего надо на выходе. Это сэкономит время.
    Ответ написан
    1 комментарий
  • Можете покритиковать мой код?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мда. Любители крестов - мозохисты. Я-бы так написал.

    using namespace std;
    
    cout << "-Меню-\n";

    Лаконично?

    И зачем вам такой перевод строки?
    Что, хотите под DOS и Mac сразу писать? Готов спорить что не грозит.

    А это что?
    LogPassword == Password
    Пароли так никто не проверяет. Есть функция которая сверяет хеши паролей. Потому что их не хранят никогда.
    В базе тоже их не хранят.

    А это что?
    std::ofstream Data("Data.txt");
    Всё пишем в один файл? Всех пользователей? И файл переписывается?
    Ответ написан
    6 комментариев
  • Можно ли сделать отдельный вывод в Microsoft Visual Studio 2021?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Программист управляет двумя потоками вывода текста. STDOUT и STDERR через функции printf(...) или через расширенную версию с указанием файлового дескриптора вывода fprintf( stderr, ....).

    При запуске в консоли вы можете указывать что например вывод ошибок идет в err.log и стандартный вывод в std.log
    application.exe > std.log 2>err
    (в данном случае двойка - это номер дескриптора STDERR. Есть альтерантивный синтаксис когда для STDOUT
    мы указываем единичку "1>std.log" но ее просто опускают поэтому синтаксис так странно отличается)

    Как поступает с обоими потоками среда - я не помню. Скорее всего она их объединяет. Поэтому запускайте в консоли.

    Это вобщем-то архитектура любого процесса Unix и Windows.
    Ответ написан
    2 комментария
  • Как решить задачу с символами? Почему не работает одна функция?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Размышления по code-review. Мне совершенно непонятно почему в одном условии выбран switch а в другом if.

    switch (a) {
        case 'n': fl = (b == 'o'); break;
        case 'o': fl = (b == 'n'); break;
        }

    Они ведь совершенно одинаковые по смыслу! Кроме того case без default секции всегда рассматривается как потенциальный баг.
    Ответ написан
  • Почему простой цикл на c++ выполняется медленнее, чем на golang?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Судя по скриншоту это windows. Если вы делаете бенчмарки под windows - то нужно правильно мерять время. Скорее всего вы меряли не время цикла а время запуска windows процесса + время цикла. Вместе с статическими конструкторами. И эти конструкторы в go оказались удачнее.

    Короче вы не втом месте включали секундомер. А то так можно и доказать что PHP быстрее чем C++.
    Ответ написан
    2 комментария
  • Как написать приложение на c++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Данный вопрос выходит за рамки C++.

    Он касается разработки под конкретную ОС (windows например) и эти вопросы нужно адресовать их API.
    Ответ написан
    1 комментарий
  • Как задать значение последней переменной?

    mayton2019
    @mayton2019
    Bigdata Engineer
    int64_t a = b/0
    Ответ написан
    Комментировать
  • Как конвертировать указатель PWSTR в указатель на string (c++)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут проблема наверное в том что PWSTR - имеет фиксированную разрядность (это широкий символ w_char). А std::string зависит от опций препроцессора UNICODE. Так-то оно конструируется через конструктор string или присвоение.
    Ответ написан
    2 комментария
  • Почему при вычитании двух вещественных результат неправильный?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вещественные бывают float и double. И у них - разная точность при работе с десятичной системой.
    Вообще все они не точно отражают введенную тобой десятичную дробь. Вопрос в том что ты с этого хочешь
    получить?

    Вот есть онлайн-калькулятор https://www.h-schmidt.net/FloatConverter/IEEE754.html
    Понабирай в нем твои числа и понаблюдай во что они превращаются после присвоения. А тогда уже
    и вопросы по вычитаню отпадут.
    Ответ написан
    21 комментарий
  • Как можно ускорить алгоритм?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Какое-то время я посвятил играм с простыми числами. В студенчестве еще.
    Вот тут не надо каждый раз прибавлять единичку.
    if (K % (i + 1) == 0) {
    Ее просто надо учесть в условиях цикла.
    if (K % i == 0) {
    Далее. Если нужно найти первый попавшийся делитель - то не надо перебирать все числа. Достаточно только 2 и все нечетные. Или даже лучше задать хард-кодом таблицу простых чисел до 2^16. Это как раз будет половина разрядной сетки int32.
    int primes[] = { 2,3,5,7,11,13,17...... 65521 }
    Это даст хорошее ускорение для поиска. Хотя время загрузки executable может увеличится. Кстати у меня много вопросов к бенчмаркам где стоит запредельно короткое время инициализации (0.25 s). Здесь - практически невозможно вычленить где время занимает алгоритм а где - просто запуск процесса операционки. Обычно когда меряют что-то подобное - меряют длительные процессы хотя-бы порядка минут но никак не секунд.
    Ответ написан
    2 комментария
  • Что не так, в чем ошибка?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В С++ массивы нумеруются от нуля до (n - 1).
    Ответ написан
    6 комментариев
  • Почему используется потенциально неинициализированная локальная переменная-указатель "matrix"?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если у вас d не равно 1 тогда возникает flow который приводит к matrix которая не аллоцирована.

    Кстати вы используете не матрицу а так называемый Jagged Array (зубастый массив). В этом нет смысла т.к. у вас матрица всегда прямоугольная и рациональнее выделить один большой массив и распределять его ячейки как элементы прямоугольной матрицы (i,j) формула смещения - очень простая. Ширину умножить на один индекс плюс второй.

    Я-бы делал так

    float* matrix = new float[n * m]
    ну и формулы доступа дальше подправить надо соотвественоо.
    Ответ написан
    Комментировать
  • Как повысить точность вещественного деления в среде C++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нормально все считается. У меня вышло

    sizeof(double) = 8 bytes
    z = 16.66666666666666785090


    gcc version 9.4.0
    Ответ написан
    2 комментария
  • Как на Linux читать и изменять память процесса?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Чтобы просто почитать память процесса - ему можно послать сигнал SIGQUIT и он должен ссыпать самого себя в дамп файла. Это законный метод. Программист пытается понять state процесса.

    Все прочие методы должны вызывать настоящий ужас спецов по инфо-безопасности. Кому понадобилось изменять чужие процессы? Какой юзкейс?
    Ответ написан
    Комментировать