このディレクトリの索引 http://hibari.2ch.net/test/read.cgi/tech/1322562648/111 # [1] 授業単元:C言語プログラミング # [2] 問題文(含コード&リンク):テキストファイルを読み込み1次元の離散コサイン変換を行って、その結果を新たなテキストファイルに書き込むプログラムを作れ。 # # [5] その他の制限: 例 10,15,20,80,120,160,210,10,20,100...と続く # テキストデータ3つ(data.txt data2.txt data3.txt)を(それぞれ内容は違う)読み込む。 # それぞれに1次元の離散コサイン変換を行う。 # 変換後の値を新たなテキストファイルに(data,data2,data3)改行(data,data2,data3)改行...といったような表示で書き込む。 'テキストファイルを読み込み1次元の離散コサイン変換を行って、その結果を新たなテキストファイルに書き込む'(_テキストファイル名,_出力ファイル名) :- get_lines(_テキストファイル名,Lines), データ要素のならびとする(Lines,_要素ならび), '1次元の離散コサイン変換'(L1,L2), '新たなテキストファイルに書き込む'(_出力ファイル名,L2). データ要素のならびとする(Lines,_要素ならび) :- concat_atom(Lines,',',S), split(S,[',',' '],_要素ならび). '1次元の離散コサイン変換'(L1,L2) :- append([_第一要素],L,[_最終要素],L1), length(L1,N), '1次元の離散コサイン変換'(L,L,N,-1,_第一要素,_最終要素,L2). '1次元の離散コサイン変換'([],_,_,_,_第一要素,_最終要素,[]). '1次元の離散コサイン変換'([N|R1],L,N,-1,_第一要素,_最終要素,[Xk|R2]) :- findsum(U,( append(_,[B|_],L), length([_|L0],K), U is _最終要素 * cos(pi/(N-1) * N * K)), Sum), Xk is _第一要素/2 + Sum + ((-1) / 2) * (_最終要素-1)), '1次元の離散コサイン変換'(R1,L,N,1,_第一要素,_最終要素,R2). '1次元の離散コサイン変換'([N|R1],L,N,1,_第一要素,_最終要素,[Xk|R2]) :- findsum(U,( append(L0,[B|_],L), length([_|L0],K), U is _最終要素 * cos((pi / (N-1)) * N * K), Sum), Xk is _第一要素/2 + Sum + ((1 / 2) * (_最終要素-1)), '1次元の離散コサイン変換'(R1,L,N,-1,_第一要素,_最終要素,R2). '新たなテキストファイルに書き込む'(_テキストファイル名,L) :- open(_テキストファイル名,write,Outstream), append(_,[A|R],L), writef(Outstream,'%t,',[A]), R = [B], writef(Outstream,'%t\n',[B]), close(Outstream).