3 вопроса по C++ (OS: Debian 4.0)

Модератор: Модераторы разделов

godima
Сообщения: 92
ОС: Debian Etch

3 вопроса по C++

Сообщение godima »

Добрый день, уважаемые эксперты C++!

ВОПРОС № 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; } } } #endif


fft.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.
Если выполнили команду, каким образом можно получить результаты ее выполнения в программе?

Заранее всем спасибо за ответы и помощь!
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: 3 вопроса по C++

Сообщение v04bvs »

Шаблоны не получится компилировать отдельно. В крайнем случае напишите в конце h-файла #include "file.cpp"
Спасибо сказали:
TwisT
Сообщения: 265
ОС: Debian

Re: 3 вопроса по C++

Сообщение TwisT »

По поводу 2: что бы выполнитькакую нить команду можна заюзать system()
Например: system("ls -l");
вот
По поводу3: system в случае успеха возвращает код выполненой операции, а сам вывод команды ls -l
ты получить не сможешь, хотя можно сделать так system("ls -l > output.txt"); и потом их файла вывод прочитать
но это извращение, скачай книгу по програмированнию для Linux/Unix , посмотри как грамотно делать
тут просто долго описывать всё
Linux user #432536.
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: 3 вопроса по C++

Сообщение Uncle_Theodore »

По поводу №2 и 3, смотри man popen
Спасибо сказали:
ad_user
Сообщения: 1

Re: 3 вопроса по C++

Сообщение ad_user »

Привет,

Отправил сообщение в ПМ, посмотри, пожалуйста.
Спасибо сказали: