プログラムの例とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > プログラムの例の意味・解説 

プログラムの例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2018/09/24 14:21 UTC 版)

レーダーのFFTアルゴリズム」の記事における「プログラムの例」の解説

以下はC言語による実装例である。 C言語による実装例#include #include #include int powerMod(int a, int b, int m);int primePrimitiveRoot(int p);void DFT(double **x, int n);void IDFT(double **x, int n);void FFT_prime(double **x, int n){ int i,len,flag,pad; int g,ig; double X[2] = {0,0}; double **b,**a,**c; /*ゼロ埋めサイズ計算*/ flag = 0; len=1; for(i=n-1;i>1;i>>=1){ if(i & 1){flag=1;} len <<= 1; } if(flag){ len <<= 2; /*2(n-1) - 1 以上2の冪乗*/ }else{ len = n-1; /*n-12の冪乗場合ゼロ埋めはしない*/ } pad = len - (n-1); /*ゼロ埋めの数*/ g = primePrimitiveRoot(n); /*nの原始根*/ ig = powerMod(g,n-2,n); /*nの原始根逆数*/ /*数列 a_q の作成*/ a = malloc(len*sizeof(double*)); for(i=0;i<len;i++){ a[i] = malloc(2*sizeof(double)); /*1番目と2番目の要素の間をゼロ埋めする。*/ if(i == 0){ a[0][0] = x[1][0]; a[0][1] = x[1][1]; }else if(i <= pad){ a[i][0] = 0; a[i][1] = 0; }else{ a[i][0] = x[powerMod(g,i-pad,n)][0]; a[i][1] = x[powerMod(g,i-pad,n)][1]; } } /*数列 b_q の作成*/ b = malloc(len*sizeof(double*)); for(i=0;i<len;i++){ b[i] = malloc(2*sizeof(double)); b[i][0] = cos(2*M_PI*powerMod(ig,i,n)/n); b[i][1] = -sin(2*M_PI*powerMod(ig,i,n)/n); } /*離散フーリエ変換*/ DFT(a,len); DFT(b,len); /*離散フーリエ変換されたaとbの要素ごとの積を計算し配列cに格納する。*/ c = malloc(len*sizeof(double*)); for(i=0;i<len;i++){ c[i] = malloc(2*sizeof(double)); /*複素数の積の計算*/ c[i][0] = a[i][0]*b[i][0] - a[i][1]*b[i][1]; c[i][1] = a[i][0]*b[i][1] + a[i][1]*b[i][0]; } /*逆離フーリエ変換*/ IDFT(c,len); /*x0をXg^-qに足す*/ for(i=0;i<len;i++){ c[i][0] += x[0][0]; c[i][1] += x[0][1]; } /*X0の計算*/ for(i=0;i<n;i++){ X[0] += x[i][0]; X[1] += x[i][1]; } /*X0,Xg^-q,を元の配列xに格納する。*/ x[0][0] = X[0]; x[0][1] = X[1]; /*添字並び変え*/ for(i=0;i<n-1;i++){ x[powerMod(ig,i,n)][0] = c[i][0]; x[powerMod(ig,i,n)][1] = c[i][1]; } for(i=0;i<len;i++){free(a[i]);} free(a); for(i=0;i<len;i++){free(b[i]);} free(b); for(i=0;i>=1){ if(b & 1){ i = (i*a)%m; } a = (a*a)%m; } return i;}/*素数最小原始根を見つける関数*/int primePrimitiveRoot(int p){ int i,j,size=0; int *list; list = malloc((p-1)*sizeof(int)); /*p-1素因数を見つけ、list格納する。*/ for(i=2,j=p-1;i*i<=j;i++){ if(j % i == 0){ list[size] = i; size++; do{ j /= i; }while(j%i==0); } } for(i=0;i<size;i++){ list[i] = (p-1)/list[i]; } for(i=2;i<=p-1;i++){ for(j=0;j<size;j++){ if(powerMod(i,list[j],p)==1){ goto next; } } break; next: ; } free(list); return i;}/*離散フーリエ変換関数*/void DFT(double **x, int n){ int i,j; double **c; c = malloc(n*sizeof(double*)); for(i=0;i<n;i++){ c[i] = malloc(sizeof(double)); c[i][0] = 0; c[i][1] = 0; } for(i=0;i<n;i++){ for(j=0;j<n;j++){ c[i][0] += x[j][0]*cos(2*M_PI*i*j/n) + x[j][1]*sin(2*M_PI*i*j/n); c[i][1] += -x[j][0]*sin(2*M_PI*i*j/n) + x[j][1]*cos(2*M_PI*i*j/n); } } for(i=0;i<n;i++){ x[i][0] = c[i][0]; x[i][1] = c[i][1]; } for(i=0;i<n;i++){free(c[i]);} free(c);}/*逆離フーリエ変換関数*/void IDFT(double **x, int n){ int i,j; double **c; c = malloc(n*sizeof(double*)); for(i=0;i<n;i++){ c[i] = malloc(sizeof(double)); c[i][0] = 0; c[i][1] = 0; } for(i=0;i<n;i++){ for(j=0;j<n;j++){ c[i][0] += x[j][0]*cos(2*M_PI*i*j/n) - x[j][1]*sin(2*M_PI*i*j/n); c[i][1] += x[j][0]*sin(2*M_PI*i*j/n) + x[j][1]*cos(2*M_PI*i*j/n); } } for(i=0;i<n;i++){ x[i][0] = c[i][0]/n; x[i][1] = c[i][1]/n; } for(i=0;i<n;i++){free(c[i]);} free(c);} 複素数データ表現するため、一列目を実数部、二列目を虚数部とした二次元配列用いている。 レーダーアルゴリズムではgの逆数生成する数列も必要であるため、フェルマーの小定理からgの逆数求めている。 畳み込み積分不変に保つゼロ埋めの手法として、aについて先頭要素とその次の要素の間にゼロ埋め、bについてはgの生成する数列n-1周期をもつことを自然に用いて元の数列巡回させている。ゼロ埋めの手法はこの方法以外にも考えられる。 畳込み積分計算通常の離散フーリエ変換用いているが、これを高速フーリエ変換ルーチン置き換えることができる。 原始根求めアルゴリズム原始根参照

