このディレクトリの索引
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)改行...といったような表示で書き込む。 

'テキストデータ3つ(data.txt data2.txt data3.txt)を(それぞれ内容は違う)読み込む。それぞれに1次元の離散コサイン変換を行う。変換後の値を新たなテキストファイルに(data,data2,data3)改行(data,data2,data3)改行...といったような表示で書き込む。' :-
        'テキストデータ3つ(data.txt data2.txt data3.txt)を(それぞれ内容は違う)読み込む'(Lines1,Lines2,Lines3),
        テキストデータ3つを3つのならびに変換(Lines1,Lines2,Lines3,L1_1,L2_1,L3_1),
        それぞれに1次元の離散コサイン変換を行う(L1_1,L2_1,L3_1,L1_2,L2_2,L3_2),
        '変換後の値を新たなテキストファイルに(data,data2,data3)改行(data,data2,data3)改行...といったような表示で書き込む。'(L1_2,L2_2,L3_2).

テキストデータ3つを3つのならびに変換(L1,L2,L3) :-
        テキストデータを3つ取得(Lines1,Lines2,Lines3),
        要素ならびに変換(Lines1,Lines2,Lines3,L1,L2,L3).

テキストデータを3つ取得(Lines1,Lines2,Lines3) :-
        get_lines('data.txt',Lines1),
        get_lines('data2.txt',Lines2),
        get_lines('data3.txt',Lines3).

それぞれに1次元の離散コサイン変換を行う(L1_1,L2_1,L3_1,L1_2,L2_2,L3_2) :-
        '1次元の離散コサイン変換'(L1_1,L1_2),
        '1次元の離散コサイン変換'(L2_1,L2_2),
        '1次元の離散コサイン変換'(L3_1,L3_2).

'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(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).
'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).

'変換後の値を新たなテキストファイルに(data,data2,data3)改行(data,data2,data3)改行...といったような表示で書き込む。'(L1,L2,L3) :-
        open('data4.txt',write,Outstream),
        '変換後の値を新たなテキストファイルに(data,data2,data3)改行(data,data2,data3)改行...といったような表示で書き込む。'(Outstream,L1,L2,L3),
        close(Outstream).

'変換後の値を新たなテキストファイルに(data,data2,data3)改行(data,data2,data3)改行...といったような表示で書き込む。'(_,[],[],[]).
'変換後の値を新たなテキストファイルに(data,data2,data3)改行(data,data2,data3)改行...といったような表示で書き込む。'(Outstream,[A|R1],[B|R2],[C|R3]) :-
        writef(Outstream,'%t,%t,%t\n',[A,B,C]),
        '変換後の値を新たなテキストファイルに(data,data2,data3)改行(data,data2,data3)改行...といったような表示で書き込む。'(Outstream,R1,R2,R3).