• 締切済み

このプログラムの内容を知りたいのですが…

/*ファイルの書き込み*/ void kyoku_write(char *file_name){ int i=0, j; FILE *write; FILE *point; write = fopen(file_name, "w"); for(j = 1; j < ONPU; j++) { fprintf(write, "%d,",kyoku[i][j]); } point = fopen("メロディ点数.txt","a"); switch(m_key){ case 1: fprintf(point,"【%d】C ***%d\n",scale,kyoku[i][0]);break; case 2: fprintf(point,"【%d】CM7 ***%d\n",scale,kyoku[i][0]);break; } for(j = 2; j < ONPU; j++) { if(kyoku[i][j] == 14 || kyoku[i][j] == 15 || kyoku[i][j] == 16) fprintf(point,"◆"); else if(kyoku[i][j] == 0) fprintf(point,"○"); else fprintf(point, "%d,",kyoku[i][j]); } fprintf(point,"\n///////////////////////////////////////////////////////////////////////////////\n"); fputs("\n", write); fclose(write); fclose(point); } このプログラムが理解できません。わかる方がいたら教えてください。お願いします。

みんなの回答

  • keikan
  • ベストアンサー率42% (75/176)
回答No.4

#3です。訂正^^;; /*この関数に渡されたファイル名のファイルに"\n"を上書きする。(どこかで処理の状況を監視しているのだろうか)*/ fputs("\n", write); のところ、最初の方でkyoku[0][j]を全部書き込んでましたね^^;; でもって、最後に改行してるみたいです。

  • keikan
  • ベストアンサー率42% (75/176)
回答No.3

/*ファイルの書き込み*/ void kyoku_write(char *file_name){ int i=0, j; FILE *write; FILE *point; /* file_nameというファイルに、 定義してあるグローバルなONPUという数の、 きっとどこかで定義してあるグローバルなkyoku[0][j]の値を書き込む */ write = fopen(file_name, "w"); for(j = 1; j < ONPU; j++) { fprintf(write, "%d,",kyoku[i][j]); } /*メロディ点数.txtというファイルを追加モードで開く*/ point = fopen("メロディ点数.txt","a"); /*きっとどこかで定義してあるグローバルなm_keyの値が1なら きっとどこかで定義してあるグローバルなscaleという値と"C ***"と、kyoku[0][0]の値をメロディ点数.txt書き込む*/ /*きっとどこかで定義してあるグローバルなm_keyの値が2なら きっとどこかで定義してあるグローバルなscaleという値と"CM7 ***"と、kyoku[0][0]のメロディ点数.txt値を書き込む*/ switch(m_key){ case 1: fprintf(point,"【%d】C ***%d\n",scale,kyoku[i][0]);break; case 2: fprintf(point,"【%d】CM7 ***%d\n",scale,kyoku[i][0]);break; } /*jが2からONPUまでの値において きっとどこかで定義してあるグローバルなkyoku[0][j]が14,15,16ならばメロディ点数.txtに"◆"を書き込む きっとどこかで定義してあるグローバルなkyoku[0][j]が0ならばメロディ点数.txtに"○"を書き込む きっとどこかで定義してあるグローバルなkyoku[0][j]がそれ以外ならばきっとどこかで定義してあるグローバルなkyoku[0][j]の値をメロディ点数.txt書き込む */ for(j = 2; j < ONPU; j++) { if(kyoku[i][j] == 14 || kyoku[i][j] == 15 || kyoku[i][j] == 16) fprintf(point,"◆"); else if(kyoku[i][j] == 0) fprintf(point,"○"); else fprintf(point, "%d,",kyoku[i][j]); } /*たぶんデータの区切りとしての文字列をメロディ点数.txt書き込む*/ fprintf(point,"\n///////////////////////////////////////////////////////////////////////////////\n"); /*この関数に渡されたファイル名のファイルに"\n"を上書きする。(どこかで処理の状況を監視しているのだろうか)*/ fputs("\n", write); fclose(write); fclose(point); } /*結局のところ、きっとどこかで定義してあるグローバルなkyoku[0][j]の内容に応じて メロディ点数.txtに文字及びkyoku[0][j]の内容を書き込んでいる で、書き込みが終わったことを渡されたファイル名のファイルに記している */ >このプログラムが理解できません。わかる方がいたら教えてください。お願いします。 参考程度に元のプログラムを読んでね。 ちなみにどこがどうわからないのか、明確にした方がよい。関数やら、ステートメントなどの使い方はネットでも調べられるし本もいっぱい出てる。 アルゴリズムも基本的なところはほとんど調べられるので、まず調べてみて何がどうわからないか明確にした方が、早くて的確なアドバイスがいただけるよ^^

commotion
質問者

お礼

遅くなりましたが、大変参考になりました。自分でも調べてがんばりたいと思います。ありがとうございました。

回答No.2

> ソース全体でも数百行はあるんですが載せても大丈夫ですか? それは迷惑というもの。載せたって誰も読んではくれないでしょうし、そもそも何のために載せるんです? 理解しなければいけないのは'あなた'なのに。

  • ganzou
  • ベストアンサー率29% (25/85)
回答No.1

これでわかることは、 file_nameで指定されたファイルに kyoku[0][1...ONPU] の中のデータが書き込まれる。 メロディ点数.txtというファイルの中に 【1】C ***1 ○12,14,◆11, /////////////////////////////// のようなデータが追加される。 この二つしかわかりません。 これは一部分なので、ソースの全体と、これがどこから出てきたものなのか、何をするためのものなのか、などがないと正確に答えることはできません。

commotion
質問者

補足

遺伝的アルゴリズムを使って自動作曲システムを作成しようと思っているんですが、C++初心者なのでどのプログラムを載せたらいいかわかりません。ソース全体でも数百行はあるんですが載せても大丈夫ですか?