Ответы пользователя по тегу C++
  • Есть ли книги по winapi / c++?

    @res2001
    Developer, ex-admin
    Внутреннее устройство Виндоуз Русиновича.
    Никакая книга не сможет вместить описание всего API. Так что документация на сайте микрософта по любому нужна.
    Ответ написан
    Комментировать
  • Отсортировать данные о котировке акций по тикерам и по дате?

    @res2001
    Developer, ex-admin
    А что в плюсах уже стандартный std::sort перестал работать?
    Зачем вы пишете собственную сортировку пузырьком? Лучше чем в std вряд ли получится.
    Но учитывая, что
    Размер файла может быть достаточно большим для загрузки всех данных в память одновременно

    Нужно файл делить на несколько частей, помещающихся в память, каждую часть сортировать отдельно тем же std:sort, результаты сохранять в промежуточный файл. Затем результаты объединять с помощью сортировки слиянием.
    Ответ написан
    Комментировать
  • Почему переноситься на следующую строку?

    @res2001
    Developer, ex-admin
    Тут нет кода вывода на экран.
    Возможно ctime() возвращает строку включающую CRLF.
    Запустите под отладчиком, поставив точку останова после присваивания timee и посмотрите есть в ее содержимом CRLF. Так же можно поставить снифер, перехватить генерируемый трафик и посмотреть есть ли CRLF в пересылаемой информации.
    Если таким образом не найдете CRLF - значит проблема при выводе на экран.
    Ответ написан
    Комментировать
  • Как правильно работать с русскими символами в C++?

    @res2001
    Developer, ex-admin
    Сохрани исходники в UTF8 и пересобери. В Лине сейчас везде UTF8 по умолчанию стоит.
    В старых версиях Линукс в русской локали была кодировка KOI8-R.
    Ответ написан
    Комментировать
  • Как работает это выражение в Си?

    @res2001
    Developer, ex-admin
    Работает в Си так же как в С++.
    Тут надо немного теории:
    Как мы обычно индексируем массив: array[2]
    Компилятор это дело приводит к виду: *(array + 2)
    А теперь, что будет если написать вот так: *(2 + array)?
    Все нормально будет, результат тот же. При этом такое выражение, если переписать в индексном виде будет иметь вид: 2[array]
    Все остальное в приведенном варианте printf - декорация для запудривания мозгов - обычная операция ,
    Ответ написан
    Комментировать
  • Как использовать принятый двумерный массив из функции?

    @res2001
    Developer, ex-admin
    Массив Т в transposeMatric - это локальная переменная, вы пытаетесь вернуть указатель на локальную переменную. После выхода из функции все локальные переменные уничтожаются.
    На что будет указывать возвращенный указатель? - на какое-то место в стеке, где ранее была правильная переменная, а сейчас может находится все что угодно.
    В вашем случае Т надо выделять динамически или возвращать массив по значению.
    Ну и
    return *T;
    вернет T[0][0], а не то что вы, видимо, хотите.
    Крометого вы не правильно используете Т в main(). Объявив его как указатель:
    double *T;
    вы не сообщаете компилятору о размерности массива Т, поэтому индексация массива T[i][j] не может быть выполнена.
    Раз уж вы все равно пишете на С++, то используйте std::vector для передачи и возвращения массива.
    Ответ написан
    Комментировать
  • Как можно оптимизировать?

    @res2001
    Developer, ex-admin
    Это узкое место в вашей программе? Что-то не верится. Оптимизация не нужна.
    Ответ написан
    Комментировать
  • VC++ 2010 не даёт описать переменную в середине блока - ограничение Express-версии?

    @res2001
    Developer, ex-admin
    Посмотрите в настройках проекта какая версия языка используется.
    Не скажу на вскидку какие версии поддерживает cl от VS2010, в VS2017 за это отвечает опция /std. В VC2017 эта опция находится в Configuration Properties -> C/C++ -> Language -> C++ Language Standard
    Поведение, которое вы описываете, характерно для лохматых версий Си.
    Микрософт официально не поддерживает стандарты языка Си в своем компиляторе (хотя стандарты частично реализуются), поэтому в опциях компилятора нельзя это задать.
    Если задать опцию /TP, то все файлы исходного кода будут компилироваться как С++ код, не зависимо от расширения файла. По умолчанию, если расширение .c - компилируется как Си код. Возможно эта опция поможет избавиться от ошибки, но есть шанс появления других ошибок. В VC2017 эта опция находится в Configuration Properties -> C/C++ -> Advanced -> Compile As

    PS: номер и текст ошибки то же было бы не плохо сюда запостить.
    Ответ написан
  • Код сравнение длительности звуков c++?

    @res2001
    Developer, ex-admin
    Нужно знать частоту дискретизации и количество отсчетов в выборке.
    Частота дискретизации - это количество отсчетов за 1 секунду. Соответственно, длительность звучания в секундах находится: количество отсчетов / частоту дискретизации.
    Ответ написан
    Комментировать
  • Как скомпилировать и запустить файл cpp из другого файла cpp?

    @res2001
    Developer, ex-admin
    Очевидно - запускать отдельным процессом компилятор с соответствующими параметрами, анализировать ошибки функции старта процесса, ждать завершения процесса компиляции и анализировать код возврата. Так же можно (нужно) перехватывать stdout и stderr и анализировать сообщения компилятора (или просто выводить пользователю).
    Ответ написан
  • Как использовать одну переменную в разных программах?

    @res2001
    Developer, ex-admin
    К чему весь этот листинг?
    Т.е. вы хотите из разных программ (процессов) обращаться к одному участку памяти?

    Напрямую вы сможете использовать 1 переменную в разных программах только используя механизм shared memory ОС и разместив переменную в "расшаренном" участке памяти. В этом случае для синхронизации доступа к переменной в разных процессах вам необходимо будет использовать какие-либо именованные примитивы синхронизации, иначе будет состояние гонки и доверять содержимому переменной в этом случае будет нельзя.

    Есть и другие механизмы для передачи значения переменной другому процессу: сокеты, пайпы, файлы и т.д., любой механизм межпроцессного взаимодействия подойдет.

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

    @res2001
    Developer, ex-admin
    Из mass() возвращайте размер файла. Там где вызываете mass() суммируйте возвращенное значение.
    unsigned mass(char filePath[]) {
       ...
      return fileSize;
    }
    ...
    unsigned sum_mass = 0;
    sum_mass += mass("file1.txt");
    sum_mass += mass("file2.txt");


    Если сделать sum_mass глобальной, то она будет видна из всех функций данной единицы трансляции. И можно ее присваивать непосредственно в mass() и возвращать в endSumm(). Кстати endSumm() у вас не правильно объявлена.
    Но я бы не советовал использовать глобальные переменные - плохая практика.
    Ответ написан
    Комментировать
  • Нужно помочь в решении задачи по информатике. Почему не проходит?

    @res2001
    Developer, ex-admin
    Тут геометрическая прогрессия. Из формулы суммы n членов геометрической прогрессии у меня получилось что-то такое:
    h = floor( log(1. - (1.-b)*MAX/(double)a1) / log((double)b)); // в h количество тарелок при которых sum <= MAX
    if(h > n) 
      cout << n << std::endl;
    else
      cout << h << std::endl;

    На тестовом примере дает правильный результат.
    Ответ написан
    4 комментария
  • С++ Vs js производительность, у js немного больше вот функции для теста, я думал разница будет в 2 раза а не в 3секунды, код функций внизу?

    @res2001
    Developer, ex-admin
    1.Задайте size в миллион (или больше) и сравнивайте, ваши 11 сейчас - это вообще ни о чем для современных процов.
    2.В коде на С++ не нужно выделять память для Buf так как это делаете вы - выделяйте одним куском сразу. Можно использовать std::vector.
    3.В determinant() в последнем цикле избавьтесь от проверки условия внутри цикла. Возможно надо разбить этот цикл на 2.
    Это то что сходу заметил.

    На счет оптимизаций и прочего - можно не особо заморачиваться код на плюсах будет гораздо в любом случае на больших объемах данных. Просто на текущих объемах вы не можете даже адекватно замерить время, т.к. задача выполняется практически мгновенно не зависимо от ЯП, в этом случае затраты времени, например, на запуск программы начинают играть существенную роль.
    Ответ написан
    Комментировать
  • Что такое Си Runtime Library?

    @res2001
    Developer, ex-admin
    CRT - это реализация стандартной библиотеки Си/С++ для данного компилятора.
    ОС обычно пишутся на Си и если в ОС нет реализации функций из стандарта Си, то они реализуются в стандартной библиотеке. Все классы из stdlib С++ реализованы в CRT.

    CRT в VS может линковаться как статически так и динамически, в зависимости от опций компилятора. Линкуете статически - у вас распухает ваш исполняемый файл, динамически - пользователь должен предварительно поставить соответствующий vcredist (установку можно встроить в собственный инсталлятор). С точки зрения производительности оба варианта примерно одинаковы.

    Вы можете не использовать стандартную библиотеку в принципе (отключив ее опциями компилятора) и работать на прямую с ОС, но это накладывает много ограничений и вы фактически остаетесь с кастрированным вариантом ЯП, т.к. например в С++ даже стандартный new/delete, на сколько я знаю, реализованы в стандартной библиотеке и прямого аналога в ОС нет. Обычно этим никто не заморачивается из-за возникающих проблем, решение которых заметно увеличит время реализации проекта, разве что вам необходимо сделать исполняемый файл минимального размера, максимально быстро стартующий и без зависимостей.
    Ответ написан
    4 комментария
  • Как передать двумерный массив в функцию без динамического выделения памяти?

    @res2001
    Developer, ex-admin
    Можно ли как-то возложить на компилятор эту работу?

    int arr[] = {1, 2, 3};
    size_t size = sizeof(arr)/sizeof(arr[0]);  // size == 3

    Но как вы это прикрутите к вашей схеме не знаю.
    Возможно есть смысл определить ваши массивы как константы по одному и использовать эти константы для инициализации test и вычисления sizeof().
    Ответ написан
  • Как решить проблеу с установкой vcredist_x86.exe?

    @res2001
    Developer, ex-admin
    На последнем скрине версия х64, а вам, судя по всему, нужна х86. Скачивается по той же ссылке. Обе версии могут быть установлены одновременно.
    Можно попробовать деинсталлировать уже установленную версию 12.0.30501 и установить заново через установщик, скачанный с сайта микрософт. Установщик принудительно запускайте с правами админа.
    Ответ написан
    1 комментарий
  • Как определить чего не хватает для регистрации самописной DLLки на C++?

    @res2001
    Developer, ex-admin
    Как минимум run-time для вашей версии студии: https://www.microsoft.com/ru-RU/download/details.a...
    Если используете сторонние библиотеки то и их то же.
    Ответ написан
    1 комментарий
  • Какая из библиотек для прорисовки gui более производительна и менее требовательна?

    @res2001
    Developer, ex-admin
    Если речь о компилируемых ЯП, то обычно производительность GUI не является узким местом в приложении, не зависимо от используемой библиотеки.
    Но если это так, то скорее всего виноваты кривые руки разраба. И только в последнюю очередь используемая GUI библиотека.
    Ответ написан
    1 комментарий
  • Почему виснет консоль и не выходит из нее?

    @res2001
    Developer, ex-admin
    Когда вы объявляете указатель на объект, это не значит что у вас есть объект, у вас есть только указатель (в вашем случае он еще и не инициализированный, т.е. объекта точно нет).
    Указатель на что угодно - это просто адрес в памяти (т.е. это просто целое число).
    А вы в pMultComplex еще и обращаетесь к неинициализированному указателю.
    Аналогично и в некоторых других функциях.

    Вообще зачем вам столько вариаций умножения? Это какое-то извращение.
    Хватило бы operator* и operator*=.
    Можно еще упростить - сделать * через *=.

    Переопределять операции с указателями смысла нет - используйте ссылки.
    Ответ написан