Задать вопрос
Ответы пользователя по тегу C++
  • Почему не считывает русскую букву в char?

    mayton2019
    @mayton2019
    Bigdata Engineer
    При работе с языками в консоли обычно возникают следующие вопросы.
    1) Консоль. Какая кодировка по умолчанию для однобайтных символов. Смотри команду.
    chcp для windows или
    $ locale для linux.
    2) Какая кодировка указана для char для текущего компиллятора. Включен ли режим _UNICIDE.
    Посмотри что делают
    setLocale(...);
     setCodepage(...);

    3) Какой размер символа sizeof(char).
    4) В какой кодировке написан исходник. Это можно проверить если посмотреть hex редактором. Там где русская буква может быть например 0xC0 для однобайтной и двух байтной для Unicode.
    5) Установлены ли шрифты? Операционка может быть англо-язычной и в этом случае она не обязата что-то специфичное отображать.
    Ответ написан
    Комментировать
  • Как найти область двумерного массива?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Серая область? Тут наверное 2 цикла надо.

    Либо обходить левый прямоугольник элементов и уже 2 линиями ограничить. Одна линия
    y = x и вторая - перевернутая y = -x и сдвинутая на вниз на SIZE. Тоесть y = -x + SIZE
    Ответ написан
    Комментировать
  • Как возможно сделать этот код короче?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вместо 4 сторон света лучше брать единичный вектор на плоскости (x,y). Тогда формулы удара о борт получаются тривиальные. Просто где то меняется знак с плюса на минус.
    Ответ написан
    Комментировать
  • Как конвертировать строку массива в сам массив?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Никакой это не JSON.

    А по задаче. Может лучше не массив а vector?
    Ответ написан
  • Согласовать окончания 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...
    Ответ написан
    Комментировать