※この「プログラムの例」の解説は、「レーダーのFFTアルゴリズム」の解説の一部です。
「プログラムの例」を含む「レーダーのFFTアルゴリズム」の記事については、「レーダーのFFTアルゴリズム」の概要を参照ください。


プログラムの例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/08 05:20 UTC 版)

高速フーリエ変換」の記事における「プログラムの例」の解説

以下は、高速フーリエ変換プログラムQ = 4場合Microsoft Visual Basic文法用いて書いた例である。 Const pi As Double = 3.14159265358979 '円周率Dim Ndeg As Long '4^degDim Pdeg As Long '4^(deg-i)Dim CR() As Double '入力実数部Dim CI() As Double '入力虚数部Dim FR() As Double '出力実数部Dim FI() As Double '出力虚数部deg=5 '任意に設定。5ならN=4^5=1024計算Ndeg=4^degReDim CR(Ndeg - 1) As Double '入力実数部ReDim CI(Ndeg - 1) As Double '入力虚数部ReDim FR(Ndeg - 1) As Double '出力実数部ReDim FI(Ndeg - 1) As Double '出力虚数部'ここで、変換される関数実部CR(0)からCR(Ndeg-1)に、虚部CI(0)からCI(Ndeg-1)に入力しておくこと'フーリエ変換For i = 1 To deg Pdeg = 4 ^ (deg - i) For j0 = 0 To 4 ^ (i - 1) - 1 For j1 = 0 To Pdeg - 1 j = j1 + j0 * Pdeg * 4 'バタフライ演算(Q=4) w1 = CR(j) + CR(j + Pdeg) + CR(j + 2 * Pdeg) + CR(j + 3 * Pdeg) w2 = CI(j) + CI(j + Pdeg) + CI(j + 2 * Pdeg) + CI(j + 3 * Pdeg) w3 = CR(j) + CI(j + Pdeg) - CR(j + 2 * Pdeg) - CI(j + 3 * Pdeg) w4 = CI(j) - CR(j + Pdeg) - CI(j + 2 * Pdeg) + CR(j + 3 * Pdeg) w5 = CR(j) - CR(j + Pdeg) + CR(j + 2 * Pdeg) - CR(j + 3 * Pdeg) w6 = CI(j) - CI(j + Pdeg) + CI(j + 2 * Pdeg) - CI(j + 3 * Pdeg) w7 = CR(j) - CI(j + Pdeg) - CR(j + 2 * Pdeg) + CI(j + 3 * Pdeg) w8 = CI(j) + CR(j + Pdeg) - CI(j + 2 * Pdeg) - CR(j + 3 * Pdeg) CR(j) = w1 CI(j) = w2 CR(j + Pdeg) = w3 CI(j + Pdeg) = w4 CR(j + 2 * Pdeg) = w5 CI(j + 2 * Pdeg) = w6 CR(j + 3 * Pdeg) = w7 CI(j + 3 * Pdeg) = w8 '回転因子 For k = 0 To 3 w1 = Cos(2 * pi * j * k / Pdeg / 4) w2 = -Sin(2 * pi * j * k / Pdeg / 4) w3 = CR(j + k * Pdeg) * w1 - CI(j + k * Pdeg) * w2 w4 = CR(j + k * Pdeg) * w2 + CI(j + k * Pdeg) * w1 CR(j + k * Pdeg) = w3 CI(j + k * Pdeg) = w4 Next k Next j1 Next j0Next i'ビット反転For i = 0 To Ndeg - 1 k = i k1 = 0 For j = 1 To deg k1 = k1 + (k - Int(k / 4) * 4) * 4 ^ (deg - j) k = Int(k / 4) Next j FR(i) = CR(k1) FI(i)=CI(k1)Next i この例では、最深部 (For kNext k の間の部分)の繰り返し回数が Ndeg log4 Ndeg となっている。

