ВОПРОС № 1
Вот взял из книжки рецептов C++ реализацию БПФ. Она там написана в виде одного файла, а мне нужно сделать 3.
Вот мои файлы.
fft.h
Код:
#ifndef FFT_H
#define FFT_H
#include <complex>
#include <cmath>
#include <iterator>
using namespace std;
unsigned int bitReverse (unsigned int x, int log2n);
const double PI = 3.1415926536;
template<class Iter_T>
void fft (Iter_T a, Iter_T b, int log2n)
{
typedef typename iterator_traits<Iter_T>::value_type complex;
const complex J(0, 1);
int n = 1 << log2n;
for (unsigned int i = 0; i < n; ++i) {
b[bitReverse(i, log2n)] = a[i];
}
for (int s = 1; s <= log2n; ++s) {
int m = 1 << s;
int m2 = m >> 1;
complex w(1, 0);
complex wm = exp (-J * (PI / m2));
for (int j = 0; j < m2; ++j) {
for (int k = j; k < n; k += m) {
complex t = w * b[k + m2];
complex u = b[k];
b[k] = u + t;
b[k+m2] = u - t;
}
w *= wm;
}
}
}
#endiffft.cpp
Код:
#include <complex>
#include <cmath>
#include <iterator>
#include "fft.h"
unsigned int bitReverse (unsigned int x, int log2n) {
int n = 0;
int mask = 0x1;
for (int i = 0; i < log2n; i++) {
n <<= 1;
n |= (x & 1);
x >>= 1;
}
return n;
}
main.cpp
Код:
#include <iostream>
#include <complex>
#include <cmath>
#include <iterator>
#include "fft.h"
using namespace std;
int main () {
typedef complex<double> cx;
cx a[] = {cx(0,0),cx(1,1),cx(5,3),cx(4,4),cx(4,4),cx(3,3),cx(1,1),cx(0,0),cx(7,7)};
cx b[9];
fft(a,b,3);
for (int i = 0; i < 9; ++i) {
cout << b[i].real() << endl;
}
}
А вопрос в следующем:
хочу в файле fft.h внести описание функции
template<class Iter_T>
void fft (Iter_T a, Iter_T b, int log2n);
а в файле fft.cpp ее реализацию. Как это делается, а то все мои попытки увенчивались ошибкой компиляции а-ля "я нифига не знаю что такое template<class Iter_T>
void fft в файле fft.cpp в строке номер N".
Вопрос 2.
Хочу из программы на C++ выполнять команды оболочки bash, аналогично, как это можно делать, например, в скриптовых языках command("ls -l").
Как это делать на C++, т.е. какие библиотеки подключать, какие функции использовать?
Вопрос 3.
Если выполнили команду, каким образом можно получить результаты ее выполнения в программе?
Заранее всем спасибо за ответы и помощь!