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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть такая популярная задача. Называется СУММА ПРОПИСЬЮ. Ее решают тыщу раз и для каждого языка уже написано много кода. Эти типа 1.25 == "Один рубль двадцать пять копеек".

    Поищи исходники - там будет половина решения твоих окончаний.
    Ответ написан
  • Как правильно сортировать файл?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не совсем ясно , чего хотел преподаватель.

    Но для сортировки больших массивов ( которые много крат превышают оперативку ) используется сортировка слиянием - merge sort.
    Ответ написан
    Комментировать
  • Как переделать код под ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    ООП предполагает что в задаче есть некая сущность. Объект. И у него должны быть методы. Что происходит в данной задаче? Пользователь вводит x, потом размер массива. Потом сам массив. После этого делаются какие-то манипуляции с массивом. И после этого массив распечатывается на экран. Где тут ООП? Я не знаю! Я чорт возьми не пойму где здесь ООП.

    Вобщем скажи своему преподавателю что здесь нет смысла вводить ООП. Код достаточно хорош и концептуален в том виде как он записан. И надо не забывать про принципы KISS/YAGNI которые никто не отменял.
    Ответ написан
    Комментировать
  • Как в c++ сделать проверку на число и чтоб например если несколько точек в числе или минус в середине была ошибка и возвращало обратно к вводу?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Проверить что внутри строки - нечто похожее на число - это одна задача. Ее можно сделать регуляркой. А сделать кастинг его к int/long/float/double - это другая задача.

    Некоторые числа бывают слишком большие и не влезают даже в long (64) и некоторые вещественные могут иметь множитель 10 в степени 310 и это не лезет в double. Мне сложно такое представить но теоретически пользователь может такое ввести.

    Какую задачу решает автор? Что будет дальше происходить с введенным числом?
    Ответ написан
  • Как можно без сторонних библиотек быстро и кроссплатформенно прочитать или записать некоторый кусок байтов с диска или на диск?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Проще всего с этим работать на линуксе. Эта операционка отображает все диски на блочные устройства /dev/* и позволяет с ними работать просто как с очень большими файлами.

    Разумеется права суперпользователя тебе пригодятся. Механизмы безопасности никто не отменял. В Windows тоже есть аналог для таких устройств.
    Ответ написан
    Комментировать
  • Как создать тест для C++ в gradle?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не существует такой задачи как тесты С++ в gradle.

    Но gradle позволяет вызвать shell-команду куда ты можешь вставить вызов g++ компиллятора и потом вызов теста.
    Как здесь пишут https://docs.gradle.org/current/dsl/org.gradle.api...
    Что-то вроде
    commandLine 'g++ demo-Greeter.cpp -o demo-Greeter.exe'
    commandLine './demo-Greeter.exe'

    Это направление. Дальше разбирайся сам.
    Ответ написан
    1 комментарий
  • Максимально производительные GUI-библиотеки для плюсов (Windows)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Возникла проблема - требуется писать программы быстрыми, чем быстрее - тем лучше.


    Ты решаешь какую-то искусственную проблему. Стандартные компоненты пишет целая корпорация и анализируют тыщи тестировщиков. Сомнительно что ты сможешь написать нечто даже близко подходящее по возможностям.

    Кстати я тебе предлагаю как всегда пойти от формализма - просто перечислить фичи которые ты собираешся реализовать в виде документа. И я думаю где-то на 500-й фиче ты забросишь это дело.

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

    Яркий пример - создатели своих DBMS. Тыщи их. Но никто не в состоянии довести разработку даже до альфа-версии. А уж о том чтобы ее показать на презентации - вообще и речи нет.
    Ответ написан
    3 комментария
  • Чем обусловлены различия в работе со строками и другими массивами?

    mayton2019
    @mayton2019
    Bigdata Engineer
    И ещё хотелось бы понять, почему каждый такой указатель является константой?


    Это - тяжелое наследие старых систем. В данном примере ты разбираешся с ASCIIZ-строками. С массивами символов которые завершаются нулем. Такая организация позволяет хранить строки компактно. Маркер const защищает строку от случайного изменения. И правильно делает. От этого больше проблем. Тот формат и тот способ хранения строки вообще не предполагает активных изменений. Особенно с размером. Максимум что можно делать - только читать.

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

    Для С++ более удобной строкой является std::string. Его использовать приятнее. И с размерами там веселее.
    В легаси исходниках можно встретить причудливые CString (MFC), TString (Borland). Это все разные реализации строк.

    Для Qt есть тоже свой тип строк.
    Ответ написан
    Комментировать
  • Как пропустить аргумент функции при её вызове?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть понятие partially defined функция. Это работает в Haskell, Scala. Результатом такого например
    применения будет просто онлайн компилляция новой функции с меньшим числом аргументов.

    plusInt(_, b)

    Но для С++ тем более в данном контексте использования тебе проще сделать просто еще одну функцию.
    Кстати обращаю твоё внимание на то что функции обычно возвращают занчения. А побочный эффект
    такой как cout - лучше просто вызвать отдельно.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    - ООП
    - Функциональное
    - Процедурное
    - Структурное

    Это во первых - устаревшие понятия. Все из 20-го века. Сегодня они почти не актуальны.

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

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

    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 секции всегда рассматривается как потенциальный баг.
    Ответ написан