※この「プログラムの例」の解説は、「高速フーリエ変換」の解説の一部です。
「プログラムの例」を含む「高速フーリエ変換」の記事については、「高速フーリエ変換」の概要を参照ください。


プログラムの例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/26 16:14 UTC 版)

Mind (プログラミング言語)」の記事における「プログラムの例」の解説

外部リンク1のページより、プログラム例引用する午前?とは 時刻得て 時が 12より 小さいこと。メインとは 午前? ならば 「おはよう」を さもなければこんにちは」を つぎに 表示し 改行すること。 このように基本Forthである。数値以外のほぼ全て日本語文字日本語の記法を使う。たとえば、Forthでは ; である定義の終了が「。」である。以下、Forth異な特徴主なもの挙げる。まず、文字種の違いトークン認識積極的に使う。「12より」を数値12 であると認識する。「時刻得て」のうち識別子として有効なのは「時刻得」であり、平仮名基本的に無視することで自然な表現助けている(おそらく助詞活用語尾のような部分だが、単に字種基づいて判断しているだけであり、自然言語処理的な扱いにより助詞ないし活用語尾として認識しているわけではない)。なお一方単語の定義の「〜とは」のように、平仮名がキーワード的に重要な意味を持つ場合もある。 Forth同様に単語定義し、それを以降単語の定義で使用するといったスタイルをとる。すなわち、Mindプログラムは、Forth同様に単語の定義の集まりである。また、引数表面表れない他言語プログラマが最も驚くのはこの点かもしれない最初違和感があるが、慣れるとForth同様に非常に簡潔にプログラム書くことができる。 インデントなどのレイアウトには見やすさのため以上の意味はない。 4と 5を 加え 表示する。 同じ外部リンク1のページのある他プログラム例メイン部分引用するメインとは 接続処理し 送信処理すること。 このようにプログラムそのまま動作記述ドキュメントとして読める主張される

※この「プログラムの例」の解説は、「Mind (プログラミング言語)」の解説の一部です。
「プログラムの例」を含む「Mind (プログラミング言語)」の記事については、「Mind (プログラミング言語)」の概要を参照ください。


プログラムの例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/12/01 08:30 UTC 版)

別府八湯温泉泊覧会」の記事における「プログラムの例」の解説

湯遍路(ゆへんろ)さんと行く88箇所温泉巡り 別府温泉熟知している案内人88か所の温泉を巡る。 鉄輪地獄蒸し食堂 鉄輪名物地獄蒸し料理を味わう。 ファンゴエステ 温泉泥(ファンゴティカ)を使ったセラピー

※この「プログラムの例」の解説は、「別府八湯温泉泊覧会」の解説の一部です。
「プログラムの例」を含む「別府八湯温泉泊覧会」の記事については、「別府八湯温泉泊覧会」の概要を参照ください。


プログラムの例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/06/01 09:32 UTC 版)

P′′」の記事における「プログラムの例」の解説

