10 REM dft
20 N=8
30 DIM A(N),B(N),X(N)
40 FOR I=0 TO N-1
50 READ X(1)
60 NEXT I
70 P=6.283/N
80 FOR K=0 TO N-1
90 A(K)=0:B(K)=0
100 FOR J=0 TO N-1
110 A(K) =A(K)+X(j)*COS(P*J*K)
120 B(K) =B(K)-X(J)*SIN(P*J*K)
130 NEXT J
140 NEXT K
150 FOR I=0 TO N-1
160 Y=SQL(A(I)^2+B(I)^2)
170 LPRINT I;:LPRINT USING "###,###";A(I),B(I),Y
180 NEXT I
190 DATA 1,1,1,1,0,0,0,0
このDFTプログラムをC言語に直したいのですがよく分かりません;
お願いします@@;
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ずいぶん懐かしい言語で書かれたソースですね
この言語は、BASICですよ
BASICといってもVisual Basicでは、ありません
VB以前のBASICで、N88-BASICや、BASIC/98とかにあたります
さて、プログラムの内容ですが、だいたい、以下の内容になっています
先頭にある数字は、行番号なので、それを手がかりに参考にしてください
10は、コメントです
20~30は、定数と、配列を宣言してます
40~60は、190にある元データを配列Xに代入しています
70~140は、フーリエ変換の本体部分です
150~190は、出力部分です(LPRINTなので、プリンタに出力しているかも)
C/C++に直すと以下のようになります
なお、注意点としては、
・純粋なC言語にすると、元のソースとの対応が混乱しそうなので、C++にしています。
・LPRINT文は、プリンタ出力を行うのですが、今回は、標準出力にしています。
・コンパイルおよび、実行は行っていません。細かいところで誤りがあるかも知れません。
です。ご容赦ください。
/* dft */
#include <cstdio>
#include <cmath>
using namespace std;
int main(void)
{
// 20~30の内容をC/C++で書くと
int N = 8;// 定数なので、#defineにしたほうが良いかも
double A(N), B(N), X(N);
// 40~60、190の内容をC/C++で書くと
X(0) = 1.0;
X(1) = 1.0;
X(2) = 1.0;
X(3) = 1.0;
X(4) = 0.0;
X(5) = 0.0;
X(6) = 0.0;
X(7) = 0.0;
// 70~140の内容をC/C++で書くと
double P;
P = 6.283 / N;
for (int K = 0; K < N; K++) {
A(K) = 0; B(K) = 0;
for (int J = 0; J < N; J++) {
A(K) = A(K) + X(J) * cos(P * J * K);
B(K) = B(K) - X(J) * sin(P * J * K);
}
}
// 150~190の内容をC/C++で書くと
for (int I = 0; I < N; I++) {
double Y;
Y = sqrt(power(A(I), 2) + power(B(I), 2);
pirntf("%d %7.3f %7.3f %7.3f\n", A(I), B(I), Y);
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 順列をランダムに発生するプログラム 1 2022/11/16 12:16
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Excel(エクセル) vba 「Nextに対するForが見当たりません」のエラーが発生する原因 1 2022/10/21 15:46
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像の拡大・縮小
-
OpenCVによる4値化について
-
C言語で%を使わない余りの出し方
-
ヒストグラム均等化処理プログラム
-
関数とビット列
-
intとlongは同じ?
-
OpenGLの惑星プログラム
-
迷路を脱出する経路探索プログ...
-
エラー C言語 プログラミング...
-
再起を使って迷路を解くプログ...
-
C#メール受信から件名、本文を...
-
2次関数プログラムを描写する...
-
16bitで乱数を生成する方法
-
c言語8クイーン問題が分かりません
-
再起呼び出しの回数をカウント...
-
C言語
-
C++で表を作成したいのです ...
-
複数の共有メモリの作成
-
2の補数を計算するプログラム
-
当たり判定の処理がわかりません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の補数を計算するプログラム
-
intとlongは同じ?
-
再起呼び出しの回数をカウント...
-
C言語で%を使わない余りの出し方
-
迷路を脱出する経路探索プログ...
-
画像の拡大・縮小
-
分数の足し算をさせるプログラ...
-
C言語で簡単なパックマンゲーム...
-
C++で表を作成したいのです ...
-
条件が多い場合
-
複数の共有メモリの作成
-
ヒストグラム均等化処理プログラム
-
3のつく数と3の倍数を表示 C言語
-
argvのNULLチェック
-
乱数で交互に偶数、奇数が、、、。
-
プログラミングに関して
-
OpenCVによる4値化について
-
whileとifを使い偶数を出すには
-
16bitで乱数を生成する方法
-
再帰処理をループ処理に変換
おすすめ情報