Ответы пользователя по тегу C++
  • Не понимаю в чём ошибка?

    @Sumor
    sqrt это квадратный корень с одним аргументом.
    Поэтому в выражении sqrt(fabs(f-y),3) у вас сначала срабатывает оператор "запятая", а затем считается квадратный корень.
    Ответ написан
  • Как запрограммировать построение мультипликативной группы по неприводимому многочлену?

    @Sumor
    Биты в мультипликативных группах означают коэффициенты при соответствующих членах многочлена.
    Судя по всему 1001 означает неприводимый многочлен: 1*x^4+0*x^3+0*x^2+1*x^1+1 = x^4+x+1
    По свойствам таких групп достаточно взять любой элемент, кроме единицы и нуля, и его степени дадут вам все элементы.
    Проще всего взять элемент x, который соответствует числу 0010. Перебираем все его степени - получаем все элементы и таблицу умножения. Помним что у нас 1+1 = 0 и плюс равен минусу.
    x^0 = 1 = 0001
    x^1 = x = 0010
    x^2 = 0100
    x^3 = 1000
    x^4 - этот элемент больше нашего многочлена - нужно найти остаток от деления:
    x^4 : (x^4+x+1) = 1 * (x^4+x+1) + x+1 - остаток x+1 = 0011
    x^5 = x^4 * x = (x+1)*x= x^2 + x = 0110
    x^6 = x^5 * x = (x^2 + x)*x = x^3 + x^2 = 1100
    x^7 = x^6 * x = (x^3 + x^2)*x= x^4+x^3 - опять получили больше нашего многочлена - находим остаток от деления
    (x^4+x^3): (x^4+x+1) = 1 * (x^4+x+1) + x^3+x+1 = 1011
    и продолжаем до x^14
    Ответ написан
  • Как исправить ошибку "C4996 'strcat': This function or variable may be unsafe"?

    @Sumor
    Попробуйте ввести более 10 символов в word1 и word2 и у вас программа непредсказуемо упадёт.
    Если использовать strcat_s, то она проверит граничные условия и выдаст ошибку, если они не выполняются.
    Для использования strcat_s нужно немного переписать программу - обработать ошибку и знать размер первого буфера.
    Ответ написан
    Комментировать
  • В чем ошибка сортировки матрицы?

    @Sumor
    M и N поменялись местами
    for (int k = i + 1; k < N; k++) {
              for (int l = j + 1; j < M; l++) {
    Ответ написан
    Комментировать
  • Возможно ли создать dialogBox из пустого проекта dll с++ vs15?

    @Sumor
    Всё возможно только с помощью WinApi.
    Но это слишком олдскульно, непривычно и многословно.
    Общая схема, примерно такая:
    RegisterClass - регистрация названия (типа) главного окна
    CreateWindow - создание главного окна своего типа
    CreateWindow - создание кнопки на главном окне.
    Главная функция должна быть WinMain. И в ней должен быть цикл обработки c GetMessage и TranslateMessage.

    Есть слегка другой путь. Создать диалог в ресурсе, а затем его создать через CreateDialog или аналоги.
    Ответ написан
    Комментировать
  • LPCWSTR как сделать чтобы работало?

    @Sumor
    У вас перемешаны char и wchar_t.
    Тогда уж:
    wchar_t process_path[MAX_PATH];
    иначе у вас получается массив пустых указателей.
    Ответ написан
  • Почему при смене цвета текста в printf цвет не меняется, а попадают символы?

    @Sumor
    Первая консоль у вас поддерживает изменение цветов так как вы его изменяете, а консоль, которая создаётся автоматически при запуске второго приложения - нет.
    Ответ написан
    Комментировать
  • Символ перевода каретки не работает после расшифровки текста?

    @Sumor
    В Windows при записи символа \n в файл дополнительно записывается \r. При чтении наоборот он сглатывается.
    При работе в бинарном режиме такого не происходит, но чтобы в windows показывались нормальные строки они должны заканчиваться \r\n.
    Ответ написан
  • Почему функция New File не работает так положено??

    @Sumor
    Это же C++. Он за вас не будет сравнивать массивы символов.
    if(zi[i].DirVint==direction)
    В этом месте у вас сравниваются указатели на строки, а они, очевидно, разные.
    Вместо == нужно использовать методы типа strcmp или strncmp.
    Ответ написан
    Комментировать
  • Одинаковый ли результат имеют записи?

    @Sumor
    Всё что создано через new должно быть удалено через delete.
    Ответ написан
    Комментировать
  • Не создаётся дочернее окно WinAPI или CreateWindows возвращает нуль?

    @Sumor
    Чтобы понять что за ошибка вызовите дополнительно GetLastError.
    В момент обработки WM_CREATE окно ещё не до конца создано, может быть проблема в этом.
    Дочерние окна чаще всего подразумевают панели или контролы. Попробуйте создать дочернее окно не со своим классом, а, например, кнопку или текстовое окно.
    Ответ написан
    Комментировать
  • Почему Шифр Виженера не работает для маленьких букв?

    @Sumor
    if(isupper(i))
           out += (i + key[j] - 2*'A') % 26 + 'A';
            else
          out += (i + key[j] - 2*'A') % 26 + 'a';

    В первом случае у вас i - большая буква, key[j] - большая буква, поэтому вы вычитаете две буквы A.
    В первом случае у вас i - маленькая буква, key[j] - большая буква, а вы продолжаете вычитать две буквы A.
    Правильнее чуть сгруппировать, чтобы было понятно зачем вы отнимаете:
    out += ((i - 'A') + (key[j] - 'A')) % 26 + 'A';
    И тогда сразу станет видно, что в случае с маленькой буквой нужно:
    out += ((i - 'a') + (key[j] - 'A')) % 26 + 'a';

    NB: i - плохое имя для переменной типа char. Когда программист видит i он подразумевает цикловую числовую переменную.
    Ответ написан
    Комментировать
  • Написать программу, считающую сумму ряда с погрешностью EPS?

    @Sumor
    Очевидно, что при x = 2*PI ряд расходится.
    Скорее всего, можно доказать, что он расходится при любых x, возможно кроме каких-то особых точек.

    Например, если x = 2*PI/q, где q - любое рациональное число, q=m/n, где m - целое,n - натуральное. Тогда область значений функции cos(x*k) конечно, с мощностью не более n. Тогда можно взять минимальное значение из области значений и вынести его за скобки; тогда в скобках останется ряд, который снизу ограничивается гармоническим рядом, который расходится.

    Отсюда вам остаётся только считать частичную сумму ряда пока разность между элементами не станет меньше EPS. Кстати нахождение элементов, разность между которыми меньше EPS не гарантирует, что у вас не будет превышения этого порога в следующих слагаемых. Возможно имеет смысл EPS ограничивать соответствующие слагаемые гармонического ряда.
    Ответ написан
    2 комментария
  • Задача на нахождение среднего числа,как решить?

    @Sumor
    В вашей задаче может быть всего три ответа: a, b или c.
    Соответственно напишите всего одно условие для ответа a, одно условие для ответа b, и одно условие для ответа c. Больше вам ничего не нужно.
    Хотите сэкономить - напишите одно условие для a, второе для b, а всё что пройдёт дальше - будет вариант c.
    Ответ написан
    Комментировать
  • Как найти середину площади сложной фигуры?

    @Sumor
    Для решения задачи вы должны уметь находить:
    Sобщ - площадь всей фигуры.
    SL(x) - площадь фигуры, расположенной слева от линии x
    Функция SL(x) неубывающая, непрерывная, слева от фигуры равна 0, справа от фигуры равна Sобщ.
    Из этого следует, что существует такое значение xс, при котором SL(xс) = 0.5 Sобщ
    Аналитически его можно найти только для определённых случаев.
    Можно найти численными методами - в несколько этапов: берём x1, считаем SL(x1), если больше 0.5 Sобщ, сдвигаемся влево, если меньше - вправо и тд, пока не приблизимся к нужной нам точности.
    Ответ написан
    Комментировать
  • Как можно подставить другой путь к диску через метод FindFirstFileW?

    @Sumor
    Если вы используете TCHAR, то вместо FindFirstFileW нужно использовать FindFirstFile.
    TCHAR это в зависимости от настроек препроцессора или char, или wchar_t.
    Соответственно функции WinApi в зависимости от этой настройки сами выбирают какую версию ansi или unicode вызывать.
    Условно, вы можете использовать char, вызывать GetModuleFileNameA и FindFirstFileA.
    Или, если у вас только unicode: использовать wchar_t, вызывать GetModuleFileNameW и FindFirstFileW.
    Или, как делает большинство, использовать универсальный тип TCHAR, вызывать GetModuleFileName и FindFirstFile. Компилятор сам выберет какую версию ansi или unicode использовать.

    К сожалению для консоли Microsoft не придумал tcout, поэтому нужно в зависимости от параметра препроцессора выбирать консоль, например так:
    #if defined(UNICODE) || defined(_UNICODE)
    #define tcout std::wcout
    #else
    #define tcout std::cout
    #endif
    Ответ написан
    Комментировать
  • Как открыть и закрыть DVD-RW дисковод?

    @Sumor
    Попробуйте
    OpenParm.lpstrDeviceType = L"F:";
    OpenParm.lpstrDeviceType=L"CDAudio";
    mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD_PTR)&OpenParm);
    Ответ написан
    Комментировать
  • Медленное шифрование AES256, как ускорить?

    @Sumor
    Ну если результат шифрования расшифровывается, и совпадает с зашифрованными другими программами данными, то всё правильно.
    Проблема заключается в том, что часто реализованные в лоб алгоритмы выполняют много повторяющейся работы, которую можно оптимизировать. Как минимум, в процессорах 8-байтные регистры, а большинство операций в алгоритме - однобайтовые.
    Для оптимизации можно и нужно использовать профайлер, который покажет узкие места, которые можно попробовать оптимизировать.
    При компиляции нужно указать параметры для наибольшего ускорения.

    Для реализации можно использовать специальные инструкции процессора AES-NI, которые и используются в truecrypt.
    Ответ написан
    Комментировать
  • Задать имя Excel документа через Qt Creator?

    @Sumor
    После создания книги сделайте ей SaveAs.

    PS. У метода Workbooks.Add в параметры передаётся имя файла с шаблоном, на основе которого создать новую таблицу, а не имя будущей книги.
    Ответ написан
    Комментировать
  • Как перенести коронку в начало строки, сохранив при этом знаки в ней?

    @Sumor
    \r это возврат каретки (CR или 13 или 0x0d)
    \n это новая строка (LF или 10 или 0x0a)
    Если у вас устройство (например, принтер или консоль) их различает, то нужно использовать оба символа. Первый перемещает каретку в начало строки, а второй переходит к следующей строке.
    Традиционно в текстовых файлах Linux используется только \n, а в текстовых файлах Windows используется \r\n. В некоторых PDF внутри встречается только \r.
    Ответ написан
    Комментировать