• Как правильно сделать комплексное преобразование Фурье в python?

    @res2001
    Роман Попов, Проблема не ясна. Что конкретно у вас не получается?
    В результате максимальная магнитуда для 0 индекса и 2048.

    В результате БПФ в нулевой гармонике находится постоянная составляющая сигнала. Нулевая гармоника обычно максимальна. Т.к. результат БПФ симметричен, то и последняя гармоника будет такой же как нулевая, за исключением того, что мнимая составляющая во второй половине спектра идет с противоположным знаком.
    Обычно в дальнейших преобразованиях вторую половину спектра не используют.
    Постоянную составляющую спектра (нулевую гармонику) можно сделать нулевой. Для этого надо найти среднее арифметическое временного сигнала и разделить каждый отсчет на это среднее.

    Если у вас проблема правильно собрать входной комплексный массив для БПФ, то можно сделать так:
    in = I + 1j * Q
    Это сработает, если массивы I и Q будут numpy array. Если это не так, то сначала приведите их в этот вид:
    I = np.asarray(I)
  • Что не так с наследованием?

    @res2001
    Конструктор в наследнике в вашем случае не обязателен - будет использован конструктор по умолчанию, конструктор mnoj будет вызван со значением параметра по умолчанию.
    Если нужно для mnoj задать отличное от умолчания значение параметра, то, конечно, нужно делать явный конструктор для потомка и в нем вызывать конструктор предка с нужным параметром, например так:
    mnoj1(int n = 0) : mnoj(n) {}
  • Как написать функцию добавления/удаления элемента в массив?

    @res2001
    Sazoks,
    Ругается на амперсант &

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

    @res2001
    Посмотрите внимательно сюда:
    s[i]=(char *)malloc( 60*sizeof(char));
    и сюда
    s[i]=istr;
    1. Тут есть потеря выделенной malloc памяти во втором присваивании.
    2. Память mallocом вы выделяете под "подстроку", но в s[i] у вас в итоге хранятся указатели на уже существующую строку в c[300]. И это правильно! Цикл с mallocом вообще лишний. Просто определите s как статический массив указателей рамерностью в 2 раза меньше, чем массив c.

    Если вам нужно только вывести строки и не обязательно их складывать в массив, то и s[] вам не нужен - сразу же выводите istr на экран.
  • Как не собирать повторно зависимость при сборке проекта в cmake?

    @res2001
    Другой вариант - использовать библиотеку как внешнюю зависимость.
    В этом случае в вашем проекте уже не будет сабмодуля с библиотекой - библиотека будет полностью внешней сущностью. Пользователь должен будет ее установить самостоятельно каким-то образом, а в вашем проекте просто надо выводить ошибку, если find_package не нашел библиотеку.
    При установки библиотеки обычно вместе со своим бинарником и заголовками устанавливают так же файлы для поиска библиотеки. Это могут быть те же find.cmake файлы для find_package, где будет add_library(... IMPORTED ...). Или конфигурационный файл для pkg-config - эта линуксовая утилита, с помощью которой find_package находит большую часть внешних библиотек.
    В винде вместо pkg-config используются возможности какого-либо пакетного менеджера, например для MSVS есть vcpkg. Обычно в этом случае в cmake уже есть поддержка пакетного менеджера и find_package в состоянии найти библиотеку установленную с его помощью.
  • Как не собирать повторно зависимость при сборке проекта в cmake?

    @res2001
    Mars36, Ок. Тогда можно делать так:
    вручную проверяете наличие собранной библиотеки:
    1. Если библиотека собрана, то создаете цель для библиотеки с помощью add_library(... IMPORTED ...) имя для цели задаете такое же как и в цели для сборки библиотеки. По уму в директиве add_library надо задать не только путь к бинарному файлу библиотеки, но и пути к заголовкам. В этом случае цель импортированной библиотеки будет аналогична цели для собираемой библиотеки и подключать библиотеку к вашей конечной цели можно будет обычным образом через target_link_libraries() без дополнительных действий.
    2. Если библиотека не собрана - add_subdirectory()

    Лучше всего создать свой собственный файл find<имя библиотеки>.cmake для поиска библиотеки, который будет использовать find_package и там производить все эти манипуляции. Примеры подобных файлов поиска в интернете полно.
    Так же нужно учесть, что собранная библиотека будет лежать в каталоге сборки, а не в каталоге сабмодуля. Если не ошибаюсь, каталог сборки можно получить из переменной ${CMAKE_CURRENT_BINARY_DIR}, но это не точно.
    Содержимое переменных можно вывести на экран с помощью message.
    У cmake толковая документация, так что рекомендую: https://cmake.org/cmake/help/v3.7/genindex.html
  • Как не собирать повторно зависимость при сборке проекта в cmake?

    @res2001
    У вас либа в проекте в виде бинарника лежит?
    Тогда можете просто ее указывать в target_link_libraries().
    Если либа в исходниках и ее нужно просто один раз собрать, то оно в принципе так и работает по умолчанию.
    Да в каталог с либой cmake будет заходить при каждой сборке. Ведь конфиг cmake для либы лежит в каталоге с либой и по другому он просто не знает на какие зависимости нужно смотреть. Кроме того пока не проверит каждый файл на предмет изменений, cmake не может узнать не изменилось ли чего в библиотеке. Но пересобирать библиотеку cmake не будет, если нет необходимости.
  • Зачем используют константы для объявления длины массива?

    @res2001
    Hemul GM, Предпочитаю использовать вариант: ДлиннаМассива(массив), чем константу, т.к.:
    1. для статических С/С++ массивов это константное выражение вычисляется на этапе компиляции и не отнимает процессорного времени при выполнении.
    2. Часто семантически более понятно явное взятие длины массива, чем использование константы, т.к. константы и массивы часто называются так, что между ними трудно уловить связь и приходится при чтении кода дополнительно выяснять эти связи. При использовании выражения ДлиннаМассива(массив) такой неоднозначности не возникает.

    При этом массив объявляется, конечно, с использованием константы.

    Для VLA массивов выражение ДлиннаМассива(массив) вычисляется на этапе выполнения. Вообще лучше не использовать VLA, особенно в С++.
  • Как вызвать класс комплексное число?

    @res2001
    im_noob, Я так и подумал.
    Complex complex = polynom.computePolynomial();
    complex.show();
  • Как вызвать класс комплексное число?

    @res2001
    im_noob,
    его результат вывести на экран

    computePolynomial() сам ничего не выводит, он только вычисляет. Это ясно по его коду.
    Вам надо вывести результат на экран любым способом, который придумаете. Впрочем в коде уже все придумано, нужно только использовать.
  • Как получить доступ к винчестеру?

    @res2001
    Давно не слышал употребление слова винчестер :)
    Вы его употребляете тут в значении "жесткий диск"?
    Если да:
    Какие сегменты на жестком диске?
    Там есть файлы, каталоги, сектора, головки, цилиндры, ... Сегментов нет. Что же вам нужно?
  • Как связать динамическую библиотеку с кодом cpp?

    @res2001
    брюликам не важно сколько ты н, При запуске начинают играть уже другие правила!
    В линуксе при запуске программ динамические библиотеки не ищутся в текущем каталоге или в каталоге откуда запускается программа, они ищутся только в определенных местах. Обычно это /lib, /usr/lib, ...
    Каталоги поиска библиотек можно сконфигурировать с помощью команды ldconfig.
    Но проще запускать программу так:
    LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./a.out
    Т.е. перед запуском вы прописываете текущий катало (".") в переменную LD_LABRARY_PATH и загрузчи начинает искать библиотеки в текущем каталоге. Но в продакшене нужно библиотеку положить в какой-либо путь "по умолчанию".
  • Как связать динамическую библиотеку с кодом cpp?

    @res2001
    брюликам не важно сколько ты н,
    В /root у вас должен лежать файл libselenium.so

    Читайте внимательно!
  • Как связать динамическую библиотеку с кодом cpp?

    @res2001
    брюликам не важно сколько ты н, Когда вы линкуете статическую библиотеку, то она вся лежит в lib. Когда линкуете динамическую, то в lib лежат ссылки на экспортируемые функции соответствующей .dll. В so эта информация хранится в самом файле и lib не нужен.
    Лежит но г++ его прямо не хочет видеть.

    Может вы не правильно указываете имя библиотеки в команде, нет прав на файл библиотеки, на библиотеке нет права на выполнение... Тут уже какие-то элементарные причины. Ищите где вы ошиблись.
    Давайте сюда полный вывод g++.
  • Как связать динамическую библиотеку с кодом cpp?

    @res2001
    брюликам не важно сколько ты н,
    cannot find -lsel

    У вас библиотека selenium?
    На самом деле в линуксе все проще. В винде для линковки библиотеки нужна не сама библиотека (.dll), а промежуточный файл .lib, при этом сама .dll понадобится только при выполнении программы.
    В линуксе этой прослойки .lib нет, поэтому немного проще. Но в целом все аналогично должно работать.
    В /root у вас должен лежать файл libselenium.so
  • Как связать динамическую библиотеку с кодом cpp?

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

    На счет сборки:
    1. в опции -l не надо указывать префикс lib, т.е. просто -lselenium
    2. Линковщик должен знать где фактически лежит библиотека. Если она лежит не по стандартному пути уже известному линковщику, то нужно при сборке использовать ключ -L<путь к бинарникам библиотеки>.
    3. Компилятор должен знать где искать заголовочные файлы библиотеки, если они расположены не по стандартным путям. Чтоб указать дополнительный путь к заголовочным файлам нужно использовать ключ -I<путь к заголовкам библиотеки>
  • Почему скорость битовых операций отличается в 1000 раз?

    @res2001
    bakdurak,
    не должен выкинуть

    Я читал коменты. Да там все верно написано.
    Вот только в дополнение к написанному в bit у вас сейчас простое присваивание, а следовательно на выходе из цикла имеет значение только последняя итерация. Если я это увидел, то и компилятор то же увидет :)
    И вывод переменной в конце тут не поможет - вам надо каким-то образом использовать значения всех итераций цикла bit += - самый простой вариант это сделать.
  • Где ошибка в коде?

    @res2001
    Вы откомпилируйте программу. Любой компилятор вам скажет где ошибка в коде.
    Если вы не знаете как интерпретировать сообщение компилятора, то давайте его сюда.
    Так сходу скажу, что ошибка есть тут: *x[i]= *x[i] * *x[i];
    Нужно писать так: x[i]= x[i] * x[i];
  • Почему скорость битовых операций отличается в 1000 раз?

    @res2001
    bakdurak, Кстати, есть шанс, что компилятор вообще выкинет цикл for (int j = 0; j < 8; ++j).
    И оставит от него в лучшем случае последнюю итерацию. А если будет совсем молодец, то выкинет и верхний цикл то же.
    По уму вам нужно делать bit += ..., что бы у компилятора не было повода что-то выкинуть из кода.