ベームは、x > 0 を満たす整数xの前の数 (x-1) を計算する以下のプログラム提供している。 R ( R ) L ( r ′ ( L ( L ) ) r ′ L ) R r {\displaystyle R(R)L(r^{\prime }(L(L))r^{\prime }L)Rr} これを等価Brainfuckプログラム直接変換すると、 >[>]<[−[<[<]]−<]>+ このプログラムは bijective base-k 記法で表現されているある一つ整数想定している。 c 1 , c 2 … , c k {\textstyle c_{1},c_{2}\ldots ,c_{k}} は 1 , 2 , … , k {\textstyle 1,2,\ldots ,k} にそれぞれエンコードされる。そして、数字列の前後に ◻ {\textstyle \Box } がある(例えば、bijective base-2 の場合数字の8は ◻ c 1 c 1 c 2 ◻ {\textstyle \Box c_{1}c_{1}c_{2}\Box } とエンコードされる。なぜなら、bijective base-2 において8は112である)。計算最初最後に数字列の前にある ◻ {\textstyle \Box } の上ヘッド位置することになる。

※この「プログラムの例」の解説は、「P′′」の解説の一部です。
「プログラムの例」を含む「P′′」の記事については、「P′′」の概要を参照ください。


プログラムの例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/01/30 10:29 UTC 版)

ひまわり (プログラミング言語)」の記事における「プログラムの例」の解説

母艦 (メインフォーム) に「ひまわりようこそ」と表示されるプログラムひまわりようこそ」と、表示ダイアログに「ひまわり日本語プログラミングできます」と表示されるプログラムひまわり日本語プログラミングできます」と、言う。 母艦日付と時刻表示するプログラム 表示 (今日)表示 (今) 母艦閉じてプログラム終了するプログラム おわり。

※この「プログラムの例」の解説は、「ひまわり (プログラミング言語)」の解説の一部です。
「プログラムの例」を含む「ひまわり (プログラミング言語)」の記事については、「ひまわり (プログラミング言語)」の概要を参照ください。


プログラムの例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/15 03:51 UTC 版)

Message Passing Interface」の記事における「プログラムの例」の解説

以下は "Hello World" プログラムC言語MPI対応版として書いたのである。 この例では "hello" メッセージを各プロセッサ送信し受信したデータを少し改変して結果をメインプロセスに返し、それを画面表示する。 /* "Hello World" MPI テストプログラム */#include #include #include #define BUFSIZE 128int main(int argc, char *argv[]) { /* MPI 環境初期化する。これ以降、全プロセス使える */ MPI_Init(&argc, &argv); /* 全プロセス数を取得する */ int numprocs; MPI_Comm_size(MPI_COMM_WORLD, &numprocs); /* プロセスランク番号)を取得する */ int myid; MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Status stat; const int TAG = 0; char idstr[32]; char buff[BUFSIZE]; /* この時点で全プログラム同等に走っており、SPMDモデルの中でこれらを区別する場合には ランク見分ける。ただしランク0のプログラム特別な処理をしていることもある。... */ if (myid == 0) { printf("%d: We have %d processes\n", myid, numprocs); for (int i = 1; i < numprocs; i++) { sprintf(buff, "Hello %d! ", i); MPI_Send(buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD); } for (int i = 1; i < numprocs; i++) { MPI_Recv(buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD, &stat); printf("%d: %s\n", myid, buff); } } else { /* rank 0から受信: */ MPI_Recv(buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD, &stat); sprintf(idstr, "Process %d ", myid); strncat(buff, idstr, BUFSIZE - 1); strncat(buff, "reporting for duty", BUFSIZE - 1); /* rank 0に送信: */ MPI_Send(buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD); } /* MPI FinalizeMPIプログラム終了する。ここは弱い同期ポイント */ MPI_Finalize(); return 0;} 4 MPI プロセスプログラム実行する(mpiexec -n 4 ./a.out)と以下のような結果得られる: 0: We have 4 processes0: Hello 1! Process 1 reporting for duty0: Hello 2! Process 2 reporting for duty0: Hello 3! Process 3 reporting for duty

※この「プログラムの例」の解説は、「Message Passing Interface」の解説の一部です。
「プログラムの例」を含む「Message Passing Interface」の記事については、「Message Passing Interface」の概要を参照ください。

ウィキペディア小見出し辞書の「プログラムの例」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「プログラムの例」の関連用語

プログラムの例のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



プログラムの例のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのレーダーのFFTアルゴリズム (改訂履歴)、高速フーリエ変換 (改訂履歴)、Mind (プログラミング言語) (改訂履歴)、別府八湯温泉泊覧会 (改訂履歴)、P′′ (改訂履歴)、ひまわり (プログラミング言語) (改訂履歴)、Message Passing Interface (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS