このディレクトリの索引

% 以下のサイトは # [1] 授業単元: # [2] 問題文 # 今テキストファイルAが1つとBが10個あるとする。 # Aには # haru # natsu # aki # fuyu # とかかれ # Bにはそれぞれのテキストに以下のような文字列がかかれている # wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo # iouaiojoiajwioejio121j3oi1j2iojlajia # これらをまとめ # テキストCに # aki[tab]wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo[改行] # natsu[tab]iouaiojoiajwioejio121j3oi1j2iojlajia[改行] # になるようなプログラムをかけ # ただし。Bのそれぞれのテキストは非常に長くても大丈夫にせよ。 # [3] 環境 [3.1] OS:linux #  [3.2] gcc #  [3.3 C # [4] 期限: 5/23 '今テキストファイルAが1つとBが10個あるとする。 Aには haru natsu aki fuyu とかかれ Bにはそれぞれのテキストに以下のような文字列がかかれている wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo iouaiojoiajwioejio121j3oi1j2iojlajia これらをまとめ テキストCに aki[tab]wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo[改行] natsu[tab]iouaiojoiajwioejio121j3oi1j2iojlajia[改行] になるようなプログラムをかけ ただし。Bのそれぞれのテキストは非常に長くても大丈夫にせよ。' :- テキストファイルAとならびBに現れるファイルを結合する(_A,_ならびB). テキストファイルAとならびBに現れるファイルを結合する(_A,_ならびB) :- get_lines(_A,Lines), forall(( nth1(_nth1,Lines,Line), atom_chars(Line,Chars1), テキストファイルAとならびBに現れるファイルを結合する(Chars1,_nth1,_ならびB)), true). テキストファイルAとならびBに現れるファイルを結合する(Chars1,_nth1,_ならびB) :- nth1(_nth1,_ならびB,File), get_chars(File,Chars2), append(Chars1,['\t'|Chars2],Chars3), atom_chars(_表示文字列,Chars3), writef('%t\n',[_表示文字列]). % 以下のサイトは # [1] 授業単元: # [2] 問題文 # 今テキストファイルAが1つとBが10個あるとする。 # Aには # haru # natsu # aki # fuyu # とかかれ # Bにはそれぞれのテキストに以下のような文字列がかかれている # wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo # iouaiojoiajwioejio121j3oi1j2iojlajia # これらをまとめ # テキストCに # aki[tab]wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo[改行] # natsu[tab]iouaiojoiajwioejio121j3oi1j2iojlajia[改行] # になるようなプログラムをかけ # ただし。Bのそれぞれのテキストは非常に長くても大丈夫にせよ。 # [3] 環境 [3.1] OS:linux #  [3.2] gcc #  [3.3 C # [4] 期限: 5/23 '今テキストファイルAが1つとBが10個あるとする。 Aには haru natsu aki fuyu とかかれ Bにはそれぞれのテキストに以下のような文字列がかかれている wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo iouaiojoiajwioejio121j3oi1j2iojlajia これらをまとめ テキストCに aki[tab]wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo[改行] natsu[tab]iouaiojoiajwioejio121j3oi1j2iojlajia[改行] になるようなプログラムをかけ ただし。Bのそれぞれのテキストは非常に長くても大丈夫にせよ。' :- テキストファイルAとならびBに現れるファイルを結合する(_A,_ならびB). テキストファイルAとならびBに現れるファイルを結合する(_A,_ならびB) :- open(_A,read,Instream), テキストファイルAの一行とならびBに現れる一つのファイルを順番に結合する(Instream,_ならびB), close(Instream). テキストファイルAの一行とならびBに現れる一つのファイルを順番に結合する(_,[]) :- !. テキストファイルAの一行とならびBに現れる一つのファイルを順番に結合する(Instream,[File|R]) :- get_line(Instream,Line), get_chars(File,Chars), 表示する(Line,Chars), テキストファイルAの一行とならびBに現れる一つのファイルを順番に結合する(Instream,R). 表示する(Line,Chars) :- atomic_list_concat([Line,'\t'|Chars],_表示文字列]), writef('%t\n',[_表示文字列]). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1153585095/640 # 【 課題 】 # 指定したフォルダの中身をフォルダの構成などを含めて完全にバックアップする # ソフトを作成すること。 # 尚、バックアップファイルには以下の機能を持つようにすること。 # ・ 対象ファイルや除外ファイルを指定できるような # 仕組みを持つこと。 # ・ バックアップ経過のログを作成すること。 # ログにはバックアップ処理の実行時間を出力すること。 # また、既にあるフォルダが指定された場合の対処についてもそれぞれ考慮して # 機能の実装を行うこと。 # 作業に余裕のある人は以下の機能を追加すること。 # ・バックアップしたファイルを圧縮する仕組みの追加。 # ・プログラムが常駐する仕組みの追加。 t111(Dir,SaveDir) :- concat_atom(['cp -R ',Dir,' ',SaveDir],S), shs(S,_). /* concat_atom(['ls -l ',Dir],S), shs(S,L), member(A,L), not(sub_atom(A,1,1,_,d)), concat_atom([Dir,/,A],FI), concat_atom([SaveDir,/,A],FO), copy(FI,FO), fail; true. */ shs(S,L) :- system(S,user_input,Input),get_lines(Input,L),close(Input). get_lines(File,Lines) :- get_chars(File,L),chars_lines(L,Lines),!. get_chars(Input,end_of_file,[]) :- !. get_chars(Input,X,[X|R]) :- get_char(Input,Y),get_chars(Input,Y,R) . get_chars(Input,L) :- get_char(Input,X),get_chars(Input,X,L),!. chars_lines([],[],[]) :- !. chars_lines(['\r'],[],[]) :- !. chars_lines(['\r',A|R],[],[A|R]) :- \+(A = '\n'),!. chars_lines(['\r','\n'|R],[],R) :- !. chars_lines(['\n'|R],[],R) :- !. chars_lines([A|R1],[A|R2],Z) :- chars_lines(R1,R2,Z). chars_lines([],[]) :- !. chars_lines(L,[A|R2]) :- chars_lines(L,U,R),concat_atom(U,A),chars_lines(R,R2). concat_atom([],'') :- !. concat_atom([A|R],S) :- concat_atom(R,S2),atom_concat(A,S2,S). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1244449887/481 # [1] 授業単元:ソフトウェア演習C # [2] 問題文: # 文書ないのすべての単語とその単語の頻度をメンバとして持つ構造体を定義し、 # この構造体へのポインタをノードの値として持つ二分木のノードを定義せよ # # 次に、任意のノードはその左の部分木にはそのノードの単語より辞書順で # 小さい単語のみがあり、その右の部分木にはより大きい単語のみがあるように # 保持される。 # 新たに単語がすでに木にあるかどうかを探すには、ルート(根元)から出発して # そのノードに格納されている単語と新しい単語を比較する。 # 二つが一致したら、それで良い。 # 新しい単語が木の単語より小さいときは、探索は左の子供に対して続けられ、 # そうでなければ右の子供が調べられる。 # 求める方向に子供がないときは、新しい単語は木の中にはないと言うことであり、 # また実際にはその子供のないところがそれを置く場所である。 # このプロセスは再帰的である必要があり、単語の挿入を行うadd_word()関数を # 定義せよ。 # この関数は再帰的に呼ばれて、左または右の部分木に振り分けられる。 # 単語は木の中の単語と一致する(その場合カウント(頻度)がインクリメントされる)か、 # あるいはノードを作成し、木に加えなければならないことを示すヌル・ポインタと # 出会う。 # 新たにノードが生成されると、この関数ではそのノードへのポインタが返され、 # 親ノードに埋め込まれる。 # この関数を利用し、以下のテキストをコマンド実行時の引数として与えられた # ファイルを入力して二分探索木を生成し、単語と頻度のリストを表示する # プログラムを作成せよ。 # # 文章: ファイル名:test.txt # University was founded in April 1998 at Iwate, # which is situated in the northeastern part of Japan. # University consists of four faculties Software and Information Science, # Nursing, Social Welfare, # and policy Studies, and additionally other educational supporut centers. 二分木に情報と頻度を保持する :- get_chars('test.txt',Chars), chars_split(Chars,[' ',',','.'],WordList), 木作成(WordList). 情報と頻度を保持した二分木の昇順表示 :- 二分木から値と頻度を取り出す(1,_頻度付きの値ならび), member([_語,_頻度],_頻度付きの値ならび), write_formatted('語彙=%t,頻度=%t\n',[_語,_頻度]), fail; true. 木作成(_ならび) :- abolish(節/5), 節作成(_ならび,1,1,_). 木作成([],_,_,_). 木作成([_値|R],_節,_開始節番号,_次の節番号) :- to_lower(_値,_小文字化した値), 節作成(_小文字化した値,_節,_開始節番号,_受取節番号), 木作成(R,_節,_受取節番号,_次の節番号). 節作成(_値,_節,_受取節番号,_次の節番号) :- not(節(_節,_,_,_,_)), _左 is _受取節番号+1, _右 is _受取節番号+2, _次の節番号 is _受取節番号+3, assertz(節(_節,_左,_右,_値,1)),!. 節作成(_値,_節,_受取節番号,_次の節番号) :- 節(_節,_左,_右,_値2,_), _値 @< _値2, 節作成(_値,_左,_受取節番号,_次の節番号). 節作成(_値,_節,_受取節番号,_次の節番号) :- 節(_節,_左,_右,_値2,_), _値 @> _値2 , 節作成(_値,_右,_受取節番号,_次の節番号). 節作成(_値,_節,_受取節番号,_次の節番号) :- 節(_節,_左,_右,_値2,_頻度), _値 = _値2 , _頻度2 is _頻度 + 1, retract(節(_節,_左,_右,_値2,_頻度)), assertz(節(_節,_左,_右,_値2,_頻度2)). 二分木から値と頻度を取り出す(_節,_頻度付きの値ならび) :- findall([_値,頻度],二分木から値と頻度を取り出す(_節,_,_値,_,_頻度),_頻度付きの値ならび). 二分木から値と頻度を取り出す(_節,_値1,_値,_頻度1,_頻度) :- 節(_節,_左,_,_値2,_,_頻度2), 二分木から値と頻度を取り出す(_左,_値2,_値,_頻度2,_頻度). 二分木から値と頻度を取り出す(_節,_値1,_値,_頻度1,_頻度) :- 節(_節,_,_右,_値2,_頻度2), 二分木から値と頻度を取り出す(_右,_,_値,_,_頻度). 二分木から値と頻度を取り出す(_節,_値1,_値,_頻度1,_頻度) :- not(var(_値1)), not(var(_頻度1)), _値1=_値, _頻度1=_頻度. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% get_chars(File,Chars) :- open(File,read,Input), findall(X,(repeat,get_char(Input,X),(X=end_of_file,!,fail;true)),Chars), close(Input). concat_atom([A],Sep,[A]) :- !. concat_atom([A|R],Sep,X) :- concat_atom(R,Sep,Y), atom_concat(A,Sep,Y1), atom_concat(Y1,Y,X). chars_split(L,SeparatesL,WordsList) :- split_1(L,SeparatesL,WordsList),!. split_1([],SeparatersL,[]). split_1(L1,SeparatersL,[A|R]) :- not(L1=[]), split_2(L1,SeparatersL,L2,R2), not(L2=[]), atom_chars(A,L2), split_1(R2,SeparatersL,R). split_1(L1,SeparatersL,X) :- not(L1=[]), split_2(L1,SeparatersL,L2,R2), L2=[], split_1(R2,SeparatersL,X). split_2([],_,[],[]). split_2(L1,SeparatersL,[],R) :- member(L2,SeparatersL), append(L2,R,L1). split_2([A|R1],SeparatersL,[A|R2],R) :- not((member(L2,SeparatersL),append(L2,_,[A|R1]))), split_2(R1,SeparatersL,R2,R). 区切り語ならびの変形(_区切り語ならび,_降順の区切り文字ならびのならび) :- sort(_区切り語ならび,_昇順の区切り語ならび), reverse(_昇順の区切り語ならび,_降順の区切り語ならび), atomList2charsList(_降順の区切り語ならび,_降順の区切り文字ならびのならび). atomList2charsList([],[]) :- !. atomList2charsList([A|R1],[L|R2]) :- atom_chars(A,L), atomList2charsList(R1,R2). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1244449887/851 # あいうえお # /*かきくけこ*/ # さしす/*せそ # なにぬ*/ねの # # というファイル(test.txt)から文字数、改行数、コメント文字数をカウントし、出力するプログラムです。 # お願いいたします。 t274(_文字数,_改行数,_コメント文字数) :- get_chars('test.txt',Chars), length(Chars,_文字数), 改行数を数える(Chars,_改行数), コメント文字数を数える(Chars,_コメント文字数). 改行数を数える(Chars,_改行数) :- findall(_,append(_,['\n'|_],Chars),L), length(L,_改行数). コメント文字数を数える(Chars,_コメント文字数) :- append(_,['/','*'|L2],Chars), append(_コメント文字候補,['*','/'|_],L2), not(append(_,['/','*'|_],_コメント文字候補)), 改行を取り除く(_コメント文字候補,_改行を取り除いたコメント文字候補), length(_改行を取り除いたコメント文字候補,_コメント文字数). 改行を取り除く([],[]). 改行を取り除く(['\n'|R1],R2) :- 改行を取り除く(R1,R2),!. 改行を取り除く([A|R1],[A|R2]) :- not(A='\n'), 改行を取り除く(R1,R2). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1245853701/ # [1] 授業単元:C言語実習 # [2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin /joyful/img/9658.txt # {5,21,4,14,12}, # {25,20,15,3,7}, # {24,11,6,1,13}, # {16,2,17,19,8}, # {23,18,22,9,10} # # の横の各行を小さい順に並び替えた後、縦の各列を小さい順に並び替え(上が小さくな るように) # 結果を出力 # # 結果は # # 5 21 4 14 12 # 25 20 15 3 7 # 24 11 6 1 13 # 16 2 17 19 8 # 23 18 22 9 10 # # のような形で出力 '横の各行を小さい順に並び替えた後、縦の各列を小さい順に並び替えて出力する'(_ファイル) :- 行列に入力する(_ファイル,_行列1), '横の各行を小さい順に並び替えた後、縦の各列を小さい順に並び替えてW得点データをバブルソートを用いて国語の得点の大きい順に並び替えよ出力する'(_行列1,_行列2), 出力する(_行列2),!. '横の各行を小さい順に並び替えた後、縦の各列を小さい順に並び替えて出力する'(_行列1,_行列2) :- 各行を整列する(_行列1,_行列3), 縦の各列を整列する(_行列3,_行列2). 行列に入力する(_ファイル,_行列) :- get_split_lines(_ファイル,['{',',','}'],_行列). 各行を整列する([],[]) :- !. 各行を整列する([_行|R1],[_整列された行|R2]) :- quicksort(_行,_整列された行), 各行を整列する(R1,R2). 縦の各列を整列する(_行列1,_行列2) :- 転置(_行列2,_行列3), 各行を整列する(_行列3,_行列4), 転置(_行列4,_行列2). 出力する(_行列2) :- append(L0,[L|R],_行列2), concat_atom(L,' ',S), writef('%t\n',[S]), R = []. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% get_split_lines(File,Sep,Lines) :- get_lines(File,Lines1), findall(Line,(member(A,Lines1) , split(A,Sep,Line)),Lines) . get_lines(File,Lines) :- get_chars(File,L), chars_lines(L,Lines),!. get_lines(Lines) :- findall(Line,( repeat , get_line(Line) , (Line = end_of_file , (!) , fail ; true)), Lines). get_chars(File,L) :- \+(is_stream(_,File,_)), exists(File,read), open(File,read,Input), get_char(Input,X), get_chars(Input,X,L), close(Input),!. get_chars(Input,L) :- is_stream(_,Input,_), get_char(Input,X), get_chars(Input,X,L),!. get_line(Instream,X) :- get_char(Instream,C), get_line_3(Instream,C,Chars), atom_chars(X,Chars),!. get_line(X) :- get_char(C), get_line_1(C,Chars), atom_chars(X,Chars). get_line_1('\n',[]) :- !. get_line_1(end_of_file,[]) :- !. get_line_1(C,[C|R]) :- get_char(C2), get_line_1(C2,R). get_line_3(_,'連続','\n',[]) :- !. get_line_3(Instream,_診断,'\r',X) :- get_char(Instream,C2), get_line_3_2(Instream,_診断,C2,X),!. get_line_3(Instream,'終了',end_of_file,[]) :- !. get_line_3(Instream,_診断,C,[C|R]) :- get_char(Instream,C2), get_line_3(Instream,_診断,C2,R). get_line_3(_,'\n',[]) :- !. get_line_3(Instream,end_of_file,[]) :- !. get_line_3(Instream,C,[C|R]) :- get_char(Instream,C2), get_line_3(Instream,C2,R). get_chars(L) :- findall(U,( repeat , get_char(U) , (U = end_of_file , (!) , fail ; true)), L). get_line(Instream,_診断,X) :- get_char(Instream,C), get_line_3(Instream,_診断,C,Chars), atom_chars(X,Chars),!. get_line(Instream,X) :- get_char(Instream,C), get_line_3(Instream,C,Chars), atom_chars(X,Chars),!. get_line(X) :- get_char(C), get_line_1(C,Chars), atom_chars(X,Chars). get_line_1('\n',[]) :- !. get_line_1(end_of_file,[]) :- !. get_line_1(C,[C|R]) :- get_char(C2), get_line_1(C2,R). get_line_3(_,'連続','\n',[]) :- !. get_line_3(Instream,_診断,'\r',X) :- get_char(Instream,C2), get_line_3_2(Instream,_診断,C2,X),!. get_line_3(Instream,'終了',end_of_file,[]) :- !. get_line_3(Instream,_診断,C,[C|R]) :- get_char(Instream,C2), get_line_3(Instream,_診断,C2,R). get_line_3(_,'\n',[]) :- !. get_line_3(Instream,end_of_file,[]) :- !. get_line_3(Instream,C,[C|R]) :- get_char(Instream,C2), get_line_3(Instream,C2,R). get_line_3_2(Instream,'連続','\n',[]) :- !. get_line_3_2(Instream,'連続',C,['\r'|R]) :- \+(C == '\n'), get_line_3(Instream,_診断,C,R),!. split(_文字列,_区切り符号ならび,X) :- sPlit(_文字列,_区切り符号ならび,Y), findall(U,(member(U,Y) , not U = ''),L), L = X,!. sPlit(_文字列,_区切り符号ならび,X) :- atom_chars(_文字列,L), split_00(L,_区切り符号ならび,Y), findall(U,(member(U,Y) , \+(member(U,_区切り符号ならび))),Z), Z = X,!. split_00(_文字ならび,_区切り符号ならび,X) :- findall([B,A],( member(A,_区切り符号ならび) , atom_chars(A,B)), _区切り符号ならびの二), split_0(_文字ならび,_区切り符号ならびの二,X). split_0(_文字ならび,_区切り符号ならび,['',_区切り符号,'']) :- member([_区切り文字ならび,_区切り符号],_区切り符号ならび), _文字ならび = _区切り文字ならび,!. split_0(_文字ならび,_区切り符号ならび,['',_区切り符号|R2]) :- member([_区切り文字ならび,_区切り符号],_区切り符号ならび), append(_区切り文字ならび,R,_文字ならび), split_1(R,_区切り符号ならび,R2),!. split_0(L,_区切り符号ならび,X) :- split_1(L,_区切り符号ならび,X). split_1([],_,[]) :- !. split_1(_文字ならび,_区切り符号ならび,['',_区切り符号,'']) :- member([_区切り文字ならび,_区切り符号],_区切り符号ならび), _文字ならび = _区切り文字ならび,!. split_1(_文字ならび,_区切り符号ならび,['',_区切り符号_1,C,_区切り符号_2|X]) :- member([_区切り文字ならび,_区切り符号_1],_区切り符号ならび), append(_区切り文字ならび,R,_文字ならび), split_2(R,R2,_区切り符号_2,_区切り符号ならび,B), split_5(B,C), split_0(R2,_区切り符号ならび,X),!. split_1(_文字ならび,_区切り符号ならび,[C|X]) :- split_2(_文字ならび,R2,_区切り符号,_区切り符号ならび,B), _区切り符号 = '', split_5(B,C), split_0(R2,_区切り符号ならび,X),!. split_1(_文字ならび,_区切り符号ならび,[C,_区切り符号|X]) :- split_2(_文字ならび,R2,_区切り符号,_区切り符号ならび,B), \+(_区切り符号 = ''), split_5(B,C), split_0(R2,_区切り符号ならび,X),!. split_2([],[],'',_,[]) :-!. split_2(_文字ならび,R,_区切り符号,_区切り符号ならび,[]) :- member([_区切り文字ならび,_区切り符号],_区切り符号ならび), append(_区切り文字ならび,R,_文字ならび),!. split_2([''''|R],R2,_区切り符号,_区切り符号ならび,X) :- split_3([''''|R],R2,_区切り符号,_区切り符号ならび,X),!. split_2(['"'|R],R2,_区切り符号,_区切り符号ならび,X) :- split_32(['"'|R],R2,_区切り符号,_区切り符号ならび,X),!. split_2([_文字|R],R2,_区切り符号,_区切り符号ならび,[_文字|X]) :- split_2(R,R2,_区切り符号,_区切り符号ならび,X),!. split_5([],'') :- !. split_5(B,C) :- numeric_list(B,Nl), number(C,Nl),!. split_5(B,C) :- concat_atom(B,C),!. split_32(['"','"'|R],R2,_区切り符号,_区切り符号ならび,[''''|X]) :- split_42(R,R2,_区切り符号,_区切り符号ならび,X),!. split_32([_|R],R2,_区切り符号,_区切り符号ならび,X) :- split_42(R,R2,_区切り符号,_区切り符号ならび,X),!. split_42(['"','"'|R],R2,_区切り符号,_区切り符号ならび,['"'|X]) :- split_42(R,R2,_区切り符号,_区切り符号ならび,X),!. split_42(['"'|R],R2,_区切り符号,_区切り符号ならび,X) :- split_2(R,R2,_区切り符号,_区切り符号ならび,X),!. split_42([],[],'',_,[]) :- !. split_42([_文字|R],R2,_区切り符号ならび,[_文字|X]) :- split_42(R,R2,_区切り符号,_区切り符号ならび,X),!. number(A,B) :- number_codes(A,B). numeric_list([],[]) :-!. numeric_list([A|R],[B|R1]) :- digit(A), char_code(A,B), numeric_list(R,R1),!. numeric_list(['.'|R],[46|R1]) :- numeric_list(R,R1),!. numeric_list([-|R],[45|R1]) :- numeric_list(R,R1),!. 転置([[]|_],[]) :- !. 転置(L,[L1|R2]) :- 転置(L,L2,L1), 転置(L2,R2). 転置([],[],[]) :- !. 転置([[A|R1]|R2],[R1|R3],[A|R4]) :- 転置(R2,R3,R4). % *** user: quicksort / 2 *** quicksort([X|Xs],Ys) :- partition(Xs,X,Littles,Bigs), quicksort(Littles,Ls), quicksort(Bigs,Bs), append(Ls,[X|Bs],Ys). quicksort([],[]). partition([X|Xs],Y,[X|Ls],Bs) :- X @=< Y, partition(Xs,Y,Ls,Bs). partition([X|Xs],Y,Ls,[X|Bs]) :- X @> Y, partition(Xs,Y,Ls,Bs). partition([],Y,[],[]). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1245853701/559 # [1] 授業単元:アルゴリズム # [2] 問題文(含コード&リンク):url.txtに書き込まれている"ttp://〜をhttp://〜に書き換えresult.txtに出力せよ t352 :- get_chars('url.txt',Chars), t352(Chars,Chars2), put_chars('result.txt',Chars2). t352([],[]) :- !. t352([h,t,t,p,:,/,/|R1],[h,t,t,p,:,/,/|R2]) :- t352(R1,R2),!. t352([t,t,p,:,/,/|R1],[h,t,t,p,:,/,/|R2]) :- t352(R1,R2),!. t352([A|R1],[A|R2]) :- t352(R1,R2). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1245853701/424 # http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9644.txtにある # 50コのデータを利用して # 最大値と最小値を取り出すプログラムを以下の1,2の関数を用いて2つ作れ # 1 return文を用いたケース # 2 グローバル変数を用いたケース # http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9644.txtの # ポインタは使用不可です #ファイル名はseiseki.txtでお願いします # 70 56 66 45 88 # 66 85 68 55 73 # 55 65 53 67 55 # 85 72 76 58 65 # 92 70 45 73 55 # 56 57 52 62 82 # 72 62 33 85 95 # 46 95 48 72 34 # 83 42 88 92 56 # 68 65 91 82 66 整数要素ファイルの最小値・最大値(_ファイル,_最小値,_最大値) :- get_chars(_ファイル,Chars), concat_atom(Chars,Atom), split(Atom,['\n',' '],[A|L]), ならびの中の最小値・最大値(L,A,A,_最小値,_最大値). ならびの中の最小値・最大値([],X,Y,X,Y) :- !. ならびの中の最小値・最大値([A|R],Min,Max,_最小値,_最大値) :- A < Min, ならびの中の最小値・最大値(R,A,Max,_最小値,_最大値). ならびの中の最小値・最大値([A|R],Min,Max,_最小値,_最大値) :- A > Max, ならびの中の最小値・最大値(R,Min,A,_最小値,_最大値). ならびの中の最小値・最大値([_|R],Min,Max,_最小値,_最大値) :- ならびの中の最小値・最大値(R,Min,Max,_最小値,_最大値). % 以下のサイトは % database_domain(postgresql,mydomain,mydatabase). % database_domain(mysql,mydomain,mydatabase). 'Postgresqlコマンド読み出し'(SQL,X) :- database_domain(postgresql,Domain,Database), psql_macro(SQL,SQL_2), concat(['psql -h ',Domain,' ',Database,' -q -t -c ','"',SQL_2,'"'],S) shs(S,Y), findall(U,(member(V,Y) , not V = '' , psql_get_field(V,U)),X), ! . 'mysqlコマンド呼び出し'(SQL,X) :- database_domain(mysql,Domain,Database), psql_macro(SQL,SQL_2), replace_all(SQL_2,'"','',SQL_3), concat_atom(['mysql -h ',Domain,' ',Database,' -s -e ','"',SQL_3,'"'],S) shs(S,Y), findall(U,(member(V,Y) , not V = '' , mysql_get_field(V,U)),X),!. psql_macro(SQL,SQL2) :- subatomic(SQL,1,12,'create table'), replace_all(SQL,number,numeric,SQL2), ! . psql_macro(SQL,SQL). mysql_get_field(S,X) :- atomic_length(S,Len), findall(N,(for(1,N,Len) , subatomic(S,N,1,'\t')),_区切り位置ならび), psql_get_field_2(S,Len,[0|_区切り位置ならび],X) . psql_get_field(S,X) :- atomic_length(S,Len), findall(N,(for(1,N,Len) , subatomic(S,N,1,'|')),_区切り位置ならび), psql_get_field_2(S,Len,[0|_区切り位置ならび],X). psql_get_field_2(S,_,[],[]) :-!. psql_get_field_2(S,Len,[St],[A]) :- N2 is St + 1, Len2 is Len - St, subatomic(S,N2,Len2,A_1), erase_space(A_1,A_2), atomic_length(A_2,Len3), postgresql_parse_1(A_2,Len3,A),!. psql_get_field_2(S,Len,[N1,N2|R],[A|R2]) :- Ns is N1 + 1, Len2 is N2 - N1 - 1, subatomic(S,Ns,Len2,A_1), erase_space(A_1,A_2), atomic_length(A_2,Len3), postgresql_parse_1(A_2,Len3,A), psql_get_field_2(S,Len,[N2|R],R2) . postgresql_parse_1(A,Len,V) :- atom_number(A,V), '実数'(V),!. postgresql_parse_1(A,Len,X) :- atom_number(A,N), integer(N), '整数から文字列'(Len,N,X),!. postgresql_parse_1(A,Len,A). erase_space(S,X) :- atomic_length(S,Len), erase_space_s(1,Len,S,X1), atomic_length(X1,Len2), erase_space_e(Len2,X1,X),!. erase_space_s(St,Len,_,'') :- St > Len,!. erase_space_s(St,Len,S,X) :- subatomic(S,St,1,' '), St2 is St + 1, erase_space_s(St2,Len,S,X),!. erase_space_s(St,Len,S,X) :- subatomic(S,St,Len,X),!. erase_space_e(0,_,'') :-!. erase_space_e(St,S,X) :- subatomic(S,St,1,' '), St2 is St - 1, erase_space_e(St2,S,X),!. erase_space_e(St,S,X) :- subatomic(S,1,St,X),!. '整数から文字列'(_文字列桁,_文字列,_副文字列) :- atom(_文字列), subatomic(_文字列,1,_文字列桁,_副文字列),!. '整数から文字列'(_文字列桁,_実数,_副文字列) :- '実数'(_実数), write_formatted_atom(_文字列形式,'%%%d.0f',[_文字列桁]), write_formatted_atom(_副文字列,_文字列形式,[_実数]),!. '整数から文字列'(_文字列桁,_整数,_定数) :- '整数・文字番号変換'(_整数,_文字番号ならび), 'ならびの長さ'(_文字番号ならび,_ならびの長さ), _不足桁 is _文字列桁 - _ならびの長さ, '頭部に零を詰める'(_不足桁,_文字番号ならび,_整形された文字番号ならび), '定数・文字番号変換'(_定数,_整形された文字番号ならび),!. 'ならびの長さ'(_ならび,_ならびの長さ) :- length(_ならび,_ならびの長さ). '実数'(_項) :- real(_項). '整数・文字番号変換'(_整数,_文字番号ならび) :- number(_整数,_文字番号ならび). '頭部に零を詰める'(0,_文字ならび,_文字ならび) :- !. '頭部に零を詰める'(_桁,[_|_未決定ならび],_文字ならび) :- _桁 < 0, !, _残り桁 is _桁 + 1, '頭部に零を詰める'(_残り桁,_未決定ならび,_文字ならび). '頭部に零を詰める'(_桁,_文字ならび,[48|_未決定ならび]) :- _残り桁 is _桁 - 1, '頭部に零を詰める'(_残り桁,_文字ならび,_未決定ならび). replace_all('',A,B,'') :- !. replace_all(String,S1,'',X) :- decompcons(String,StringL), decompcons(S1,S1L), replace_31(StringL,S1L,Y), concat_atom(Y,X),!. replace_all(String,S1,S2,X) :- decompcons(String,StringL), decompcons(S1,S1L), decompcons(S2,S2L), replace_41(StringL,S1L,S2L,Y), concat_atom(Y,X),!. replace_31([],_,[]) :- !. replace_31(L,L1,Y) :- append(L1,R,L), replace_31(R,L1,Y),!. replace_31([A|R],L1,[A|R2]) :- replace_31(R,L1,R2). replace_41([],_,_,[]) :- !. replace_41(L,L1,L2,R2) :- append(L1,R,L), replace_41(R,L1,L2,R3), append(L2,R3,R2),!. replace_41([A|R],L1,L2,[A|R2]) :- replace_41(R,L1,L2,R2). shs(Command,[],X) :- shs(Command,X), ! . shs(Command,List,X) :- tmpnam(TMPNAM), open(TMPNAM,write,Output1), wrln(Output1,List), close(Output1), concat_atom(['cat ',TMPNAM],Cat), system(Cat,user_input,Pipe), system(Command,Pipe,Output), findall(Y,(repeat , get_line(Output,Y) , (Y = end_of_file , (!) , fail ; true)),X), close(Pipe), close(Output), unlink(TMPNAM), ! . shs(Command,user_input,X) :- ( var(X) ; \+(var(X)), \+(X = pipe(_)) ), system(Command,user_input,Pipe), findall(S,(repeat , get_line(Pipe,S) , (S = end_of_file , (!) , fail ; true)),X), close(Pipe), ! . shs(Command,user_input,X) :- \+(var(X)), X = pipe(Pipe), system(Command,user_input,Pipe), ! . shs(Command,Input,Output) :- \+(var(Input)), Input = pipe(Pipe1), \+(var(Output)), Output = pipe(Pipe2), system(Command,Pipe1,Pipe2), close(Pipe1), ! . shs(Command,Input,X) :- \+(var(Input)), Input = pipe(Pipe1), ( var(X) ; \+(var(X)), \+(X = pipe(_)) ), system(Command,Pipe1,Pipe2), close(Pipe1), findall(S,(repeat , get_line(Pipe2,S) , (S = end_of_file , (!) , fail ; true)),X), close(Pipe2), ! . shs(Command,Input,X) :- \+(var(X)), X = pipe(Pipe), \+(var(Input)), \+(Input = pipe(_)), open(Input,read,InputStream), system(Command,InputStream,Pipe), close(InputStream),!. shs(Command,Input,X) :- ( var(X) ; \+(var(X)), \+(X = pipe(_)) ), \+(var(Input)), \+(Input = pipe(_)), open(Input,read,InputStream), system(Command,InputStream,Pipe), close(InputStream), findall(S,(repeat , get_line(Pipe,S) , (S = end_of_file , (!) , fail ; true)),X), close(Pipe),!. shs(Command,X) :- tmpnam(TMPNAM), open(TMPNAM,write,Output), system(Command,user_input,Output), close(Output), get_lines(TMPNAM,L), concat_atom(['rm -f ',TMPNAM],S), system(S), X = L,!. shs(Command_list,X) :- list(Command_list), concat_atom(Command_list,' ',Command), shs(Command,X),!. get_lines(File,Lines) :- get_chars(File,L), chars_lines(L,Lines),!. chars_lines([],[],[]) :- !. chars_lines(['\r'],[],[]) :- !. chars_lines(['\r',A|R],[],[A|R]) :- \+(A = '\n'),!. chars_lines(['\r','\n'|R],[],R) :- !. chars_lines(['\n'|R],[],R) :- !. chars_lines([A|R1],[A|R2],Z) :- chars_lines(R1,R2,Z). chars_lines([],[]) :- !. chars_lines(L,[A|R2]) :- chars_lines(L,U,R), concat_atom(U,A), chars_lines(R,R2). tmpnam(TMPNAM) :- tmpnam_c(A), tmpnam_c(B), tmpnam_c(C), tmpnam_c(D), tmpnam_c(E), tmpnam_c(F), concat_atom(['/tmp/file',A,B,C,D,E,F],TMPNAM),!. tmpnam_c(X) :- Y is (random mod 122) + 1, tmpnam_c_2(Y,X),!. tmpnam_c(X) :- tmpnam_c(X). tmpnam_c_2(X,X) :- X >= 97,X =< 121,!. tmpnam_c_2(X,X) :- X >= 65,X =< 90,!. tmpnam_c_2(X,X) :- X >= 48,X =< 57,!. tmpnam_c_2(Y,X) :- Y >= 0,Y =< 47, X is Y + 65, \+((X >= 92,X =< 96)). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1247438792/457 # [1] 授業単元 C++ # # [2] 問題文(含コード&リンク) # テキストファイルの中のタブコードをそれぞれ、空白N個に置き換えて、 # 新たなファイルに書き出しなさい。ただし、N≧0とする。 # コマンドパラメーター:入力ファイル名、出力ファイル名、N # # <解答例> # Hello( )Bye←入力ファイル # N=3の場合 # Hello( )Bye←出力ファイル t554(_入力ファイル,_出力ファイル,_空白文字数) :- length(L,_空白文字数), all(L,' '), get_chars(_入力ファイル,Chars), replace_chars(Chars,['\t'],L,Chars2), put_chars(_出力ファイル,Chars2). replace_chars([],_,_,[]) :- !. replace_chars(L1,L2,L3,L4) :- append(L2,R1,L1), replace_chars(R1,L2,L3,L5), append(L3,L5,L4),!. replace_chars([A|R1],L2,L3,[A|R4]) :- replace_chars(R1,L2,L3,R4). get_chars(File,L) :- open(File,read,Input), get_char(Input,X), get_chars(Input,X,L), close(Input),!. get_chars(Input,end_of_file,[]) :- !. get_chars(Input,X,[X|R]) :- get_char(Input,Y), get_chars(Input,Y,R) . put_chars(F,L) :- open(F,write,Output), stream_put_chars(Output,L), close(Output),!. stream_put_chars(_,[]) :- !. stream_put_chars(Stream,[Char|R]) :- put_char(Stream,Char), stream_put_chars(Stream,R),!. all([],_). all([V|R],V) :- all(R,V). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1247438792/964 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク): # http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9898.txt # 課題: # 文字数・単語数・行数を数えるプログラム # 内容: # 指定されたファイルに含まれる、 # ・行数 # ・文字数 # ・文字毎の出現回数 # ・単語数 # ・単語毎の出現回数 # を判定し、ディスプレイ表示させる。 # # 単語については、1単語をどのように判定するかの定義付けをし、 # その定義に従って単語を取り出す。 # 指定ファイル: http://nojiriko.asia/data/You_Raise_Me_Up.txt にコピーさせてもらいました。 t631 :- wc(File,_行数,_文字数,_頻度と文字のならび,_単語数,_頻度と語彙のならび), write_formatted('行数 = %t,文字数 = %t\n',[_行数,_文字数]), 頻度付き文字ならびの表示(_頻度と文字のならび), write_formatted('単語数 = %t,\n',[_単語数]), 頻度付き語彙ならびの表示(_頻度付き語彙ならび),!. wc(File,_行数,_文字数,_頻度と文字のならび,_単語数,_頻度と語彙のならび) :- 行と語彙数の計測(File,_行数,_単語数,_頻度と語彙のならび), 文字数の計測(File,_小文字語ならび,_文字数,_頻度と文字のならび). 行と語彙数の計測(File,_行数,_単語数,_頻度と語彙のならび) :- get_split_lines(File,[' ',':','?','.',',','(',')'],Lines), flat(Lines,Words), to_lowers(Words,Words2), 二分木作成(Words2), 二分木から頻度と値を取り出す(1,_頻度付き語彙ならび), length(Lines,_行数), length(_頻度付き語彙ならび,_単語数),!. 文字数の計測(File,_小文字語ならび,_文字数,_頻度と文字のならび) :- get_chars(File,Chars), length(Chars,文字数), 二分木作成(Chars), 二分木から頻度と値を取り出す(1,_頻度付き文字ならび),!. 頻度付き文字ならびの表示([[_頻度,_文字|R]) :- write_formatted('%t (%t),\n',[_文字,_頻度]), 頻度付き文字ならびの表示(R). 頻度付き語彙ならびの表示([[_頻度,_語彙|R]) :- write_formatted('%t (%t),\n',[_語彙,_頻度]), 頻度付き語彙ならびの表示(R). 二分木作成(_整数ならび) :- abolish(節/5), 二分木作成(_整数ならび,1,1,_). 二分木作成([],_,_,_). 二分木作成([_値|R],_節,_開始節番号,_次の節番号) :- 節作成(_値,_節,_開始節番号,_受取節番号), 二分木作成(R,_節,_受取節番号,_次の節番号). 節作成(_値,_節,_受取節番号,_次の節番号) :- not(節(_節,_,_,_,_)), _下 is _受取節番号+1, _右 is _受取節番号+2, _次の節番号 is _受取節番号+3, assertz(節(_節,_下,_右,1,_値)),!. 節作成(_値,_節,_受取節番号,_次の節番号) :- 節(_節,_下,_右,_頻度2,_値2), _値 = _値2, _頻度3 is _頻度2 + 1, retract(節(_節,_下,_右,_頻度2,_値2)), assertz(節(_節,_下,_右,_頻度3,_値2)),!. 節作成(_値,_節,_受取節番号,_次の節番号) :- 節(_節,_下,_右,_,_値2), _値 @> _値2, 節作成(_値,_下,_受取節番号,_次の節番号). 節作成(_値,_節,_受取節番号,_次の節番号) :- 節(_節,_下,_右,_,_値2), _値 @< _値2 , 節作成(_値,_右,_受取節番号,_次の節番号). 二分木から値と頻度を取り出す(_木の根,_頻度と値ならび) :- findall([_頻度,_値],二分木から値と頻度を取り出す(_木の根,_,頻度,_,_値),_頻度と値ならび). 二分木から頻度と値を取り出す(_木の根,_頻度1,_頻度,_値1,_値) :- 根(_木の根,_下,_,_頻度2,_値2), 二分木から頻度と値を取り出す(_下,_頻度2,_頻度,_値2,_値). 二分木から頻度と値を取り出す(_木の根,_頻度1,_頻度,_値1,_値) :- 根(_木の根,_,_右,_頻度2,_値2), 二分木から頻度と値を取り出す(_右,_,頻度,_,_値). 二分木から頻度と値を取り出す(_木の根,_頻度1,_頻度,_値1,_値) :- not(var(_値1)), not(var(_頻度1)), _頻度1=_頻度, _値1=_値. to_lowers([],[]) :- !. to_lowers([A|R1],[B|R2]) :- to_lower(A,B), to_lowers(R1,R2). flat([],[]) :- ! . flat([A|R],L) :- list(A),!, flat(A,L1), flat(R,L2), append(L1,L2,L). flat([A|R],[A|R1]) :- flat(R,R1). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1250204272/390 # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): # http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9936.txt # # 課題: # 「単語」とはどういうものかと定義し、その定義に従って指定されたファイルから # 単語を取り出し、表示させる。また、単語の個数も表示させる。 # # 制約: # ファイルオープン・クローズを使う。 # 関数化を行う。 # 指定ファイル(ファイル名:sample.txt): # You Raise Me Up by Secret Garden t676 :- get_chars('sample.txt',L), 単語ならび(L,[],_単語ならび,R), length(_単語ならび,_個数), write_formatted('単語の総数は %t \n',[_個数]), member(_単語,_単語ならび), write_formatted('%t\n',[_単語]), fail. t676. 単語ならび([],X,X,[]) :- !. 単語ならび(_文,Y,X,R) :- 単語(_文,_単語_文字ならび,R1), 単語ならびの二(_単語_文字ならび,Y,Z), 単語ならび(R1,Z,X,R),!. 単語ならび([_|R1],Y,X,R) :- 単語ならび(R1,Y,X,R). 単語ならびの二(_単語_文字ならび,Y,Z) :- atom_chars(_単語,_単語_文字ならび), member(_単語,Y), Z = Y,!. 単語ならびの二(_単語_文字ならび,Y,Z) :- atom_chars(_単語,_単語_文字ならび), \+member(_単語,Y)), Z = [_単語|Y],!. 単語(_文,_単語_文字ならび,R) :- 区切り記号でない連続(_文,_単語_文字ならび,R). 区切り記号(A) :- member(A,[' ','\n','\t','.',',',':',';']),!. 区切り記号でない連続([A],[A],[]) :- \+(区切り記号(A)),!. 区切り記号でない連続([A,B|R],[A],[B|R]) :- \+(区切り記号(A)), 区切り記号(B),!. 区切り記号でない連続([A|R1],[A|R2],R) :- \+(区切り記号(A)), 区切り記号でない連続(R1,R2,R). % 以下のサイトは http://pc11.2ch.net/test/read.cgi/php/1147830986/9 # 1.1行ずつURLが記述されたテキストファイルを読み込み、 # 2.そのURLのコンテンツを取得して # 3.タイトルとURLを画面に出力(コンソールに直接でもブラウザへでも可) # するプログラムを作ってください。 # 尚テキストファイルに記述されているURLは妥当なものと見なして構わないものとする。 一行ずつURLが記述されたテキストファイルを読み込み、そのURLのコンテンツを取得してタイトルとURLを画面に出力する(File) :- 一行ずつURLが記述されたテキストファイルを読み込み(File,Lines), そのURLのコンテンツを取得して(URL,_コンテンツ,_タイトル), タイトルとURLを画面に出力(_タイトル,URL), fail. 一行ずつURLが記述されたテキストファイルを読み込み、そのURLのコンテンツを取得してタイトルとURLを画面に出力する(_). 一行ずつURLが記述されたテキストファイルを読み込み(File,URL) :- get_chars(File,Lines), member(URL,Lines). 'そのURLのコンテンツを取得して'(URL,_コンテンツ,_タイトル) :- w3c(URL,Lines2), concat_atom(Lines,_改行を削除した全文), atom_chars(_改行を削除した全文,_コンテンツ), タイトルを得る(_コンテンツ,_タイトル). タイトルとURLを画面に出力(_タイトル,URL) :- write_formatted('%t,%t\n',[_タイトル,URL]). タイトルを得る([|R1],_タイトル) :- (A=t;A='T'),(B=i;B='I'),(C=t;C='T'),(D=l;D='L'),(E=e;E='E'), タイトル文字ならびを切り取る(R1,_タイトル文字ならび), concat_atom(_タイトル文字ならび,_タイトル). タイトルを得る([_|R1],_タイトル) :- タイトルを得る(R1,_タイトル). タイトル文字ならびを切り取る(['<','/',A,B,C,D,E,'>'|_],[]) :- (A=t;A='T'),(B=i;B='I'),(C=t;C='T'),(D=l;D='L'),(E=e;E='E'),!. タイトル文字ならびを切り取る([A|R1],[A|R2]) :- タイトル文字ならびを切り取る(R1,R2). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1248012902/444 # 【課題】課題は3つあります。 # http://www.dotup.org/uploda/www.dotup.org318192.zip % 問題1 星ピラミットの表示 入力された段数になるように星文字でピラミッドを築く :- 入力された段数に(_入力された段数), なるように星文字でピラミッドを築く(_入力された段数). なるように星文字でピラミッドを築く(_入力された段数) :- _最終行の星数 is (_入力された段数 - 1) * 2 + 1, length(L,_最終行の星数), between(1,_入力された段数,N), 星文字でピラミッドを築く(N), N = _入力された段数. 入力された段数に(_入力された段数) :- write('段数を入れてください : '), get_integer(_段数). 星文字でピラミッドを築く(N) :- length(L1,N), all(L1,'*'), append(L0,L1,L0,L), all(L0,' '), atom_chars(Atom,L), writef(' %t \n',[Atom]). 乱数を使って発生させた2つの整数のたし算を5問示しそれぞれの回答診断と5問答えるのに要した時間を表示 :- _開始時刻 is time, for(1,N,5), 一問答える, N = 5, _終了時刻 is time, _回答するのに要した時間 is _終了時刻 - _開始時刻, writef('5問回答までの時間は%t秒でした。\n',[_回答するのに要した時間]). 一問答える :- A is random(100), B is random(100), writef('%t + %t =? ',[A,B]),get_integer(_答え), _正解 is A + B, 回答診断(_正解,_答え,_診断), writef('%t\n',[_診断]). 回答診断(_正解,_正解,'正解です!!'). 回答診断(_正解,_答え,_診断) :- 1 is abs(_正解 - _答え), concat_atom(['惜しいです。正解は',_正解],_診断). 回答診断(_正解,_答え,_診断) :- \+(_答え=_正解), \+(1 is abs(_正解 - _答え)), concat_atom(['間違いです。正解は',_正解],_診断). 'ファイル名を入力させてそのファイルの行数その中に現れる小文字、大文字、その他の文字数を表示する' :- 'ファイル名を入力させて'(_ファイル名), get_chars(_ファイル名,Chars). '行数、小文字数、大文字数、その他文字数の集計'(Chars,_行数,_小文字数,_大文字数,_その他文字数), そのファイルの行数その中に現れる小文字、大文字、その他の文字数を表示する'(_行数,_小文字数,_大文字数,_その他文字数). 'ファイル名を入力させて'(_ファイル名) :- write('ファイル名を入力してください\n'), get_line(_ファイル名). そのファイルの行数その中に現れる小文字、大文字、その他の文字数を表示する'(_行数,_小文字数,_大文字数,_その他文字数) :- writef('%t行ありました\n',[_行数]), writef('小文字の数は%t\n',[_小文字数]), writef('大文字の数は%t\n',[_大文字数]), writef('その他の数は%t\n',[_その他文字数]). '行数、小文字数、大文字数、その他文字数の集計'([],0,0,0,0). '行数、小文字数、大文字数、その他文字数の集計'(['\n'|R],S1,S2,S3,S4) :- 行数の加算(R,S1,S2,S3,S4). '行数、小文字数、大文字数、その他文字数の集計'([A|R],S1,S2,S3,S4) :- 小文字数の加算([A|R],S1,S2,S3,S4,S11,S12,S13,S14). '行数、小文字数、大文字数、その他文字数の集計'([A|R],S1,S2,S3,S4) :- 大文字数の加算([A|R],S1,S2,S3,S4,S11,S12,S13,S14). '行数、小文字数、大文字数、その他文字数の集計'([_|R],S1,S2,S3,S4) :- その他文字数の加算(R,S1,S2,S3,S4). 行数の加算(R,S1,S2,S3,S4) :- '行数、小文字数、大文字数、その他文字数の集計'(R,S11,S2,S3,S4), S1 is S11 + 1,!. 小文字数の加算([A|R],S1,S2,S3,S4) :- A @>= 'a',A @=< 'z', '行数、小文字数、大文字数、その他文字数の集計'(R,S1,S21,S3,S4), S2 is S21 + 1,!. 大文字数の加算([A|R],S1,S2,S3,S4) :- A @>= 'A',A @=< 'Z', '行数、小文字数、大文字数、その他文字数の集計'(R,S1,S2,S31,S4), S3 is S31 + 1,!. その他文字数の加算(R,S1,S2,S3,S4) :- '行数、小文字数、大文字数、その他文字数の集計'(R,S1,S2,S3,S41), S4 is S41 + 1,!. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% get_integer(N) :- repeat, get_line(Line), atom_to_term(Line,M,_), get_integer_診断(M,N),!. get_integer_診断(end_of_file,-1). get_integer_診断(N,N) :- integer(N). get_line(X) :- get_char(C), get_line_1(C,Chars), atom_chars(X,Chars). get_line_1('\n',[]) :- !. get_line_1(end_of_file,[]) :- !. get_line_1(C,[C|R]) :- get_char(C2), get_line_1(C2,R). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1248012902/463 # 【課題】 # http://ime.nu/www51.tok2.com/home/rg550/cgi-bin/hosoku/img0047.zip # 【課題1】 # 実行例のようにキーボードから文字列を読み込み、文字型の配列に一文字づつ格納 # した後、整列し(順番はどちらでもかまいません)、出力するプログラムを # 作成しなさい。 # 【課題2】 # 0から9までの整数乱数を100個発生させ、実行例のようにその出現分布を棒グラフと # 値で出力するプログラムを作成しなさい。また、100個の乱数の平均値も合わせて # 出力しなさい。 # ただし、0から9 それぞれの個数を数えるための変数に必ず配列を用いてください。 # (出現個数カウント用の変数を10個用意してはいけません。) 例えば、出現個数 # カウント用の配列 count[] を用意すると、 count[0] に0が出現した回数が # 格納される。もし0が10回出現した場合、count[0]=10となる。) % 課題1 '実行例のようにキーボードから文字列を読み込み、文字型の配列に一文字づつ格納した 後、整列し(順番はどちらでもかまいません)、出力する' :- get_chars(_文字ならび), sort(_文字ならび,_整列した文字ならび), atom_chars(_整列した文字列,_整列した文字ならび), write_formatted('%t\n',[_整列した文字列]). % 課題2 '0から9までの整数乱数を100個発生させ、実行例のようにその出現分布を棒グラフと値 で出力する' :- findall([N,0,[]],for(0,N,9),_出現個数カウント用ならび), '0から9までの整数乱数を100個発生させ'(1,L1), 'その出現分布を棒グラフと値で出力する'(L1,_出現個数カウント用ならび). '0から9までの整数乱数を100個発生させ'(N,[]) :- N > 100,!. '0から9までの整数乱数を100個発生させ'(N,[_乱整数|R]) :- _乱整数 is random mod 10, N2 is N + 1, '0から9までの整数乱数を100個発生させ'(N2,R). 'その出現分布を棒グラフと値で出力する'([],L) :- 'グラフと値で出力'(L),!. 'その出現分布を棒グラフと値で出力する'([N|R],L) :- member([N,_カウント,L1],L), _カウント2 is _カウント + 1, ならびの置換([N,_カウント,L1],[N,_カウント2,[_|L1]],L,L2), 'その出現分布を棒グラフと値で出力する'(R,L2). グラフと値で出力([]). グラフと値で出力([[N,C,L]|R]) :- all(L,'*'), write_formatted(' %t: %t %t\n',[N,L,C]), グラフと値で出力(R). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1258158172/68 # [1] 授業単元: ネットワークプログラミング # [2] 問題文(含コード&リンク): #  あなたのマシンのIPアドレスを表示しなさい # あなたのマシンのIPアドレスを表示(IPアドレス) :- system(ifconfig,user_input,Stream), get_chars(Stream,L), 'inet addr:を探す'(L,R1), 'IPアドレスを切り取る'(R1,IPL), atom_chars(IPアドレス,IPL), write(IPアドレス). 'inet addr:を探す'([i,n,e,t,' ',a,d,d,r,':'|R1],R1). 'inet addr:を探す'([A|R1],R2) :- 'inet addr:を探す'(R1,R2). 'IPアドレスを切り取る'([],[]) :- !. 'IPアドレスを切り取る'(['\n'|_],[]) :- !. 'IPアドレスを切り取る'([' '|_],[]) :- !. 'IPアドレスを切り取る'([A|R1],[A|R2]) :- 'IPアドレスを切り取る'(R1,R2). ?- 'a##'. http://pc12.2ch.net/test/read.cgi/tech/1258158172/97 # struct meibo {char name[20];int eigo; int kokugo;} # みたいな構造体でmeibo_t[]にループでどんどんデータを入れて生きたいのですがどうすれば良いですか? # int a= 0; meibo[a]=みたいにするとエラーがでますし、何か[0]にどんどん数字が足されてるような気がします # }; # meibo(L) :- findall(L2,(get_line(Line),(Line=end_of_file,!,fail;split(Line,[','],L2))),L). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1258158172/236 # [1] C言語プログラミング演習 # [2] 標準入力の文字列に含まれるタブをコマンドラインで与えたサイクルのタブストップでスペースに変換するプログラム # (コマンドラインに 2 4 2 4 を与えた場合タブを入力したら3 7 10 17 20 27...が桁位置に # なるようスペースを挿入する) # 入力は半角文字に限って良い。またコマンドラインからは正の整数を表すものが # 与えられるとして良い # [3] Windows vista/Borland C++ 5.5/C言語でコード # 制限:fgetsを使う。 # [4] できるだけ早く # # 標準入力の文字列に含まれるタブをコマンドラインで与えたサイクルのタブストップでスペースに変換する :- user_paramegers(L), findall(N,(member(A,L),atom_to_term(A,N,_)),L2), get_chars(Chars), 標準入力の文字列に含まれるタブをコマンドラインで与えたサイクルのタブストップでスペースに変換する(_タブストップサイクル,_タブストップサイクル,Chars,X). 標準入力の文字列に含まれるタブをコマンドラインで与えたサイクルのタブストップでスペースに変換する([],_タブストップサイクル,L2,L3) :- 標準入力の文字列に含まれるタブをコマンドラインで与えたサイクルのタブストップでスペースに変換する(_タブストップサイクル,_タブストップサイクル,L2,L3),!. 標準入力の文字列に含まれるタブをコマンドラインで与えたサイクルのタブストップでスペースに変換する(_,_,[],[]) :- !. 標準入力の文字列に含まれるタブをコマンドラインで与えたサイクルのタブストップでスペースに変換する([N|R1],_タブストップサイクル,['\t'|R2],L) :- length(L2,N), all(L2,' '), append(L2,L3,L), 標準入力の文字列に含まれるタブをコマンドラインで与えたサイクルのタブストップでスペースに変換する(R1,_タブストップサイクル,R2,L3),!. 標準入力の文字列に含まれるタブをコマンドラインで与えたサイクルのタブストップでスペースに変換する([N|R1],_タブストップサイクル,[A|R2],[A|R3]) :- \+(A='t'), 標準入力の文字列に含まれるタブをコマンドラインで与えたサイクルのタブストップでスペースに変換する([N|R1],_タブストップサイクル,R2,R3). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1263824755/907 # [1] 授業単元:http://pc12.2ch.net/test/read.cgi/tech/1267799238/ # [2] 問題文(含コード&リンク): # 保存済みのメモ帳に書いてある10個の数字からランダムに5個読み取るプログラム。 #  [3.1] OS:わかりません #  [3.2] コンパイラ名とバージョン: わかりません #  [3.3] 言語:C++ # [4] 期限:201x年 # [5] その他の制限:fopen、fscanf、for、ifまで習いました。 % Prolog 「10個の」をどう反映させればよいか解らない・・・ 保存済みのメモ帳に書いてある10個の数字からランダムに5個読み取る(_保存済みのメモ帳,L) :- get_chars(_保存済みのメモ帳,Chars), findall(N,(for(1,M,5),数字にヒットするまでランダムにならびを探す(Chars,N)),L). 数字にヒットするまでランダムにならびを探す(L,N) :- length(L,Len),Len > 0, repeat, M is (random mod Len) + 1, list_nth(M,L,A), member(A,['0','1','2','3','4','5','6','7','8','9']),!. % 以下のサイトは document.writeln(""); //--> document.writeln(""); //--> S 1- V50 [PR]KWFbg j[X[PR] # vO (a)-(j)for gB #include<stdio.h> int main() { int a[10]; double sum,ave; sum=0; a[0]=1; a[1]=5; a[2]=7; a[3]=2; a[4]=4; a[5]=1; a[6]=9; a[7]=4; a[8]=20; a[9]=5; sum=sum+a[0];
# /* (a) */ sum=sum+a[1]; /* (b) */ sum=sum+a[2]; /* (c) */ sum=sum+a[3]; /* (d) */ sum=sum+a[4]; /* (e) */ sum=sum+a[5]; /* (f) */ sum=sum+a[6]; /* (g) */ sum=sum+a[7];
# /* (h) */ sum=sum+a[8]; /* (i) */ sum=sum+a[9]; /* (j) */ ave=sum/10; printf("a %d B %d B\n",sum, ave); }
#
# S
# 5A\ヲAt\ヲvOB
# タsF F 3 F 7 F1 F 2 F 5
# \ヲ 3 7 1 2 5 t\ヲ 5 2 1 7 3 vOeLXgRs[eLXgtB[ho\toB

At@xbgtAt@xbg(,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x, y,z],[z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a]).
At@xbgtAt@xbg(,['A','B','C','D','E','F','G','H','I','J','K','L', 'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'],['Z','Y','X','W','V','U','T','S','R','Q','P','O','N','M','L','K','J','I','H','G','F','E','D','C','B','A']). stack_operation(1,Stack1,Stack) :- write('f[^ :'),get_integer(N),push(N,Stack,Stack2),print_stack_list(Stack2),get_action(N2),stack_operation(N2,Stack2,Stack). pop(A,Stack1,Stack2),write_formatted('|bvf[^%tB \n',[A]),print_stack_list(Stack2),get_action(N2),stack_operation(N2,Stack2,Stack). &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& # t@Ct@CJAf[^L^Bvoid_read_data_file(char*file)A fileOwt@CJAdzW[]liz[]f[^B

@@get_file_info(_pX,[dev(Dev),ino(Ino),mode(Modes),nlink(Nlink),uid (Uid),uname(Uname),gid(Gid),gname(Gname),size(_TCY),atime(Atime),mtime (Mtime),ctime(_IX),blksize(Blksize),blocks(Blocks)]),
@@member(FI,Modes),
@@sub_atom(FI,0,2,_,if),
@@t@C(FI,_).

t@C(ifblk,ubNt@C).
t@C(ifchr,LN^t@C).
t@C(ififo,pCv).
t@C(ifreg,t@C).
t@C(ifdir,fBNg).
t@C(iflnk,V{bNN).

sBsB

VX\ヲ
S O100 100 V50 OF E-mail () :
% 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1267796762/81 # 【 課題 】入力したテキストに含まれる文字を種類別に使用回数を表示し、降順にソートし出力するプログラムを作れ。 # 【 形態 】1. Javaアプリケーション(main()で開始) # 【 GUI  】制限なし # 【 期限 】5月中 # 【 Ver  】java version "1.6.0_17" # 【 補足 】使用する文字は半角アルファベットのみです。 # # 文字種(英小文字,a,z). 文字種(英大文字,'A','Z'). 入力したテキストに含まれる文字を種類別に使用回数を表示し、降順にソートし出力する(_テキストファイル,_出力ファイル) :- findall(_文字種,文字種(_文字種,_,_),_文字種ならび), get_chars(_テキストファイル,Chars), 文字を種類別に使用回数を表示し(Chars,_文字種ならび,L), 降順にソートし出力する(_出力ファイル,Chars). 文字を種類別に使用回数を表示し(_,[],[]) :- !. 文字を種類別に使用回数を表示し(Chars,[_文字種|R1],[[_使用回数,_文字種]|R2]) :- count((member(A,Chars),文字種(_文字種,C1,C2),A @>= C1,A @=< C2),_使用回数), write_formatted('%t %t回\n',[_文字種,_使用回数]), 文字を種類別に使用回数を表示し(Chars,R1,R2). 降順にソートし出力する(_出力ファイル,L) :- 降順にソートし(L,L2), open(_出力ファイル,write,Output), 出力する(Output,L2), close(Output),!. 降順にソートし(L,L2) :- sort(L,L1),reverse(L1,L2),!. 出力する(Output,[]) :- !. 出力する(Output,[[_使用回数,_文字種]|R]) :- write_formatted(Output,'%t %t回\n',[_文字種,_使用回数]),出力する(Output,R). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1274827528/918 # [1] 授業単元:Cプログラミング演習 # [2] 問題文(含コード&リンク): # 問題1:文字列"Computer1Programing2Communication3Electro4"を、"test.txt"に書き込むプログラムを作成せよ。 # 問題2:ファイル"test.txt"から文字列も読み込み、並びを逆にしてファイル"sample.txt"に出力するプログラムを作成せよ。("test.txt"は問題1で作成したものを使用すること。) # 問題3:ファイル"sample.txt"から大文字だけを画面に表示させるプログラムを作成せよ。("sample.txt"は問題2で作成したものを使用すること。) # '文字列"Computer1Programing2Communication3Electro4"を、"test.txt"に書き込む' :- open('test.txt',write,Output), write(Output,'Computer1Programing2Communication3Electro4'), close(Output). 'ファイル"test.txt"から文字列も読み込み、並びを逆にしてファイル"sample.txt"に出力する' :- get_lines('test.txt',Lines), open('sample.txt',write,Output), append(_,[Line|R],Lines), 並びを逆に(Line,_並びを逆にしたLine), write_formatted(Output,_並びを逆にしたLine), R = [], close(Output). 並びを逆に(Line,_並びを逆にしたLine) :- atom_chars(Line,Chars), reverse(Chars,Rchars), atom_chars(_並びを逆にしたLine,Rchars). 'ファイル"sample.txt"から大文字だけを画面に表示させる' :- get_chars('sample.txt',Chars), append(_,[Char|R],Chars), 大文字だけを画面に表示させる(Char), R = [],!. 大文字だけを画面に表示させる(Char) :- Char @>= 'A',Char @=< 'Z', write(Char). 大文字だけを画面に表示させる(Char) :- \+((Char @>= 'A',Char @=< 'Z')). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1260532772/911 # お願いします # [1] 授業単元:電子演算機演習 # [2] 問題文(含コード&リンク): #  2次元の文字配列が、main関数内において次の詞で初期化(空白行も含める)されている。 # 例によって、初期化に用いられた詞の文字数や行数などはわかっていないものとする。 # # #  (1)関数NumOfCharで総文字数(空白以外)を、(2)関数NumOfWordで単語数を、(3)関数 #  NumOfLineで行数(空白行は数えない。また、空白行が2行以上続くことはない)を、(4)main #  関数内でキーボードから一文字入力し、関数NumOfCoinで入力した文字と一致する文字数を数えて、 #  main関数内でそれらの数を表示する。文字列に小細工をしないこと(単語:空白又は改行から空白 #  又は改行まで) # wc(_ファイル) :- get_chars(_ファイル,Chars), wc(Chars,0,0,0,0,_総文字数,_単語数,_行数), write_formatted('%t %t %t\n',[_総文字数,_単語数,_行数]). wc([],_総文字数,_単語数,_行数,0,_総文字数,_単語数,_行数). wc([],_総文字数,_単語数1,_行数1,N,_総文字数,_単語数,_行数) :- _単語数 is _単語数1 + 1, _行数 is _行数1 + 1,!. wc(['\n'|R],_総文字数1,_単語数1,_行数1,0,_総文字数,_単語数,_行数) :- _総文字数2 is _総文字数1 + 1, _行数2 is _行数1 + 1, wc(R,_総文字数2,_単語数1,_行数2,0,_総文字数,_単語数,_行数),!. wc(['\n'|R],_総文字数1,_単語数1,_行数1,N,_総文字数,_単語数,_行数) :- _総文字数2 is _総文字数1 + 1, _単語数2 is _単語数1 + 1, _行数2 is _行数1 + 1, wc(R,_総文字数2,_単語数2,_行数2,0,_総文字数,_単語数,_行数),!. wc([' '|R],_総文字数1,_単語数1,_行数1,0,_総文字数,_単語数,_行数) :- _総文字数2 is _総文字数1 + 1, wc(R,_総文字数2,_単語数1,_行数1,0,_総文字数,_単語数,_行数),!. wc([' '|R],_総文字数1,_単語数1,_行数1,N,_総文字数,_単語数,_行数) :- \+(N = 0), _総文字数2 is _総文字数1 + 1, _単語数2 is _単語数1 + 1, wc(R,_総文字数2,_単語数2,_行数1,0,_総文字数,_単語数,_行数),!. wc([A|R],_総文字数1,_単語数1,_行数1,N,_総文字数,_単語数,_行数) :- \+(N = 0), _総文字数2 is _総文字数1 + 1, N2 is N + 1, wc(R,_総文字数2,_単語数1,_行数1,N2,_総文字数,_単語数,_行数). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1267796762/170 # 【 課題 】入力したテキストに含まれる文字を種類別に使用回数を表示し、降順にソートし出力するプログラムを作れ。 # 【 形態 】Javaアプリケーション(main()で開始) # 【 期限 】6月22日 # 【 Ver  】1.6.0_20 # 【 補足 】../test/read.cgi/tech/1267796762/83と同様の問題ですが漢字や記号など全ての種類によらずに統計したい場合です。よろしくお願いします。 # # '入力したテキストに含まれる文字別に使用回数を表示し、使用回数で降順にソートし出力する' :- get_line(_入力したテキスト), テキストを文字のならびに変換する(_入力したテキスト,_文字ならび), 文字頻度ならびの生成(_文字ならび,[],_文字頻度ならび), 降順整列(_文字頻度ならび,_降順に整列した文字頻度ならび), append(_,[[_頻度,_文字]|R],_降順整列した文字頻度ならび), write_formatted('%t %t回\n',[_文字,_頻度]), R = [],!. テキストを文字のならびに変換する(_入力したテキスト,_文字ならび) :- atom_chars(_入力したテキスト,_文字ならび). 文字頻度ならびの生成([],L,L) :- !. 文字頻度ならびの生成([A|R1],L1,L) :- 文字頻度ならびの生成(A,L1,L2,M), 文字頻度ならびの生成_2(M,A,R1,L2,L),!. 文字頻度ならびの生成_2(1,A,R1,L2,L) :- 文字頻度ならびの生成(R1,L2,L),!. 文字頻度ならびの生成_2(M,A,R1,L2,L) :- 文字頻度ならびの生成(R1,[[M,A]|L2],L),!. 文字頻度ならびの生成(A,[],[[1,A]],1) :- !. 文字頻度ならびの生成(A,[[N,A]|R1],R1,N2) :- N2 is N + 1,!. 文字頻度ならびの生成(A,[L1|R1],[L1|R2],N) :- 文字頻度ならびの生成(A,R1,R2,N). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 文字種(数字,_文字) :- _文字 @>= '0',_文字 @=< '9'. 文字種(英大文字,_文字) :- _文字 @>= 'A',_文字 @=< 'Z'. 文字種(英小文字,_文字) :- _文字 @>= 'a',_文字 @=< 'z'. 文字種(英記号,_文字) :- _文字 @>= ' ',_文字 @=< '}',\+(文字種(英小文字,文字)),\+(文字種(英大文字,_文字)). 文字種(全角漢字,_文字) :- _文字 @>= '亜',_文字 @=< '龠'. 文字種(全角平仮名,_文字) :- _文字 @>= 'ぁ',_文字 @=< 'ん'. 文字種(全角片仮名,_文字) :- _文字 @>= 'ァ',_文字 @=< 'ン'. 文字種(全角数字,_文字) :- _文字 @>= '0',_文字 @=< '9'. 文字種(全角英大文字,_文字) :- _文字 @>= 'A',_文字 @=< 'Z'. 文字種(全角英小文字,_文字) :- _文字 @>= 'a',_文字 @=< 'z'. 文字種(全角記号,_文字) :- char_code(_文字,_文字コード), _文字コード >= 0xa1a1,_文字コード =< 0xa3fe. '入力したテキストに含まれる文字を種類別に使用回数を表示し、降順にソートし出力する' :- get_chars(L1), '入力したテキストに含まれる文字を種類別に使用回数を計測する'(L1,[],L2), rsort(L2,L3), append(_,[[_頻度,_文字種]|R],L3), write_formatted('%t %t回\n',[_文字種,_頻度]), R = []. '入力したテキストに含まれる文字を種類別に使用回数を計測する'([],L,L) :- !. '入力したテキストに含まれる文字を種類別に使用回数を計測する'([_文字|R],L1,L) :- 文字種(_種類,_文字), 種類別に使用回数を更新(_種類,L1,L2), '入力したテキストに含まれる文字を種類別に使用回数をを計測する'(R,L2,L),!. '入力したテキストに含まれる文字を種類別に使用回数を計測する'([_文字|R],L1,L) :- \+(文字種(_種類,_文字)) '入力したテキストに含まれる文字を種類別に使用回数を計測する'(R,L1,L). 種類別に使用回数を更新(_種類,[],[[1,_種類]]) :- !. 種類別に使用回数を更新(_種類,[[_頻度1,_種類]|R],[[_頻度2,_種類]|R]) :- _頻度2 is _頻度1 + 1,!. 種類別に使用回数を更新(_種類,[A|R1],[A|R2]) :- 種類別に使用回数を更新(_種類,R1,R2). rsort(L1,L2) :- sort(L1,L3), reverse(L3,L2). % 以下のサイトは # 演習6-3 # # 入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントするプログラムを作成せよ. # 【実行例】 # # % ./a.out # tataatccg ← 入力し,リターンを押して ^D # Thymine (t) : 3 # Cytosine (c) : 2 # Adenine (a) : 3 # Guanine (g) : 1 # % # # '入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントする' :- get_chars(_塩基ならび), '塩基 t, c, a, gそれぞれの個数をカウントする'(_塩基ならび,T,C,A,G), 塩基個数の表示([[t,T],[c,C],[a,A],[g,G]]). '塩基 t, c, a, gそれぞれの個数をカウントする'([],0,0,0,0) :- !. '塩基 t, c, a, gそれぞれの個数をカウントする'([t|R],T,C,A,G) :- '塩基 t, c, a, gそれぞれの個数をカウントする'(R,T,C,A,G),T is T1 + 1,!. '塩基 t, c, a, gそれぞれの個数をカウントする'([c|R],T,C,A,G) :- '塩基 t, c, a, gそれぞれの個数をカウントする'(R,T,C1,A,G),C is C1 + 1,!. '塩基 t, c, a, gそれぞれの個数をカウントする'([a|R],T,C,A,G) :- '塩基 t, c, a, gそれぞれの個数をカウントする'(R,T,C,A1,G),A is A1 + 1,!. '塩基 t, c, a, gそれぞれの個数をカウントする'([g|R],T,C,A,G) :- '塩基 t, c, a, gそれぞれの個数をカウントする'(R,T,C,A,G1),G is G1 + 1,!. '塩基 t, c, a, gそれぞれの個数をカウントする'([X|R],T,C,A,G) :- \+(X=t),\+(X=c),\+(X=a),\+(X=g), '塩基 t, c, a, gそれぞれの個数をカウントする'(R,T,C,A,G). 塩基個数の表示([]) :- !. 塩基個数の表示([[_塩基,_個数]|R]) :- 塩基(_塩基,_塩基表示), write_formatted(' %8s (%t) : %t\n',[_塩基表示,_塩基,_個数]), 塩基個数の表示(R). 塩基(t,'Thymine'). 塩基(c,'Cytosine'). 塩基(a,'Adenine'). 塩基(g,'Guanine'). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1276810079/316 # http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10760.txt # # (1)複数の文字列を読み込み,さらに,それらの文字列を繋ぎ合わせる順番を入力し結果を出力するプログラムを作成せよ. # # 【実行例】 # # 何個の文字列を入力しますか?:3 # 入力文字列[1]:B # 入力文字列[2]:A # 入力文字列[3]:C # # 繋ぎ合わせる順番を入力してください。 # 2 # 1 # 3 # # 結果 -> ABC # # (2)入力した文字配列中に,abcという並びがいくつあるか調べるプログラムを作成せよ. # # 【実行例】 # # 1abfaabcabc # gatagataabc # (ここで ^D を押す) # #ABC is 3 # 複数の文字列を読み込み,さらに,それらの文字列を繋ぎ合わせる順番を入力し結果を出力する :- 催促付き整数入力('文字列の個数を予約してください : ',N), findall(S,( for(1,_,N),write_formatted('入力文字列[%t] : ',[M]), get_line(S)), L1), write('繋ぎ合わせる順番を入力してください。\n'), findall(N2,(for(1,_,N),get_integer(N2)),L2), 文字列のならびの並べ替え(L1,L2,L), concat_atom(L,_繋ぎ合わされた文字列), write_formatted('%t\n',[_繋ぎ合わされた文字列]). 文字列のならびの並べ替え(L1,[],[]) :- !. 文字列のならびの並べ替え(L1,[N|R2],[L2|R3]) :- list_nth(N,L1,L2), 文字列のならびの並べ替え(L1,R2,R3). '入力した文字配列中に,abcという並びがいくつあるか調べる' :- get_chars(Chars), count(append(_,[a,b,c|_],Chars),Count), write_formatted('#abc = %t\n'[Count]). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1276810079/317 # [1] 授業単元:プログラミング言語 # [2] # リストに格納したデータを,データファイルとは # 別のファイル(出力先ファイルとよぶ)に書き出す. # データファイルと出力先ファイルのファイル名は # コマンドライン引数として指定する # 下記テンプレートを使用すること # http://ime.nu/codepad.org/d9CUmfae # program :- user_parameters([_データファイル,_出力先ファイル]), get_chars(_データファイル,Chars), put_chars(_出力先ファイル,Chars). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1276810079/937 # この問題ができません。誰かお願いします。 # # 入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントするプログラムを作成せよ. # 【実行例】 # # % ./a.out # tataatccg ← 入力し,リターンを押して ^D # Thymine (t) : 3 # Cytosine (c) : 2 # Adenine (a) : 3 # Guanine (g) : 1 # % # '入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントする' :- get_chars(Chars), count(member(t,Chars),_t), count(member(c,Chars),_c), count(member(a,Chars),_a), count(member(g,Chars),_g), write_formatted('Thymine (t) : %t \nCytosine (c) : %t \nAdenine (a) : %t \nGuanine (g) : %t \n',[_t,_c,_a,_g]). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1276810079/943 # 入力したDNA塩基配列中に,atgという並びがいくつあるか調べるプログラムを作成せよ.但し,入力には t, c, a, g以外の文字も入っている.塩基以外の文字は無視すること. # 【実行例】 # # % ./a.out # 1gattatgtga # 11tgccgatatc # 21gatatgattc # (ここで ^D を押す) # #ATG is 3 # % # # よろしくお願いします。 # # '入力したDNA塩基配列中に,atgという並びがいくつあるか調べるプログラムを作成せよ.但し,入力には t, c, a, g以外の文字も入っている.塩基以外の文字は無視すること' :- get_chars(Chars), atgという並びがいくつあるか(Chars,_いくつ). atgという並びがいくつあるか([],0). atgという並びがいくつあるか([a|R1],_いくつ) :- atgという並び(R1,R2), atgという並びがいくつあるか(R2,_いくつの一), _いくつ is _いくつの一 + 1,!. atgという並びがいくつあるか([_|R1],_いくつ) :- atgという並びがいくつあるか(R1,_いくつ). atgという並び(R1,R2) :- append(_,[t|L1],[g|R2],R1), \+((member(A,[a,t,c,g]),member(A,L1))),!. atgという並び(_,[]). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1279286575/74 # 【質問テンプレ】 # [1] 授業単元:情報処理課題 # [2] 問題文(含コード&リンク):英語の文章で構成されるテキストファイルに対して、その中に含まれる総文字数と異なる文字ごとの出現回数とを数え上げよ。 # [3.3] 言語:C # [4] 期限:2010年07月19日00:00まで # [5] その他の制限:Xcodeを使用しています。読み込むファイルは"/Users/user/Desktop/data.txt"で。 # # 似たようなプログラムを作った時は「数列を入力し総文字数と数字ごとに出現回数とを数え上げグラフで表示」というような課題で # 数字だったので0〜9までを表示することが簡単に出来ましたがアルファベットなのでa-zをどう表示したものか # またstrlenだと半角空白も数えてしまうので総"文字"数とずれてくるのではないかと悩んでいます。 # よろしくお願いします。 # # 英語の文章で構成されるテキストファイルに対して、その中に含まれる総文字数と異なる文字ごとの出現回数とを数え上げる(_総文字数,_文字ごとの出現度数ならび) :- get_chars('/Users/user/Desktop/data.txt',Chars), length(Chars,_総文字数), findsetof(C,member(C,Chars),L1), findall([C,_出現度数],(member(C,L1),count(member(C,Chars),_出現度数)),_文字ごとの出現度数ならび). findsetof(A,B,L) :- findall(A,B,C), setof(A,member(A,C),L). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1280653311/570 # [1] 授業単元:応用C言語 # [2] 問題文(含コード&リンク): # 標準入力を読み込み、指定された文字列(mainの引数に2個以上与えられる)を検索し、それらの指定文字列が現れた、直後に与えられた引数に置換 # して標準出力するプログラムを作成せよ。 # ただし最後の引数の文字列が現れた場合は最初に指定された文字列に # 置換するものとする。 # また複数の指定文字列に一致する箇所の場合、もっとも長い文字列が # 現れたものと解釈する。 # # *入力文字に非ASCII文字が含まれないとして良い # '標準入力を読み込み、指定された文字列(mainの引数に2個以上与えられる)を検索し、それらの指定文字列が現れた、直後に与えられた引数に置換して標準出力する。ただし最後の引数の文字列が現れた場合は最初に最初に指定された文字列に置換するものとする。また複数の指定文字列に一致する箇所の場合、もっとも長い文字列が現れたものと解釈する。' :- user_parameters(_指定文字列ならび), _指定文字列ならび = [A|R1], append(_指定文字列ならび,[A],_指定文字列ならびの二), 置換述語の生成(_指定文字列ならびの二), '標準入力を読み込み'(Chars), '指定された文字列(mainの引数に2個以上与えられる)を検索し、それらの指定文字列が現れた、直後に与えられた引数に置換して'(Chars,Chars2), put_chars(Chars2). 置換述語の生成([_]) :- !. 置換述語の生成([_文字列1,_文字列2|R]) :- atom_chars(_文字列1,Chars1), atom_chars(_文字列2,Chars2), atom_length(_文字列1,Len), append(_文字列1,R1,L1), append(_文字列2,R2,L2), assertz((置換述語(L1,R1,Len,L2,R2))), 置換述語の生成([_文字列2|R]). 標準入力を読み込み(Chars) :- get_chars(Chars). '指定された文字列(mainの引数に2個以上与えられる)を検索し、それらの指定文字列が現れた、直後に与えられた引数に置換して'(Chars1,Chars2x) :- findmax([Len,R1,Char2,R2],置換述語(Chars1,R1,Len,Char2,R2),[Lenx,R1x,Char2x,R2x]), '指定された文字列(mainの引数に2個以上与えられる)を検索し、それらの指定文字列が現れた、直後に与えられた引数に置換して'(R1x,R2x). '指定された文字列(mainの引数に2個以上与えられる)を検索し、それらの指定文字列が現れた、直後に与えられた引数に置換して'([A|R1],[A|R2]) :- '指定された文字列(mainの引数に2個以上与えられる)を検索し、それらの指定文字列が現れた、直後に与えられた引数に置換して'(R1,R2). 標準出力する(Chars) :- concat_atom(Chars,Atom), write(Atom). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1284632294/633 # [1]C言語中級 # [2]指定されたフロー構造に基づき次の仕様のプログラムを作成せよ # 仕様: # ★行とは、先頭か最後の区切り子からその次の区切り子までの区切り子を含まない文字列のこと # ただしその次の区切り子が出現しないまま終端した場合は最後の文字列まで # ★区切り子とは、改行文字(0x0A) 復改文字(0x0D),その組み合わせ(0x0D0x0A,0x0A0x0D)のいずれかと # する(混在することを前提) # ★標準入力から任意の長さの文字列を読み取り各行の空白スペースを除く先頭が0〜9からなる # 文字列(これをキー数列と呼ぶ)でその直後が空白、タブで区切られている場合に限りその行を認識する。 # それ以外の形式の場合は認識せず無視する。キー数列の長さが1024を超える場合も無視対象とする。 # ★認識した行はキー数列を10進数の正整数を表すものとして、その順序(小さい順)に # 整列して出力する # フロー構造 # main関数のみで構成。ライブラリ関数はstdio.hで定義されている関数のみを利用可能とする。 # 当然だが記憶領域はキー数列を記憶する領域の3倍程度しか確保できないことを前提 # [3] FreeBSD上でC言語で記述しgccコンパイラで処理する。 # [4] 10/10迄 # '標準入力から任意の長さの文字列を読み取り各行の空白スペースを除く先頭が0〜9からなる文字列(これをキー数列と呼ぶ)でその直後が空白、タブで区切られている場合に限りその行を認識する。' :- get_chars(Chars), 行と認識(Chars,'',_行ならび), sort(_行ならび,_昇順の行ならび), 文字列部分のみ出力(L2). 行と認識([],_行,[[_10進キー数値,_行]]) :- 行検査(_行,_10進キー数値),!. 行と認識([],_行,[]) :- !. 行と認識(['\r','\n'|R],_行,[[_10進キー数値,_行]|R2]) :- 行検査(_行,_10進キー数値), 行と認識(R,'',R2),!. 行と認識(['\n','\r'|R],_行,[[_10進キー数値,_行]|R2]) :- 行検査(_行,_10進キー数値), 行と認識(R,'',R2),!. 行と認識(['\r'|R],_行,[[_10進キー数値,_行]|R2]) :- 行検査(_行,_10進キー数値), 行と認識(R,'',R2),!. 行と認識(['\n'|R],_行,[[_10進キー数値,_行]|R2]) :- 行検査(_行,_10進キー数値), 行と認識(R,'',R2),!. 行と認識([A|R1],_行1,R2) :- \+(member(A,['\n','r'])), atom_concat(_行1,A,_行2), 行と認識(R1,_行2,R2). 行と認識([A|R1],_行1,R2) :- member(A,['\n','\r']), 行と認識(R1,_行1,R2). 文字列部分のみ出力(L) :- append(_,[[_,_行]|R],L), write_formatted('%t\n',[_行]), R = []. 行検査(_行,N) :- 空白・タブを読み飛ばす(_行,_行1), sub_atom(_行1,Len1,1,Len2,A), Len1 =< 1024, member(A,[' ','\t']), sub_atom(_行1,0,Len1,0,B), 全て数字(0,Len1,B), atom_to_chars(B,Bcodes), encode(Bcodes,N). 空白・タブを読み飛ばす(_行,_行1) :- sub_atom(_行,Len,1,Rlen,A), \+(member(A,[' ','\t'])), Len2 is Len + 1, sub_atom(_行,Len2,Rlen,_行1). 全て数字(Len,Len,_) :- !. 全て数字(M,Len,B) :- sub_atom(B,M,1,_,C), member(C,['0','1','2','3','4','5','6','7','8','9']), M2 is M + 1, 全て数字(M2,Len,B). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1268979408/572 # ●正規表現の使用環境 # php5 # # ●検索か置換か? # 置換 # # ●説明 # tableタグ内の改行(<br />)を全て削除したい # # ●対象データ # <table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx"><br /> # <tbody><br /> # <tr><br /> # <td><br /> # </td><br /> # </tr><br /> # </tbody><br /> # </table> # # ●希望する結果 # <table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx"> # <tbody> # <tr> # <td> # </td> # </tr> # </tbody> # </table> # # 'tableタグ内の改行タグを全て削除したい'(_ファイル) :- get_chars(_ファイル,Chars), 'tableタグ内の改行タグを全て削除したい'(Chars,L), put_chars(_ファイル,L). 'tableタグ内の改行タグを全て削除したい'([],[]) :- !. 'tableタグ内の改行タグを全て削除したい'(L1,L2) :- append(L0,[<,t,a,b,l,e,>|R],L1), append(L2,[<,/,t,a,b,l,e,>|R2],R), '改行タグの削除'(L2,L3), 'tableタグ内の改行タグを全て削除したい'(R2,L4), append(L0,[<,t,a,b,l,e,>|L3],L4,L2),!. 'tableタグ内の改行タグを全て削除したい'(L,L). '改行タグの削除'([],[<,/,t,a,b,l,e,>]) :- !. '改行タグの削除'([<,b,r,' ',/,>|R1],R2) :- '改行タグの削除'(R1,R2),!. '改行タグの削除'([A|R1],[A|R2]) :- '改行タグの削除'(R1,R2),!. % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1289913298/10 # [1] 授業単元:情報通信 # [2] 問題文(含コード&リンク): # サーバープログラム(英文清書サーバーの作成) # クライアントから送信された(大文字小文字が乱雑な)英文字文字列を次のように変換して送り返す。 #  分の先頭の文字:大文字 #  分の先頭以外の文字:小文字 #  アルファベット以外:変換しない # 改行、スペース、タブにより単語の区切りとする。また、文末は改行コードではなく、ピリオド"."で判定する。 # ポート番号は1202番 # クライアントから接続されると、[Beautify Server Ready]を送信する。 # "\end"または"\END"を送信すると、[Beautify Server Closed]を送信してコネクションを切断する。 # # このサーバーの目的(英文の清書)の範囲内で、高機能にすること(例えば単独の"I"を大文字にする、連続した空白文字を1つのスペースにする、など)を歓迎する。 # 舫い(1202). 'サーバープログラム(英文清書サーバーの作成)' :- 舫い(_舫い), 接続待ち(_差込み,_舫い), 接続(_差込み,Host,Port2,_新しい差込み,_入力,_出力), get_chars(_入力,_文字s), 文字変換(_文字s,_文字s2), put_list(_出力,_文字s2), 終了(_差込み,_新しい差込み,_入力,_出力),!. 接続待ち(_差込み,_舫い) :- socket(internet, stream, _差込み), socket_bind(_差込み,_舫い), socket_listen(_差込み),!. 接続(_差込み,_クライアント,_新しい舫い,_新しい差込み,_入力,_出力) :- socket_accept(_差込み,_クライアント:_新しい舫い,_新しい差込み), open(_新しい差込み,read,_入力), open(_新しい差込み,write,_出力),!. 文字変換(_文字ならび,_文字ならびの二) :- append(L0,[_文字|R],_文字ならび), 大文字または小文字(_文字), to_upper(_文字,_大文字), 文字変換_2(R,R2), append(L0,[_文字2|R2],_文字ならびの二),!. 文字変換_2(['.'|_],['.']) :- !. 文字変換_2([_文字|R1],[_小文字|R2]) :- to_lower(_文字,_小文字), 文字変換_2(R1,R2). 大文字または小文字(_文字) :- _文字 @>= 'a',char @=< 'z',!. 大文字または小文字(_文字) :- _文字 @>= 'A',char @=< 'Z',!. 終了(_差込み,_新しい差込み,_入力,_出力) :- 掃きだし(_出力), close(_入力), close(_出力), socket_shutdown(_差込み), socket_shutdown(_新しい差込み). 掃きだし(_出力) :- flush_out(_出力). 差込み(A,B,C) :- socket(A,B,C). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1197620454/672 # 入力制限を掛けたいと思っているのですが # #   ̄竸字  # ◆. (ピリオド) #  _ (アンダースコア) # ぁ.丱奪スペース # ァDelete # # のみ入力可能にしたいのですがどの様な正規表現をかけばよいでしょうか? # # ※◆銑イ竜述が分かりません。 # 次の正規表現にどの様に修正を加えればよいでしょうか? # Match result = Regex.Match(対象の文字列,"^[a-zA-Z0-9]+$"); # # 入力制限を掛けたい(_文) :- get_chars(Chars), 入力適合集合(Chars,_適合文字ならび,_不適合文字ならび), concat_atom(適合文字ならび,_文). 入力適合集合([],[],[]) :- !. 入力適合集合([A|R1],[A|R2],R3) :- 入力適合文字(A), 入力適合集合(R1,R2,R3),!. 入力適合集合([A|R1],R2,[A|R3]) :- 入力適合集合(R1,R2,R3). 入力適合文字(A) :- 英数字(A),!. 入力適合文字('.') :- !. 入力適合文字('_') :- !. 入力適合文字('\b') :- !. 入力適合文字(DLE) :- char_code(DLE,127),!. 英数字(A) :- A @>= '0', A @=< '9',!. 英数字(A) :- A @>= 'a', A @=< 'z',!. 英数字(A) :- A @>= 'A', A @=< 'Z',!. % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1289913298/357 # # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # ------------------- # /*hogehoge*/ # int main(){/*ggg*/ # printf("xxxxxx"); # } # int a=c; # ------------------- # 上記のソース総ステップ数5ステップ、実ステップ数3ステップ、 # コメント率40%が求められるステップカウンターを作製せよ。 # また、以下の条件を提示する。 # 1.ディレクトリ単位で読み込めるようにする。 # 2.Cファイルのみのステップ数を求めるようにする。 # ディレクトリ中のCファイル名を取得してそのステップ数を表示する(_ディレクトリ) :- ディレクトリ中のCファイル名を取得する(_ディレクトリ,_Cファイル名ならび), append(_,[_Cファイル名|R],_Cファイル名ならび), ステップ数を計る(_Cファイル名,_総ステップ数,_実ステップ数,_コメント数), write_formatted('ファイル名 : %t, 総ステップ数 : %t, 実ステップ数 : %t, コメント数 : %t\n',[_Cファイル名,_総ステップ数,_実ステップ数,_コメント数]), R = [],!. ディレクトリ中のCファイル名を取得する(_ディレクトリ,_Cファイル名ならび) :- concat_atom(['ls -N _ディレクトリ,'/','*.c'],S), shs(S,_Cファイル名ならび). ステップ数を計る(_Cファイル名,_総ステップ数,_実ステップ数,_コメント数) :- get_chars(_Cファイル名,Chars), ステップ数を計る(Chars,0,0,0,_総ステップ数,_実ステップ数,_コメント数). ステップ数を計る([],_総ステップ数,_実ステップ数,_コメント数,_総ステップ数,_実ステップ数,_コメント数) :- !. ステップ数を計る([''|R],S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数) :- ステップ数を計る(R,S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数),!. ステップ数を計る(['}'|R],S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数) :- ステップ数を計る(R,S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数),!. ステップ数を計る(L,S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数) :- append(L0,['}'|R],L), all(L0,' '), S1_2 is S1 + 1, ステップ数を計る(R,S1_2,S2,S3,_総ステップ数,_実ステップ数,_コメント数). ステップ数を計る(['/','*'|R1],S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数) :- コメント行(R1,R2,S3,S3_2), ステップ数を計る(R2,S1,S2,S3_2,_総ステップ数,_実ステップ数,_コメント数). ステップ数を計る(['\n'|R1],S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数) :- S1_2 is S1 + 1, S2_2 is S2 + 1, ステップ数を計る(R1,S1_2,S2_2,S3,_総ステップ数,_実ステップ数,_コメント数). コメント行(['*','/'|R],R,S3,S3) :- !. コメント行(['\n'|R1],R,S1,S) :- S2 is S3 + 1, コメント行(R1,R,S2,S),!. % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1289913298/525 # [1] 授業単元:情報検索処理 # [2] 問題文(含コード&リンク):以下の仕様を満たすプログラムを作成してください。 # ・文章の書かれたテキストファイルを読み込み、文字列を入力して検索する。 # ・検索した文字列がある箇所全てに対して、その文字列と前後10文字を、検索結果として別のテキストファイルに書き込む。 # '文章の書かれたテキストファイルを読み込み、文字列を入力して検索する。検索した文字列がある箇所全てに対して、その文字列と前後10文字を、検索結果として別のテキストファイルに書き込む。' :- '文章の書かれたテキストファイルを読み込み'(_テキストファイル,Chars), '文字列を入力して'(_検索文字列), atom_chars(_検索文字列,_検索文字ならび), '検索する。検索した文字列がある箇所全てに対して、その文字列と前後10文字を、検索結果として'(Chars,_検索文字ならび,_検索結果ならび), '別のテキストファイルに書き込む'(_出力ファイル,_検索結果ならび). '文章の書かれたテキストファイルを読み込み'(_テキストファイル,Chars) :- get_chars(_テキストファイル,Chars). '文字列を入力して'(_検索文字列) :- write('検索文字列を入力してください : '), get_line(_検索文字列). '検索する。検索した文字列がある箇所全てに対して、その文字列と前後10文字を、検索結果として'(Chars,_検索文字列,_検索した前10文字・後ろ10文字ならび) :- atom_chars(_検索文字列,_検索文字ならび), findall([_位置,_検索文字列,_前10文字,_後10文字],( 検索する(Chars,_検索文字ならび,L0,L1), 検索位置は(L0,_位置), 前10文字(L0,_前10文字), 後10文字(L1,_後10文字)), _検索した前10文字・後ろ10文字ならび). 検索する(Chars,_検索文字ならび,L0,L1) :- append(L0,_検索文字ならび,L1,Chars). 検索位置は(L0,_位置) :- length(L0,Len), _位置 is Len + 1,!. 前10文字(L0,_前10文字) :- length(_前10文字ならび,10), append(_,_前10文字ならび,L0), atom_chars(_前10文字,_前10文字ならび). 後10文字(L0,_後10文字) :- length(_後10文字ならび,10), append(_後10文字ならび,L1). atom_chars(_後10文字,_後10文字ならび),!. '別のテキストファイルに書き込む'(_出力ファイル,_検索結果ならび) :- open(_出力ファイル,write,Outstream), append(_,[[_位置,_検索文字列,_前10文字,_後10文字]|R],_検索結果ならび), write_formatted(Outstream,'%t:%t,%t,%t\n',[_位置,_検索文字列,_前10文字,_後10文字]), R = [], close(Outstream),!. % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1267796762/603 # 【 課題 】http://ime.nu/www.geocities.jp/lang_lang_true/Pp.txt # 【 形態 】 Javaアプリケーション(main()で開始) # 【 期限 】12/8 # 【 Ver  】1.6.0_22 # 【 補足 】伏字がなくなるか、一文字も伏字が起き変わらない入力を6回 # 行うと、ゲームが終了する。という部分を どう作っていいのかわかりません。 #      お願いします。 # 一文字ずつアルファベットを入力していきながら、隠された英単語を推定するゲームのプログラムを # 作成しなさい。 # ・はじめは隠された単語のすべての文字が伏字(*)で表示されている。 # ・一文字を入力すると、その文字がつかわれている単語中のすべての箇所の伏字がその文字に # 置き換えられて表示される。 # ・伏字がなくなるか、一文字も伏字が起き変わらない入力を6回行うと、ゲームが終了する。 一文字ずつアルファベットを入力していきながら、隠された英単語を推定するゲーム(_ファイル) :- get_chars(_ファイル,Chars1), length(Chars1,Len), length(_伏せ字ならび,Len), 伏せ字ならびに英数文字以外を設定する(Chars1,_伏せ字ならび), 伏せ字を表示する(Chars1), '一文字を入力すると、その文字がつかわれている単語中のすべての箇所の伏字がその文字に置き換えられて表示される。'([],Chars1,_伏せ字ならび). '一文字を入力すると、その文字がつかわれている単語中のすべての箇所の伏字がその文字に置き換えられて表示される。'(_,Chars,_伏せ字ならび) :- \+(伏せ字がある(_伏せ字ならぴ)), write('伏せ字がなくなりました。あなたの勝ちです。\n'), concat_atom(Chars,_文字列), write_formatted('文は %t でしたね。\n',[_文字列]),!. '一文字を入力すると、その文字がつかわれている単語中のすべての箇所の伏字がその文字に置き換えられて表示される。'([_,_,_,_,_,_],Chars,_伏せ字ならび) :- write('Game Over!\n'),!. '一文字を入力すると、その文字がつかわれている単語中のすべての箇所の伏字がその文字に置き換えられて表示される。'(Ln,Chars,_伏せ字ならび) :- 伏せ字を表示する(_伏せ字ならび), write(': '), get_char(Char), 伏せ字の置き換え(Char,Chars,_伏せ字ならび), '一文字を入力すると、その文字がつかわれている単語中のすべての箇所の伏字がその文字に置き換えられて表示される。'(Ln,Chars,_伏せ字ならび). '一文字を入力すると、その文字がつかわれている単語中のすべての箇所の伏字がその文字に置き換えられて表示される。'(Ln,Chars,_伏せ字ならび) :- '一文字を入力すると、その文字がつかわれている単語中のすべての箇所の伏字がその文字に置き換えられて表示される。'([_|Ln],Chars,_伏せ字ならび). 伏せ字がある([V|_]) :- var(V),!. 伏せ字がある([_|R]) :- 伏せ字がある(R). 伏せ字の置き換え(Char,[],_) :- !,fail. 伏せ字の置き換え(Char,[Char|R1],[Char|R2]) :- 伏せ字の置き換え(Char,R1,R2),!. 伏せ字の置き換え(Char,[_|R1],[_|R2]) :- 伏せ字の置き換え(Char,R1,R2),!. 伏せ字を表示する([]) :- !. 伏せ字を表示する([V|R]) :- var(V), put_char('*'), 伏せ字を表示する(R),!. 伏せ字を表示する([A|R]) :- put_char(A), 伏せ字を表示する(R),!. 伏せ字ならびに英数文字以外を設定する([],[]) :- !. 伏せ字ならびに英数文字以外を設定する([A|R1],[A|R2]) :- \+((A @>= 'A',A @=< 'Z')), \+((A @>= 'a',A @=< 'z')), \+((A @>= '0',A @=< '9')), 伏せ字ならびに英数文字以外を設定する(R1,R2),!. 伏せ字ならびに英数文字以外を設定する([_|R1],[_|R2]) :- 伏せ字ならびに英数文字以外を設定する(R1,R2),!. % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1268979408/678 # ●正規表現の使用環境 # Devas(ディレクトリ内の再帰検索及び置換ソフトでGrep互換) # # ●検索か置換か? # 検索と置換 # # ●説明 # HTMLのaタグにonclick属性を追加,または追記したい # # ●対象データ # 数百のSmartyテンプレート # (HTMLやフレームワークのコードを含む文字列) # 単純に<a hrefで始まるものばかりではなく,<a class等で始まるものもある # # ●希望する結果 # htmlのaタグから # href="xxxxx-regist"を含んでおり, # かつonclick="xxx"含んでいる または 含んでいないものを検索,置換し # onclickにアクションを追加または追記 # # <a href="xxx-regist" onclick="追加または追記したい"> # # # # 対象ページが数百もあり,とても手作業で修正できないため正規表現の力を借りたいです # aタグはすぐにhrefで始まるものばかりではないため,以下のような正規表現を考えたのですが, # なぜか複数行に渡ってしまう結果が抽出されたりとうまくいきません # # href=".+\-regist".+?(onclick="(.+)")?.+?\n # # # ご教授いただけないでしょうか・・ # # 数百のSmartyテンプレートのonclickタグを追加または変更する(_ファイル名ならび) :- append(_,[_ファイル|R],_ファイル名ならび), 'htmlのaタグからhref="xxxxx-regist"を含んでおり,かつonclick="xxx"含んでいる。または含んでいないものを検索,置換しonclickにアクションを追加または追記'(_ファイル), R = [],!. 'htmlのaタグからhref="xxxxx-regist"を含んでおり,かつonclick="xxx"含んでいる。または含んでいないものを検索,置換しonclickにアクションを追加または追記'(_ファイル) :- get_chars(_ファイル,Chars), 'onclickにアクションを追加または追記'(Chars),!. 'onclickにアクションを追加または追記'(Chars) :- 'aタグを選別'(Chars,L0,R1,R2,_Atag), 'onclick要素候補'(_Atag,_onclick要素候補), 'onclick句の生成'(_onclick要素候補,_onclick句), put_chars(L0), '現在のonclick句の削除'(R1,R11), append(R11,_onclick句,R12), put_chars(['<',a,' '|R12]), put_chars(['<','/',a,'>']), 'onclickにアクションを追加または追記'(R2). 'aタグを選別'(Chars,L0,R1,R2,_Atag) :- append(L0,['<',a,' '|R1],['<','/',a,'>'|R2],Chars), \+(append(_,['<','a',' '|_],R1)), \+(append(_,['<','/',a,'>'|_],R1)), _Atag = ['<',a',' '|R1]. 'onclick要素候補'(_Atag,_onclick要素候補) :- append(L0,[h,r,e,f,'=','"'|_onclick要素候補],['-',r,e,g,i,s,t,'"'|R2],_Atag),!. 'onclick句の生成'(_onclick要素候補,_onclick句) :- append([' ',o,n,c,l,i,c,k,'=','"'|_onclick要素候補],['"',' '],_onclick句). '現在のonclick句の削除'([],[]) :- !. '現在のonclick句の削除'([' ',o,n,c,l,i,c,k,'=','"'|R1],[' '|R2]) :- append(_,['"',' '|R2],R1),!. '現在のonclick句の削除'([A|R1],[A|R2]) :- '現在のonclick句の削除'(R1,R2). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/php/1168450843/63 # <html> # <head> # <title>テスト</title> # </head> # <body> # <!-- ここから --> # あああああああああああ<br /> # あああああああああああ<br /> # あああああああああああ<br /> # あああああああああああ<br /> # あああああああああああ # <!-- ここまで --> # </body> # </html> # # このようなhtmlをPHP5のfile_get_contentsで読み込んで # <!-- ここから -->〜<!-- ここまで -->を取得したいのですが # どうすれば良いですか? # # "/<!-- ここから -->(.*)<!-- ここまで -->/" # で読めませんでした # # 'このようなhtmlをPHP5のfile_get_contentsで読み込んで<!-- ここから -->〜<!-- ここまで -->を取得したい'(_html,_ここから_ここまで) :- get_chars(_html,Chars), append(_,[<,!,-,-,' ',こ,こ,か,ら,' ',-,-,>]|R1],[<,!,-,-,' ',こ,こ,ま,で,' ',-,-,>]|R2],Chars), concat_atom(R1,_ここから_ここまで). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1294061094/230 # [1] 授業単元: プログラミング # [2] 問題文(含コード&リンク): # y.txtというアルファベットしか含まれていない単純なテキストファイルを用意します。 # それをC言語にて読み込んでランレングス圧縮します。 # そしてそれを圧縮したz.txtを新たに作り出します。 # 作成した後、z.txtをもとのy.txtに戻す(復号化)プログラムを作成せよ。 # 'y.txtというアルファベットしか含まれていない単純なテキストファイルを用意します' :- length(L,1000), 'y.txtというアルファベットしか含まれていない単純なテキストファイルを用意します'(L), put_chars('y.txt',L). 'y.txtというアルファベットしか含まれていない単純なテキストファイルを用意します'(L) :- アルファベットしか含まれていない文字列(L1), append(L1,R,L), 'y.txtというアルファベットしか含まれていない単純なテキストファイルを用意します'(R),!. 'y.txtというアルファベットしか含まれていない単純なテキストファイルを用意します'([]) :- !. 'y.txtというアルファベットしか含まれていない単純なテキストファイルを用意します'(L) :- アルファベットしか含まれていない文字列(L1), ならびに書き込む(L1,L), append(L1,R,L), 'y.txtというアルファベットしか含まれていない単純なテキストファイルを用意します'(R),!. ならびに書き込む(L1,L,R) :- append(L1,R,L),!. ならびに書き込む(L,L,[]). アルファベットしか含まれていない連続文字ならび(L) :- Char is (random mod 26) + 65, 連続出現(_連続数), length(_連続文字ならび,_連続数), all(_連続文字ならび,_乱順に選択された), アルファベットしか含まれていない文字列(L2), append(L1,L2,L). 連続出現(_連続数) :- Nth is (random mod 16) + 1, list_nth(Nth,[1,1,1,1,1,1,2,2,2,2,3,3,4,4,4,8],_連続数). それ読み込んでランレングス圧縮します([A|R],L) :- append(L0,[B|R2],[A|R]), \+(A = B), all(L0,A), length(L0,Len), それ読み込んでランレングス圧縮します([B|R2],L2), append(L0,L2,L). それ読み込んでランレングス圧縮します(_,[]) :- !. 'そしてそれを圧縮したz.txtを新たに作り出します'(L) :- put_chars('z.txt',L). '作成した後、z.txtをもとのy.txtに戻す(復号化)' :- get_chars('z.txt',L1), ランレングス復号(L1,L2), put_chars('y.txt',L2). ランレングス復号([],[]) :- !. ランレングス復号([Char,N|R1],L) :- length(L0,N), all(L0,Char), ランレングス復号(R1,L1), appned(L0,L1,L). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1296387672/27 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク):http://ime.nu/codepad.org/zKDn7mD5 # # # 壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁S壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁 # 壁 壁   壁   壁 壁     壁 壁   壁 壁   壁 # 壁 壁 壁壁壁 壁 壁 壁 壁壁壁 壁 壁 壁 壁 壁壁壁 壁 # 壁 壁   壁 壁 壁 壁 壁   壁   壁 壁 壁   壁 # 壁 壁壁壁 壁 壁 壁 壁 壁 壁壁壁 壁壁壁壁壁 壁壁壁 壁 # 壁     壁 壁     壁   壁 壁   壁 壁   壁 # 壁 壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁 壁 壁 壁壁壁 壁壁壁 壁 # 壁     壁   壁   壁 壁 壁     壁 壁   壁 # 壁 壁壁壁壁壁壁壁 壁 壁 壁 壁 壁 壁壁壁壁壁 壁壁壁 壁 # 壁     壁     壁 壁   壁   壁 壁 壁   壁 # 壁壁壁 壁 壁壁壁 壁 壁 壁 壁 壁 壁壁壁 壁 壁壁壁 壁 # 壁   壁 壁   壁 壁 壁 壁 壁     壁 壁   壁 # 壁 壁 壁 壁 壁壁壁 壁 壁 壁 壁壁壁壁壁 壁 壁壁壁 壁 # 壁 壁 壁 壁   壁 壁 壁 壁       壁 壁 壁 壁 # 壁 壁壁壁壁壁壁壁 壁 壁 壁 壁 壁壁壁壁壁 壁 壁 壁 壁 # 壁     壁   壁 壁   壁 壁     壁 壁 壁 壁 # 壁 壁壁壁 壁 壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁 壁 壁 壁 # 壁 壁   壁     壁 壁   壁     壁 壁 壁 壁 # 壁 壁壁壁壁壁 壁 壁 壁 壁壁壁 壁壁壁 壁壁壁 壁 壁 壁 # 壁     壁 壁 壁   壁   壁     壁     壁 # 壁壁壁壁壁 壁 壁壁壁壁壁壁壁 壁 壁 壁 壁壁壁 壁壁壁壁壁 # 壁             壁 壁 壁 壁   壁     壁 # 壁 壁壁壁 壁壁壁壁壁壁壁 壁 壁 壁 壁壁壁壁壁壁壁壁壁 壁 # 壁 壁   壁         壁       壁   壁 壁 # 壁 壁 壁 壁 壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁 壁 壁 # 壁 壁 壁 壁 壁           壁   壁     壁 # 壁 壁 壁 壁 壁 壁壁壁壁壁壁壁 壁 壁 壁 壁壁壁壁壁 壁 # 壁 壁 壁 壁         壁 壁 壁 壁 壁     壁 # 壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁 壁 壁 壁 壁 壁 壁壁壁壁壁 # 壁       壁 壁   壁 壁 壁   壁 壁 壁   壁 # 壁壁壁壁壁壁壁 壁 壁 壁壁壁 壁 壁壁壁 壁 壁 壁壁壁 壁 # 壁               壁 壁   壁 壁 壁 壁 壁 # 壁 壁 壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁 壁 壁 壁 壁 # 壁 壁 壁 壁       壁 壁     壁 壁 壁 壁 壁 # 壁壁壁 壁 壁 壁壁壁 壁 壁 壁 壁壁壁壁壁 壁 壁 壁 壁 # 壁         壁 壁   壁             壁 # 壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁壁G壁 迷路探索(_迷路ファイル,_経路) :- 迷路情報の取得(_迷路ファイル,_迷路情報), Sの位置は(_迷路情報,_行S,_列S), Gの位置は(_迷路情報,_行G,_列G), 迷路探索(_迷路情報,_置換された迷路情報,_行S,_列S,_行G,_列G,[],Log), reverse(Log,Log2), 経路の整理(Log2,_経路). 迷路情報の取得(_迷路ファイル,_迷路情報) :- get_chars(_迷路ファイル,Chars), 改行文字で分割(Chars,_迷路情報),!. Sの位置は(LL1,_行,_列) :- append(L0,[L|_],LL1), length([_|L0],_行), append(L1,[S|_],L), length([_|L1],_列),!. Gの位置は(LL1,_行,_列) :- append(L0,[L|_],LL1), length([_|L0],_行), append(L1,[G|_],L), length([_|L1],_列),!. 改行文字で分割([],[]) :- !. 改行文字で分割(L1,[L0|R2]) :- append(L0,['\n'|R],L1),!, 改行文字で分割(R,R2). 迷路探索(LL1,_行G,_列G,_行G,_列G,Log,Log) :- !. 迷路探索(LL1,_行,_列,Log1,Log) :- append(L0,[L|_],LL1), length([_|L0],_行), append(L1,[A|_],L), length([_|L1],_列), 次の選択(LL1,_行,_列,Log1,_行2,_列2), 迷路探索(LL1,_行2,_列2,_行G,_列G,[[_行,_列,_行2,_列2]|Log1],Log). 次の選択(LL1,_行,_列,Log1,_行2,_列) :- _行2 is _行 + 1, \+(append(_,[[_行2,_列,_行,_列]|_],Log1), \+(append(_,[[_行,_列,_行2,_列]|_],Log1), append(L0,[L|_],LL1), length([_,_|L0],_行), append(L1,[A|_],L), length([_|L1],_列), \+(A = 壁). 次の選択(LL1,_行,_列,Log1,_行2,_列) :- _行2 is _行 - 1, \+(append(_,[[_行2,_列,_行,_列]|_],Log1), \+(append(_,[[_行,_列,_行2,_列]|_],Log1), append(L0,[L|_],LL1), length(L0,_行), append(L1,[A|_],L), length([_|L1],_列), \+(A = 壁). 次の選択(LL1,_行,_列,Log1,_行2,_列) :- _列2 is _列 + 1, \+(append(_,[[_行,_列2,_行,_列]|_],Log1), \+(append(_,[[_行,_列,_行,_列2]|_],Log1), append(L0,[L|_],LL1), length([_|L0],_行), append(L1,[A|_],L), length([_,_|L1],_列), \+(A = 壁). 次の選択(LL1,_行,_列,Log1,_行2,_列) :- _列2 is _列 - 1, \+(append(_,[[_行,_列2,_行,_列]|_],Log1), \+(append(_,[[_行,_列,_行,_列2]|_],Log1), append(L0,[L|_],LL1), length([_|L0],_行), append(L1,[A|_],L), length(L1,_列), \+(A = 壁). 経路の整理([[_行1,_列1,_行2,_列2]],[[行1,_列1],[_行2,_列2]]) :- !. 経路の整理([[_行1,_列1,_行2,_列2]|R1],[[行1,_列1]|R2]) :- !. 経路の整理([R1,R2). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1296387672/349 # [1] 授業単元: データの保存と表示 # [2] 問題文: http://ime.nu/codepad.org/2F3xiVeR # ↑で読み込むファイルに整数がいくつか表示されているので、それらの合計値とデータの中の1の個数を求める処理を追加する # '読み込むファイルに整数がいくつか表示されているので、それらの合計値とデータの中の1の個数を求める'(_ファイル,_合計値,_1の個数) :- get_chars(_ファイル,Chars), concat_atom(Chars,S), split(S,[' ','\n','\t'],L), sum(L,_合計値), count(append(_,[1|_],L),_1の個数). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1305867431/159 # [1] 授業単元: プログラム # [2] 問題文(含コード&リンク): # 英語のテキストデータを入力とし、ファイル内に現れる「単語」(文字列)と # そのカウントをプリントするプログラムを作成せよ。同時に現れた「単語」の総数を # プリントすること。なお、ここで「単語」とはデリミタで区切られるアルファベットだけ # からなる文字列と定義する。「単語」は各データファイルにつき、総単語数は高々2,000単語 # しか現れないと仮定して良い。配列でプログラムする場合、1単語長の最大値を適当に固定して良い。 # # ヒント # デリミタとは、この課題では以下のASCII文字と定義する。 # (a) 制御文字 (iscntrl(c)が1となる文字c) # (b) 数字 (isdigit(c)が1となる文字c) # (c) アルファベット以外の印刷可能文字 (isprint(c)が1で、isalpha(c)が0となる文字c) # '英語のテキストデータを入力とし、ファイル内に現れる「単語」(文字列)とそのカウントをプリントする。同時に現れた「単語」の総数をプリントする'(_ファイル) :- get_chars(_ファイル,Chars), 単語を抽出する(Chars,[],_単語ならび), '「単語」(文字列)とそのカウント'(_単語ならび,_単語とそのカウントならび), 単語とそのカウントをプリントする(_単語とそのカウントならび), 単語の総数(_単語ならび,_単語の総数), 単語の総数をプリントする(_単語の総数). 単語を抽出する([],[],[]) :- !. 単語を抽出する([],L,[_単語]) :- concat_atom(L,_単語),!. 単語を抽出する([_文字|R1],[],R2) :- 'デリミタとは、この課題では以下のASCII文字と定義する'(_文字), 単語を抽出する(R1,[],R2),!. 単語を抽出する([_文字|R1],L1,R2) :- 'デリミタとは、この課題では以下のASCII文字と定義する'(_文字), concat_atom(L1,_単語), 単語を抽出する(R1,[],[_単語|R2]),!. 単語を抽出する([_文字|R1],L1,R2) :- append(L1,[_文字],L2), 単語を抽出する(R1,L2,R2),!. 'デリミタとは、この課題では以下のASCII文字と定義する'(_文字) :- 制御文字(_文字). 'デリミタとは、この課題では以下のASCII文字と定義する'(_文字) :- 数字(_文字). 'デリミタとは、この課題では以下のASCII文字と定義する'(_文字) :- アルファベット以外の印刷可能文字(_文字). 制御文字(_文字) :- char_code(_文字,Char_code), Char_code < 32,!. 数字(_文字) :- append(_,[_文字|_],['0','1','2','3','4','5','6','7','8','9']). アルファベット以外の印刷可能文字(_文字) :- アルファベット以外の(_文字), 印刷可能文字(_文字),!. アルファベット以外の(_文字) :- \+(アルファベット(_文字)). アルファベット(_文字) :- append(_[_文字|_],['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']),!. アルファベット(_文字) :- append(_,[_文字|_],[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]),!. 印刷可能文字(_文字) :- char_code(_文字,Char_code), Char_code >= 32,!. '「単語」(文字列)とそのカウント'(_単語ならび,_単語とそのカウントならび) :- setof(_単語,member(_単語,_単語ならび),_単語ならびのニ), length(_単語ならびのニ,_単語の総数), findall([_単語,_カウント],( append(_,[_単語|_],_単語ならびのニ), count(member(_単語,_単語ならび),_カウント)), _単語とそのカウントならび). 単語とそのカウントをプリントする(_単語とそのカウントならび) :- append(_,[[_単語,_カウント]|R],_単語とそのカウントならび), writef('%t %t\n',[_単語,_カウント]), R = []. 単語の総数(_単語ならび,_単語の総数) :- length(_単語ならび,_単語の総数),!. 単語の総数をプリントする(_単語の総数) :- writef('単語の総数は %t です\n',[_単語の総数]). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1244449887/481 # [1] 授業単元:ソフトウェア演習C # [2] 問題文: # 文書ないのすべての単語とその単語の頻度をメンバとして持つ構造体を定義し、 # この構造体へのポインタをノードの値として持つ二分木のノードを定義せよ # # 次に、任意のノードはその左の部分木にはそのノードの単語より辞書順で # 小さい単語のみがあり、その右の部分木にはより大きい単語のみがあるように # 保持される。 # 新たに単語がすでに木にあるかどうかを探すには、ルート(根元)から出発して # そのノードに格納されている単語と新しい単語を比較する。 # 二つが一致したら、それで良い。 # 新しい単語が木の単語より小さいときは、探索は左の子供に対して続けられ、 # そうでなければ右の子供が調べられる。 # 求める方向に子供がないときは、新しい単語は木の中にはないと言うことであり、 # また実際にはその子供のないところがそれを置く場所である。 # このプロセスは再帰的である必要があり、単語の挿入を行うadd_word()関数を # 定義せよ。 # この関数は再帰的に呼ばれて、左または右の部分木に振り分けられる。 # 単語は木の中の単語と一致する(その場合カウント(頻度)がインクリメントされる)か、 # あるいはノードを作成し、木に加えなければならないことを示すヌル・ポインタと # 出会う。 # 新たにノードが生成されると、この関数ではそのノードへのポインタが返され、 # 親ノードに埋め込まれる。 # この関数を利用し、以下のテキストをコマンド実行時の引数として与えられた # ファイルを入力して二分探索木を生成し、単語と頻度のリストを表示する # プログラムを作成せよ。 # # 文章: ファイル名:test.txt # University was founded in April 1998 at Iwate, # which is situated in the northeastern part of Japan. # University consists of four faculties Software and Information Science, # Nursing, Social Welfare, # and policy Studies, and additionally other educational supporut centers. 'Idによって管理された二分木に情報と頻度を保持する' :- get_chars('test.txt',Chars), split(Chars,[' ',',','.'],WordList), 木作成(WordList). 'Idによって管理された二分木に保持された情報と頻度を昇順表示' :- 二分木から値と頻度を取り出す(1,_頻度付きの値ならび), append(_[[_語,_頻度]|R],_頻度付きの値ならび), write_formatted('語彙=%t,頻度=%t\n',[_語,_頻度]), R = []. 木作成(_ならび) :- abolish(節/5), 節作成(_ならび,1,1,_). 木作成([],_,_,_). 木作成([_値|R],_節,_開始節番号,_次の節番号) :- 節作成(_値,_節,_開始節番号,_受取節番号), 木作成(R,_節,_受取節番号,_次の節番号). 節作成(_値,_節,_受取節番号,_次の節番号) :- not(節(_節,_,_,_,_)), _左 is _受取節番号+1, _右 is _受取節番号+2, _次の節番号 is _受取節番号+3, assertz(節(_節,_左,_右,_値,1)),!. 節作成(_値,_節,_受取節番号,_次の節番号) :- 節(_節,_左,_右,_値2,_), 辞書順語彙比較(<,_値,_値2), 節作成(_値,_左,_受取節番号,_次の節番号). 節作成(_値,_節,_受取節番号,_次の節番号) :- 節(_節,_左,_右,_値2,_), 辞書順語彙比較(>,_値,_値2), 節作成(_値,_右,_受取節番号,_次の節番号). 節作成(_値,_節,_受取節番号,_次の節番号) :- 節(_節,_左,_右,_値2,_頻度), 辞書順語彙比較(=,_値,_値2), _頻度2 is _頻度 + 1, retract(節(_節,_左,_右,_値2,_頻度)), assertz(節(_節,_左,_右,_値2,_頻度2)). 辞書順語彙比較(Functor,_語彙1,_語彙2) :- atom_codes(_語彙1,Codes1), atom_codes(_語彙2,Codes2), 辞書順codes比較(Fuctor,Code1,Codes2),!. 辞書順codes比較((=),[],[]) :- !. 辞書順codes比較((<),[],L) :- !. 辞書順codes比較((>),L,[]) :- !. 辞書順codes比較((<),[A|R1],[B|R2]) :- A >= 65,A =< 90, B >= 97,B =< 122, B >= A + 32,!. 辞書順codes比較((>),[A|R1],[B|R2]) :- A >= 65,A =< 90, B >= 97,B =< 122, B < A + 32,!. 辞書順codes比較((>),[A|R1],[B|R2]) :- A >= 97,A =< 122, B >= 65,B =< 90, A >= B + 32,!. 辞書順codes比較((<),[A|R1],[B|R2]) :- A >= 97,A =< 122, B >= 65,B =< 90, A < B + 32,!. 辞書順codes比較(<,[B|R1],[A|R2]) :- B =< A,!. 辞書順codes比較(>,[B|R1],[A|R2]) :- B > A,!. 辞書順codes比較(P,[A|R1],[A|R2]) :- 辞書順codes比較(P,R1,R2). 二分木から値と頻度を取り出す(_節,_頻度付きの値ならび) :- findall([_値,頻度],二分木から値と頻度を取り出す(_節,_,_値,_,_頻度),_頻度付きの値ならび). 二分木から値と頻度を取り出す(_節,_値1,_値,_頻度1,_頻度) :- 節(_節,_左,_,_値2,_,_頻度2), 二分木から値と頻度を取り出す(_左,_値2,_値,_頻度2,_頻度). 二分木から値と頻度を取り出す(_節,_値1,_値,_頻度1,_頻度) :- 節(_節,_,_右,_値2,_頻度2), 二分木から値と頻度を取り出す(_右,_,_値,_,_頻度). 二分木から値と頻度を取り出す(_節,_値1,_値,_頻度1,_頻度) :- not(var(_値1)), not(var(_頻度1)), _値1=_値, _頻度1=_頻度. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 区切り語ならびの変形(_区切り語ならび,_降順の区切り文字ならびのならび) :- sort(_区切り語ならび,_昇順の区切り語ならび), reverse(_昇順の区切り語ならび,_降順の区切り語ならび), atomList2charsList(_降順の区切り語ならび,_降順の区切り文字ならびのならび). atomList2charsList([],[]) :- !. atomList2charsList([A|R1],[L|R2]) :- atom_chars(A,L), atomList2charsList(R1,R2). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1307166756/264 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # ファイルlist0602_03.txtを読み込み、1行30文字に整形してファイル出力するプログラムkadai03.cを作成せよ。 # 'ファイルlist0602_03.txtを読み込み、1行30文字に整形してファイル出力する'(_出力ファイル) :- 'ファイルlist0602_03.txtを読み込み'(Chars), '1行30文字に整形して'(Chars,L), ファイル出力する(_ファイル,L),!. 'ファイルlist0602_03.txtを読み込み'(Chars) :- get_chars('list0602_03.txt',Chars). '1行30文字に整形して'([],[]) :- !. '1行30文字に整形して'(Chars,[S|R2]) :- length(L0,30), append(L0,R1,Chars), concat_atom(L0,S), '1行30文字に整形して'(R1,R2),!. '1行30文字に整形して'(L,[S]) :- concat_atom(L,S). ファイル出力する(_ファイル,L) :- open(_ファイル,write,Outstream), append(_,[Line|R],L), writef(Outstream,'%t\n',[Line]), R = [], close(Outstream),!. % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1307166756/313 # [1] 授業単元: Cプログラミング # [2] 問題文(含コード&リンク): ファイル ”test.txt”から文字列を読み込み、並びを逆にしてファイル ”sample.txt”に出力するプログラムを作成せよ。 # # 'ファイル ”test.txt”から文字列を読み込み、並びを逆にしてファイル ”sample.txt”に出力する' :- get_chars('test.txt',Chars), reverse(Chars,Chars2), put_chars('sample.txt',Chars2). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1307166756/341 # [よろしくお願いします・・(´・ω・`) # # 1] 授業単元: プログラミング # [2] 問題文(含コード&リンク): # 整数aとbを入力すると、mylife.txt という名前のファイルを作り、その中にa+bの計算結果を記録する処理と、 # 続いてそのファイルを開いてデータを読み込み、ディスプレイ上に表示する処理をするプログラムを作りなさい。 # (実行後mylife.txt の中身は # # 126 # # とだけ書かれている) # # http://ime.nu/uproda.2ch-library.com/387865yc9/lib387865.jpg # 実行例です。 # # http://ime.nu/uproda.2ch-library.com/387863Wqm/lib387863.jpg # ここまで出来て居ます # '整数aとbを入力すると、mylife.txt という名前のファイルを作り、その中にa+bの計算結果を記録する処理と、続いてそのファイルを開いてデータを読み込み、ディスプレイ上に表示する処理をする' :- '整数aとbを入力すると、mylife.txt という名前のファイルを作り、その中にa+bの計算結果を記録する', 続いて, _そのファイル = 'mylife.txt', そのファイルを開いてデータを読み込み、ディスプレイ上に表示する(_そのファイル). '整数aとbを入力すると、mylife.txt という名前のファイルを作り、その中にa+bの計算結果を記録する' :- 整数aとbを入力すると(_a,_b), 'mylife.txt という名前のファイルを作り'(Outstream), 'a+bの計算結果を'(_a,_b,_計算結果), 記録する(Outstream). 整数aとbを入力すると(_a,_b) :- 整数aを入力する(_a), 整数bを入力する(_b). 整数aを入力する(_a) :- write('整数を入力してください : '), get_integer(_a). 整数bを入力する(_b) :- write('整数を入力してください : '), get_integer(_b). 'mylife.txt という名前のファイルを作り'(Outstream) :- open('mylife.txt',write,Outstream),!. 'a+bの計算結果を'(_a,_b,_計算結果) :- _計算結果 is _a + _b. 記録する(Outstream,_計算結果) :- writef(Outstream,'%t\n',[_計算結果]), close(Outstream). 続いて :- true. そのファイルを開いてデータを読み込み、ディスプレイ上に表示する(_そのファイル) :- そのファイルを開いて(_そのファイル,Instream), データを読み込み(Instream,_データ), ディスプレイ上に表示する(Instream,_データ). そのファイルを開いて(_そのファイル,Instream) :- open(_そのファイル,read,Instream). データを読み込み(Instream,_データ) :- get_lines(Instream,_データ), close(Instream). ディスプレイ上に表示する(_データ) :- put_lines(_データ). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% get_lines(Stream,Lines) :- is_stream(Stream), get_chars(Stream,Chars), chars_lines(Chars,Lines),!. get_lines(File,Lines) :- atom(File), exitst(File,read), get_chars(File,L), chars_lines(L,Lines),!. get_chars(Input,end_of_file,[]) :- !. get_chars(Input,X,[X|R]) :- get_char(Input,Y), get_chars(Input,Y,R). get_chars(File,L) :- \+(is_stream(_,File,_)), slush_op(File,File_1), exists(File_1,read), open(File_1,read,Input), get_char(Input,X), get_chars(Input,X,L), close(Input),!. get_chars(Input,L) :- is_stream(_,Input,_), get_char(Input,X), get_chars(Input,X,L),!. % *** user: chars_lines / 3 *** chars_lines([],[],[]) :- !. chars_lines(['\r'],[],[]) :- !. chars_lines(['\r',A|R],[],[A|R]) :- \+(A = '\n'),!. chars_lines(['\r','\n'|R],[],R) :- !. chars_lines(['\n'|R],[],R) :- !. chars_lines([A|R1],[A|R2],Z) :- chars_lines(R1,R2,Z). % *** user: chars_lines / 2 *** chars_lines([],[]) :- !. chars_lines(L,[A|R2]) :- chars_lines(L,U,R), concat_atom(U,A), chars_lines(R,R2). % *** user: put_lines / 2 *** put_lines(_,[]) :- !. put_lines(Output,[Line|R]) :- is_stream(Output), write(Output,Line), write(Output,'\n'), put_lines(Output,R),!. put_lines(File,L) :- \+(is_stream(File)), open(File,write,Output), put_lines(Output,L), close(Output),!. % *** user: put_lines / 1 *** put_lines(Lines) :- append(_,[Line|R],Lines), write_formatted('%t\n',[Line]), R = [],!. % *** user: get_integer / 2 *** get_integer(Input,N) :- get_line(Input,Line), get_integer_1(Input,Line,N),!. % *** user: get_integer / 1 *** get_integer(N) :- get_line(Line), get_integer_1(Line,N),!. % *** user: get_integer_1 / 3 *** get_integer_1(_,end_of_file,_) :- !, fail. get_integer_1(Input,Line,N) :- atom_to_term(Line,N,_), integer(N),!. get_integer_1(Input,_,N) :- get_line(Input,Line), get_integer_1(Input,Line,N) . % *** user: get_integer_1 / 2 *** get_integer_1(end_of_file,_) :- !,fail. get_integer_1(Line,N) :- atom_to_term(Line,N,_), integer(N),!. get_integer_1(_,N) :- get_line(Line), get_integer_1(Line,N). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1307166756/543 # どなたかお願致します。(問題文にある ”状態遷移図を作れ” は無視してもらって結構です) # # [1] 授業単元: ソフトウェア設計法 # [2] 問題文 # # Cのソ-スプログラムを読んで、コメント(/* と */で囲まれた文字列)だけを取り出すプログラムの状態遷移図 # を作れ。このとき、文字列(" と "で囲まれた文字列)中の/* や */はコメントにならないことに注意すること。 # さらに、コメント中の文字列は文字列にならない。この状態遷移図をもとに、制御のデータ化を使ったプログラムを作れ。 # # ※実行例、図などは記載されていませんでした # 'Cのソ-スプログラムを読んで、コメント(/* と */で囲まれた文字列)だけを取り出す。このとき、文字列(" と "で囲まれた文字列)中の/* や */はコメントにならないことに注意すること。さらに、コメント中の文字列は文字列にならない。'(File) :- get_chars(File,Chars), 'コメント(/* と */で囲まれた文字列)だけを取り出す'(Chars,_コメントならび). 'コメント(/* と */で囲まれた文字列)だけを取り出す'([],[]) :- !. 'コメント(/* と */で囲まれた文字列)だけを取り出す'(['/','*'|R1],[_コメント|R2]) :- append(L0,['*','/'|R3],R1), \+(append(_,['*','/'|_],L0)), \+(append(_,['/','*'|_],L0)), concat_atom(L0,_コメント), 'コメント(/* と */で囲まれた文字列)だけを取り出す'(R3,R2),!. 'コメント(/* と */で囲まれた文字列)だけを取り出す'(['"'|R1],R2) :- append(L0,['"'|R3],R1), \+(append(_,['"'|_],L0)), 'コメント(/* と */で囲まれた文字列)だけを取り出す'(R3,R2). 'コメント(/* と */で囲まれた文字列)だけを取り出す'([_|R1],R2) :- 'コメント(/* と */で囲まれた文字列)だけを取り出す'(R1,R2). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1307166756/670 # 問題 # 入力ファイル中のアルファベット各文字の個数を数えるプログラムを作成せよ。(大文字と小文字は合わせて数える) # スペースや記号、数字などは数えない。 # # そして、結果を文字数の多い順にソートして出力せよ。 # # コンパイラ # gcc # # 期限 # 2011/6/18 # '入力ファイル中のアルファベット各文字の個数を数えるプログラムを作成せよ。(大文字と小文字は合わせて数える)スペースや記号、数字などは数えない。そして、結果を文字数の多い順にソートして出力する'(_入力ファイル) :- get_chars(_入力ファイル,Chars), setof([_大文字/_小文字],( アルファベットを大文字小文字対にする(Chars,_大文字/_小文字)), L1), findall([Count,_大文字/_小文字],( append(_,[_大文字/_小文字|_],L1), 大文字と小文字の数は合わせる(Chars,_大文字,_小文字Count)), L2), 文字数の多い順にソートして出力する(L2). ファイルに現れるアルファベットを大文字小文字対にする(Chars,_大文字/_小文字) :- member(Char,Chars), アルファベット(Char), to_upper(Char,_大文字), to_lower(Char1,_小文字). 大文字と小文字の数は合わせる(Chars,_大文字,_小文字,Count) :- count(member(_大文字,Chars),Count1), count(member(_小文字,Chars),Count2), Count is Count1 + Count2,!. 文字数の多い順にソートして出力せよ(L2) :- sort(L2,L3), reverse(L3,L), append(_,[Count,A/B]|R],L), writef('%t/%t, %t個\n',[A,B,Count]), R = []. アルファベット(A) :- A @>= 'A', A @=< 'Z',!. アルファベット(A) :- A @>= 'a', A @=< 'z',!. % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1307166756/843 # [1] 授業単元:文字列 # [2] 問題文(含コード&リンク): # ファイルinput.txtに、1行最大80文字で空白を挟みながら、英数字が記載されている。 # このinput.txtを読み込み、その中に含まれるアルファベット・数字の各文字が何文字ずつあるかを表示するプログラムを作りなさい # 'ファイルinput.txtに、1行最大80文字で空白を挟みながら、英数字が記載されている。このinput.txtを読み込み、その中に含まれるアルファベット・数字の各文字が何文字ずつあるかを表示する' :- 'このinput.txtを読み込み'(Chars), 'その中に含まれるアルファベット・数字の各文字が何文字ずつあるか'(Chars,L), 表示する(L). 'このinput.txtを読み込み'(Chars) :- get_chars('input.txt',Chars),!. その中に含まれるアルファベット・数字の各文字が何文字ずつあるか(Chars,L) :- 'アルファベット・数字'(Alphabets), setof(Char,( member(Char,Chars), member(Char,Alphabets)), L1), findall([Char,Count],( member(Char,L1), count(member(Char,Chars),Count)), L),!. 表示する(L) :- append(_,[[_文字,_出現数]|R],L), writef('文字 %t %t回\n',[_文字,_出現数]), R = []. 'アルファベット・数字'(Chars) :- findall(Char1,( for(65,N1,90), char_code(Char1,N1)), L1), findall(Char2,( for(97,N2,122), char_code(Char2,N1)), L2), findall(Char3,( for(48,N3,57), char_code(Char3,N3)), L3), append(L1,L2,L4), append(L4,L3,Chars),!. % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1307166756/904 # [1] 授業単元:C # [2] 問題文(含コード&リンク): # strlen()を利用し、ファイルinput.txtには、複数の英単語のみが(改行を挟みながら)記載されている。 # input.txtをEOFまで読み込み、何文字の単語が何個あったのかを表示するプログラムを作成しなさい。このとき、1行には最大80字記載されており、1単語の最大の文字数は15とする。 # 例) # 1文字の単語: 20単語 # 3文字の単語: 10単語 # 8文字の単語: 4単語 # 全34単語 # # 'input.txtをEOFまで読み込み、何文字の単語が何個あったのかを表示する' :- get_chars('input.txt',Chars), 英単語ならびを得る(Chars,LL1), sort(LL1,LL2), 何文字の単語が何個あったのかを表示する(LL2). 英単語ならびを得る(Chars,LL) :- findall([Len,L],( 空白または改行で区切る(Chars,L), length(L,Len)), LL). 空白または改行で区切る(Chars,L0) :- append(L0,[A|R],Chars), 空白または改行(A). 空白または改行で区切る(Chars,L) :- append(L0,[A|R],Chars), 空白または改行(A), 空白または改行で区切る(R,L). 空白または改行で区切る(L,L). 空白または改行(' '). 空白または改行('\n'). 何文字の単語が何個あったのかを表示する(LL) :- 何文字の単語が何個あったのか(LL,LL2), 全単語数を集計する(LL2,_全単語数), 表示する(LL2,_全単語数). 何文字の単語が何個あったのかを表示する(LL,[[_文字数,_個数]|R2]) :- append(L0,[[_文字数,L1]|R1],LL), \+(append(_,[[_文字数,_]|_],L0)), all(L0,[_文字数0,_]), length(L0,_個数), 何文字の単語が何個あったのかを表示する([[_文字数,L1]|R1],R2). 何文字の単語が何個あったのかを表示する([[_文字数,_]|R1],[[_文字数,_個数]]) :- length([[_文字数,_]|R1],_個数). 全単語数を集計する(LL,_全単語数) :- findsum(_単語数,( append(_,[[_,_単語数]|_],LL)), _全単語数の一), _全単語数 is truncate(_全単語数の一). 表示する(LL,_全単語数) :- append(_,[[_文字数,_何個]|R],LL), writef('%t文字の単語: %t単語\n',[_文字数,_何個]), R = [], writef('全%t単語\n',[_全単語数]),!. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% count(P,N) :- findsum(1,P,F), N is truncate(F). findsum(_選択項,_項,_合計値) :- findall(_選択項,_項,_値ならび), sum(_値ならび,_合計値),!. sum([],0) :- !. sum([N|R],X) :- sum(R,Y), X is N + Y. % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1307166756/908 # [1] 授業単元:C # [2] 問題文(含コード&リンク): # strcmp()を利用し、../test/read.cgi/tech/1307166756/904で利用したものと同様のimput.txtを読み込む。 # キーボードから英単語を1つ入力し、その単語が、input.txtに何個含まれるかを出力するプログラムを作成しなさい。 # 'キーボードから英単語を1つ入力し、その単語が、input.txtに何個含まれるかを出力する' :- 'キーボードから英単語を1つ入力し'(_英単語), 'その単語が、input.txtに何個含まれるかを出力する'(_英単語). 'キーボードから英単語を1つ入力し'(_英単語) :- get_line(_英単語). 'その単語が、input.txtに何個含まれるかを出力する'(_英単語) :- 'その単語が、input.txtに何個含まれるか'(_英単語,_何個), 出力する(_英単語,_何個). 'その単語が、input.txtに何個含まれるか'(_英単語,_何個) :- get_chars('input.txt',Chars), concat_atom(Chars,S), split(S,[' ','\n'],_単語ならび), count(member(_英単語,_単語ならび),_何個). 出力する(_英単語,_何個) :- writef('単語 %t は %t個あります。\n',[_英単語,_何個]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% count(P,N) :- findsum(1,P,F), N is truncate(F). findsum(_選択項,_項,_合計値) :- findall(_選択項,_項,_値ならび), sum(_値ならび,_合計値),!. sum([],0) :- !. sum([N|R],X) :- sum(R,Y), X is N + Y. % split/3の定義 % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1308749241/434 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク): http://codepad.org/FYsQ9RGx # # 13-1 標準入出力 # # 標準入力を標準出力する簡易catコマンドを作成せよ. # # $ cat sample.txt # 1. Software Engineering # # Based on the tenets of software engineering and computing science, # the Department of Software Engineering provides students with # a comprehensive grounding in software development and information # processing. As society becomes increasingly dependent on various # ... 略 ... # # $ ./ex1301-10se000 < sample.txt > sample-out.txt # $ cat sample-out.txt # 1. Software Engineering # # Based on the tenets of software engineering and computing science, # the Department of Software Engineering provides students with # a comprehensive grounding in software development and information # processing. As society becomes increasingly dependent on various # ... 略 ... # # sample.txtをダウンロードしてデバッグに使用すると良い. # 標準入力のファイルポインタはstdinである.p.222の「標準入力と標準出力」を参照.p.153の関数getchar(), putchar()を用いるのもよい. # 13-2 ファイル入出力 # # ファイルを読み込んで,ファイル中の英小文字を英大文字に,英大文字を英小文字に変換してファイルに書き出すプログラムを作成せよ. # # $ cat sample.txt # 1. Software Engineering # # Based on the tenets of software engineering and computing science, # the Department of Software Engineering provides students with # a comprehensive grounding in software development and information # processing. As society becomes increasingly dependent on various # ... 略 ... # # $ ./ex1303-10se000 # 入力ファイル名 > sample.txt # 出力ファイル名 > sample-out.txt # $ cat sample-out.txt # 1. sOFTWARE eNGINEERING # # bASED ON THE TENETS OF SOFTWARE ENGINEERING AND COMPUTING SCIENCE, # THE dEPARTMENT OF sOFTWARE eNGINEERING PROVIDES STUDENTS WITH # A COMPREHENSIVE GROUNDING IN SOFTWARE DEVELOPMENT AND INFORMATION # PROCESSING. aS SOCIETY BECOMES INCREASINGLY DEPENDENT ON VARIOUS # ... 略 ... # # 13-3 ファイル入力.コマンドライン入力 # # 行数,単語数,バイト数,ファイル名を以下の様に出力するような簡易wcを作成せよ.オプションは指定できなくても良い. # # $ ./ex1303-10se000 sample.txt # 33 230 1674 sample.txt # $ wc sample.txt # 33 230 1674 sample.txt # # 行数,単語数,バイト数は,(C言語の)整数で表せる大きさであると仮定して良い.本問題における「単語」は,コマンドwcにおける定義で考えよ.コマンド wc は man wc で調べることができる. # 13-4 ファイル入力,コマンドライン入力 # # 第2引数で示された(単一の)ファイル内において第1引数の単語が出現する行をすべて出力するプログラムを作成せよ. # # $ ./ex1304-10se000 Software sample.txt # 1. Software Engineering # the Department of Software Engineering provides students with # $ grep Software sample.txt # 1. Software Engineering # the Department of Software Engineering provides students with '行数,単語数,バイト数,ファイル名を以下の様に出力する' :- user_parameters([wc,_ファイル名]), get_chars(_ファイル名,Chars), length(Chars,_バイト数), '行数,単語数'(Chars,_行数,_単語数), writef('%t %t %t %t\n',[_行数,_単語数,_バイト数,_ファイル名]),!. '行数,単語数'([],[],0,0) :- !. '行数,単語数'(['\n'|R1],[],_行数,_単語数) :- '行数,単語数'(R1,W,_行数_1,_単語数_1), 単語数加算(W,_単語数_1,_単語数), _行数 is _行数_1 + 1,!. '行数,単語数'([C|R1],[],_行数,_単語数) :- member(C,[' ',' ',',','.']), '行数,単語数'(R1,W,_行数,_単語数_1), 単語数加算(W,_単語数_1,_単語数),!. '行数,単語数'([C|R1],[C|R2],_行数,_単語数) :- \+(member(C,[' ',' ',',','.'])), '行数,単語数'(R1,R2,_行数,_単語数). 単語数加算([],_単語数,単語数) :- !. 単語数加算([_|_],_単語数_1,単語数) :- _単語数 is _単語数_1 + 1,!. % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1308749241/834 # 【質問テンプレ】 # [1] 授業単元:プログラミング演習 # [2] 問題文:標準入力に現れた数字文字の出現回数を*を使って # 数字の下側に表示するプログラムを作成せよ。 # http://codepad.org/T7Ft26pn # 上記のソースコードを元にして作成していただきたいです。 # # '標準入力に現れた数字文字の出現回数を*を使って数字の下側に表示する' :- 'EOFになるまで標準入力から入力する'(_文字ならび), 現れた数字文字の出現回数(_文字ならび,[],_数字文字の出現回数ならび), '*を使って数字の下側に表示する'(_数字文字の出現回数ならび). 'EOFになるまで標準入力から入力する'(_文字ならび) :- get_chars(_文字ならび). 現れた数字文字の出現回数([],_数字文字の出現回数ならび,_数字文字の出現回数ならび). 現れた数字文字の出現回数([_文字|R],_数字文字の出現回数ならび,_数字文字の出現回数ならび) :- _文字 @>= '0', _文字 @=< '9', 数字文字の出現回数更新(_文字,_数字文字の出現回数ならび1,_数字文字の出現回数ならび2), 現れた数字文字の出現回数(R,[C_数字文字の出現回数ならび2,_数字文字の出現回数ならび). 現れた数字文字の出現回数(R,_数字文字の出現回数ならび1,_数字文字の出現回数ならび) :- \+((_文字 @>= '0',_文字 @=< '9')), 現れた数字文字の出現回数(R,_数字文字の出現回数ならび1,_数字文字の出現回数ならび). 数字文字の出現回数更新(_文字,[],[[_文字,1]]) :- _文字 @>= '0', _文字 @=< '9',!. 数字文字の出現回数更新(_文字,[[_文字,_出現回数1]|R1],[[_文字,_出現回数2]|R2]) :- _文字 @>= '0', _文字 @=< '9', _出現回数2 is _出現回数 + 1, 数字文字の出現回数更新(_文字,R1,R2),!. '*を使って数字の下側に表示する'(_) :- び2,_数字文字の出現回数ならび). 現れた数字文字の出現回数(R,_数字文字の出現回数ならび1,_数字文字の出現回数ならび) :- \+((_文字 @>= '0',_文字 @=< '9')), 現れた数字文字の出現回数(R,_数字文字の出現回数ならび1,_数字文字の出現回数ならび). 数字文字の出現回数更新(_文字,[],[[_文字,1]]) :- _文字 @>= '0', _文字 @=< '9',!. 数字文字の出現回数更新(_文字,[[_文字,_出現回数1]|R1],[[_文字,_出現回数2]|R2]) :- _文字 @>= '0', _文字 @=< '9', _出現回数2 is _出現回数 + 1, 数字文字の出現回数更新(_文字,R1,R2),!. '*を使って数字の下側に表示する'(_数字文字の出現回数ならび) :- 転置(_数字文字の出現回数ならび,_転置された数字文字の出現回数ならび). _転置された数字文字の出現回数ならび = [_第一行数字文字ならび|R], concat_atom(_第一行数字文字ならび,_第一行文字列), writef('%t\n',[_第一行文字列]), max(R,Max), '*を使って数字の下側に表示する'(1,Max,R). '*を使って数字の下側に表示する'(N,Max,_) :- N > Max,!.). '*を使って数字の下側に表示する'(N,L) :- 一行星か空白の印字(N,L), write('\n'), N2 is N + 1, '*を使って数字の下側に表示する'(N2,L). 一行星か空白の印字(N,L) :- append(_,[M|R],L), 星か空白か(M,N,_印字文字), writef('%t',[_印字文字]), R = [],!. 星か空白か(M,N,*) :- M >= N,!. 星か空白か(M,N,' ') :- M < N,!. % 以下のサイトは # # 行読み込み述語 get_line/2,get_line/1 です。 # ここでの焦点は改行なしにいきなりEOFが来た時の処理。 # at_end_of_stream で処理をするのですが、最後の文字として、 # 改行があったのかどうかを返すことはできません。 # % % get_chars/2 : get_chars(_ファイル,_文字リスト) % ファイル全体をリストとして取得します % get_chars(File,Chars) :- open(File,read,Instream), get_chars_1(Instream,Chars), close(Instream). get_chars_1(Instream,[]) :- at_end_of_stream(Instream),!. get_chars_1(Instream,[Char|R]) :- get_char(Instream,Char), get_chars_1(Instream,R). % % get_lines/2 : get_lines(_ファイル名,_行リスト) % ファイル全体を行のリストとして取得します % 第一引数はストリームではなくファイルです % get_lines(File,Lines) :- open(File,read,Instream), get_lines_1(Instream,Lines), close(Instream). get_lines_1(Instream,[]) :- at_end_of_stream(Instream),!. get_lines_1(Instream,[Line|R]) :- get_line(Instream,Line), get_lines_1(Instream,R). % % get_line/2 : get_line(_ストリーム,_行) % 改行がくるまで、アトムとして取得します % get_line(Stream,end_of_file) :- at_end_of_stream(Stream),!. get_line(Stream,X) :- get_char(Stream,C), get_line_1(Stream,C,Chars), atom_chars(X,Chars). get_line_1(Stream,C,[C]) :- at_end_of_stream(Stream),!. get_line_1(Stream,'\n',[]) :- !. get_line_1(Stream,C,[C|R]) :- get_char(Stream,C2), get_line_1(Stream,C2,R). % % 標準入力の場合。 % get_line(X) :- current_input(Stream), get_line(Stream,X). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1317249060/329 # txtファイルの中の任意の場所に文字を書き込む方法はありませんか? # # 例えば下の「とまと」と「だいすき」の間に「も」を入れて # 「とまともだいすき」にしたりとかです。 # # /**********test.txt*********** # はんばーぐおいしい # とまとだいすき # ****************************/ # # 'txtファイルの中の任意の場所に文字を書き込む'(_txtファイル) :- get_chars(_txtファイル,Chars), '「とまと」と「だいすき」の間に「も」を入れる'(Chars,Chars2), put_chars(_txtファイル,Chars2). '「とまと」と「だいすき」の間に「も」を入れる'([],[]) :- !. '「とまと」と「だいすき」の間に「も」を入れる'([と,ま,と,だ,い,す,き|R1],[と,ま,と,も,だ,い,す,き|R2]) :- '「とまと」と「だいすき」の間に「も」を入れる'(R1,R2),!. '「とまと」と「だいすき」の間に「も」を入れる'([A|R1],[A|R2]) :- '「とまと」と「だいすき」の間に「も」を入れる'(R1,R2). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1312201995/665 # [1] 元:P入門 [2] 文 # # 数字が書かれているtxtFからそれを読み込んで # 別のtxtFに出力するCPを作成せよ。 # 入出力Fはコマンドラインから任意で指定すること。 # # 数字のみを標準出力するCPを入力Fとして、txtFに # その結果を出力するCPを作れ。 # 入力、出力Fはコマンドラインから任意に指定すること。 # '数字が書かれているtxtFからそれを読み込んで別のtxtFに出力するCPを作成せよ。入出力Fはコマンドラインから任意で指定すること' :- user_parameters([_txtF_In,_txtF_Out]), get_chars(_txtF_In,Chars), put_chars(_txtF_Out,Chars). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1276873238/575 # 学校で宿題が出ました、助けて下さい>< # 実行すると下記のような動作をするバッチファイルスクリプトを作成したいです。 # よろしくお願いいたします。 # # 実行するバッチファイルが現在存在するディレクトリにある全てのテキストファイルを書き換えるバッチを作成しなさい。 # テキストファイルの中に、pass = "C:\Users\users\Documents\workspace\test.txt"というような # パスを変数に代入する記述があった場合 # そのパスの部分を、pass = "現在のバッチファイルの存在するディレクトリ\test.txt" # という風にディレクトリ名だけを(ファイル名は書き換えない)書き換えるバッチを作成しなさい。 # '実行するバッチファイルが現在存在するディレクトリにある全てのテキストファイルを書き換えるバッチを作成しなさい。テキストファイルの中に、pass = /Users/users/Documents/workspace/test.txt"というようなパスを変数に代入する記述があった場合そのパスの部分を、pass = "現在のバッチファイルの存在するディレクトリ/test.txt"という風にディレクトリ名だけを(ファイル名は書き換えない)書き換えるバッチを作成しなさい。'(_テキストファイル) :- pwd(CWDIR), get_chars(_テキストファイル,Chars_1), 'ディレクトリ名だけを(ファイル名は書き換えない)書き換える'(CWDIR,Chars_1,Chars_2), put_chars(_テキストファイル,Chars_2). 'ディレクトリ名だけを(ファイル名は書き換えない)書き換える'(CWDIR,Chars_1,Chars_2) :- atom_chars(CWDIR,CWDIRL), パス部分を現在のディレクトリに置換する(CWDIRL,_chars_1,_前部分,_置換_後部分), 'ディレクトリ名だけを(ファイル名は書き換えない)書き換える'(CWDIR,_後部分,Chars_2_2), append(_前部分,_置換された部分,Chars_2_2,_Chars_2). 'ディレクトリ名だけを(ファイル名は書き換えない)書き換える'(CWDIR,Chars,Chars). パス部分を現在のディレクトリに置換する(Chars_1,_前部分,_置換された部分,_後部分) :- パス部分(_パス部分,_実質パス部分), append(_前部分,_パス部分,_後部分,Chars_1), ファイル部分(_実質パス部分,_ファイル部分), append([p,a,s,s,' ',=,' ','"'|CWDIRL],[/|_ファイル部分],['"'],_置換された部分),!. パス部分([p,a,s,s,' ',=,' ','"'|R],_実質パス部分) :- append(_実質パス部分,['"'],R), \+(member('"',_実質パス部分)),!. ファイル部分(_実質パス部分,_ファイル部分) :- append(_,[/|_ファイル部分],_実質パス部分), \+(member(/,_ファイル部分)),!. % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1276873238/575 # 学校で宿題が出ました、助けて下さい>< # 実行すると下記のような動作をするバッチファイルスクリプトを作成したいです。 # よろしくお願いいたします。 # # 実行するバッチファイルが現在存在するディレクトリにある全てのテキストファイルを書き換えるバッチを作成しなさい。 # テキストファイルの中に、pass = "C:\Users\users\Documents\workspace\test.txt"というような # パスを変数に代入する記述があった場合 # そのパスの部分を、pass = "現在のバッチファイルの存在するディレクトリ\test.txt" # という風にディレクトリ名だけを(ファイル名は書き換えない)書き換えるバッチを作成しなさい。 # '実行するバッチファイルが現在存在するディレクトリにある全てのテキストファイルを書き換えるバッチを作成しなさい。テキストファイルの中に、pass = /Users/users/Documents/workspace/test.txt"というようなパスを変数に代入する記述があった場合そのパスの部分を、pass = "現在のバッチファイルの存在するディレクトリ/test.txt"という風にディレクトリ名だけを(ファイル名は書き換えない)書き換えるバッチを作成しなさい。'(_テキストファイル) :- pwd(CWDIR), get_chars(_テキストファイル,Chars_1), 'ディレクトリ名だけを(ファイル名は書き換えない)書き換える'(CWDIR,Chars_1,Chars_2), put_chars(_テキストファイル,Chars_2). 'ディレクトリ名だけを(ファイル名は書き換えない)書き換える'(CWDIR,Chars_1,Chars_2) :- atom_chars(CWDIR,CWDIRL), search_part_list(Chars_1,[<,p,a,s,s,' ',=,' ','"'],['"'],L0,L1,L2), パス部分を現在のディレクトリに置換する(CWDIRL,L1,L11), 'ディレクトリ名だけを(ファイル名は書き換えない)書き換える'(CWDIR,L2,Chars_2_2), append(L0,L11,Chars_2_2,Chars_2),!. 'ディレクトリ名だけを(ファイル名は書き換えない)書き換える'(CWDIR,Chars,Chars). パス部分を現在のディレクトリに置換する(CWDIRL,L1,L11) :- ファイル部分(L1,_ファイル部分), append(CWDIRL,[/|_ファイル部分],L11). ファイル部分(_実質パス部分,_ファイル部分) :- append(_,[/|_ファイル部分],_実質パス部分), \+(member(/,_ファイル部分)),!. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% search_part_list(L,SL0,SL2,L0,L1,L2) :- append(SL0,[R0],SL0_1), append(SL2,[R2],SL2_1), partition_list_1(L,SL0_1,L0,R1), partition_list_1(R1,SL2_1,L1,L2). partition_list(L1,_指定ならび,L,R) :- append(_指定ならび,[R1],_指定ならび_1), partition_list_1(L1,_指定ならび_1,LX,R). partition_list_1([],_,[],[]) :- !. partition_list_1(L1,L1,[],R) :- !. partition_list_1([A|R1],L1,[A|R2],R) :- partition_list_1(R1,L1,R2,R). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1320365280/670 # [1] 授業単元:C言語演習 # [2] 問題文(含コード&リンク): # #include<stdio.h> # int main(void) # { # int i=0; # char *ptr; # char str[128]; # # ptr = str; # # scanf("%s",&str); # # while(*ptr++){ # i++; # } # # printf("%d\n",i); # } # # 上記の入力したテキストの文字数を表示するプログラムの読み込み部分をファイル処理に変更せよ。 # fgetc() 関数を使用し、コマンドラインにファイル名が指定できるようにすること。 # ただし、ファイル名を指定しない場合は標準入力とする。 # ファイルが見つからなかった時はエラーメッセージを出し、プログラムを終了する。 # 'length系組込述語を使わず入力したテキストの文字数を表示する' :- get_chars(_文字ならび), ならびの文字数を数える(_文字ならび,_文字数), writef('文字数は %t文字です\n',[_文字数]). ならびの文字数を数える([],0). ならびの文字数を数える([_|R],_文字数) :- ならびの文字数を数える(R,_文字数_1), _文字数 is _文字数_1 + 1. 読み込み部分をファイル処理に変更する :- コマンドラインからファイル名を取り出す(_ファイル名), 読み込み部分をファイル処理に変更する(_ファイル名). 読み込み部分をファイル処理に変更する(user_input,_文字数) :- ファイルから読み出しながら文字数を数える(user_input,_文字数). 読み込み部分をファイル処理に変更する(_ファイル名,_文字数) :- open(_ファイル名,read,Instream), ファイルから読み出しながら文字数を数える(Instream,_文字数), close(Instream). ファイルから読み出しながら文字数を数える(Instream,0) :- at_end_of_stream(Instream),!. ファイルから読み出しながら文字数を数える(Instream,_文字数) :- get_char(Instream,_), ファイルから読み出しながら文字数を数える(Instream,_文字数_1), _文字数 is _文字数_1 + 1. コマンドラインからファイル名を取り出す(_ファイル名) :- current_prolog_flag(argv,ParameterList), append(_,['--'|UserParameterList],ParameterList), ParameterList = [_ファイル名|_],!. コマンドラインからファイル名を取り出す(user_input). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1320365280/822 # [1] 授業単元:c言語プログラミング # [2] 問題文(含コード&リンク):(1,2,3) (1,2,4)...といった数列が続くのlist.txtを読み込み、 # 左の数字が同じかつ真ん中の数字も同じとき、右の数字が大きいものを削除し、link2.txtに書きこむプログラムを作りなさい。 # (この場合、左が1と1かつ真ん中が2と2で右が3と4なので4の方が大きいので(1,2,4)を削除する) # '(1,2,3) (1,2,4)...といった数列が続くのlist.txtを読み込み、左の数字が同じかつ真ん中の数字も同じとき、右の数字が大きいものを削除し、link2.txtに書きこむ' :- get_chars('list.txt',Chars), '左の数字が同じかつ真ん中の数字も同じとき、右の数字が大きいものを削除し、link2.txtに書きこむ'(Chars). '左の数字が同じかつ真ん中の数字も同じとき、右の数字が大きいものを削除し、link2.txtに書きこむ'(Chars) :- ならびに変換(Chars,LL1), '左の数字が同じかつ真ん中の数字も同じとき、右の数字が大きいものを削除し'(LL1,LL2), 'link2.txtに書きこむ'(LL2). ならびに変換([],[]). ならびに変換(['('|R1],[[A,B,C]|R2]) :- append(L0,[)|R3],R1), concat_atom(L0,S), atom_to_term(S,(A,B,C),_), ならびに変換(R3,R2),!. ならびに変換([_|R1],R2) :- ならびに変換(R1,R2). '左の数字が同じかつ真ん中の数字も同じとき、右の数字が大きいものを削除し'(LL1,LL2) :- 左の数字と真ん中の数字でグループを作る(LL1,LL3), グループの中の最小ならびを蒐める(LL3,LL2). 左の数字と真ん中の数字でグループを作る(LL1,LL3) :- findsetof([A,B],( append(_,[[A,B,_]|_],LL1)), LL3). グループの中の最小ならびを蒐める(LL3,LL2) :- findall(L,( グループの中での最小ならび(LL3,L)), LL2). グループの中での最小ならび(LL3,L) :- append(_,[[A,B]|_],LL3), findmin([A,B,C],( append(_,[[A,B,C]|_],LL1)), L). 'link2.txtに書きこむ'(LL2) :- open('link2.txt',write,Outstream), 'link2.txtに書きこむ'(Outstream,LL2), close(Outstream). 'link2.txtに書きこむ'(Outstream,LL2) :- append(_,[[A,B,C]|R],LL2), writef(Outstream,'(%t,%t,%t) ',[A,B,C]), R = [], 最後に改行(Outstream). 最後に改行(Outstream) :- write(Outstream,'\n'). % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1322562648/472 # 【質問テンプレ】 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク):textfileの1行を読み込み、1次元配列にバッファリングしたものの1部をスペースが出るまで # 別の二次元配列に格納せよ。 # テキストファイルに書かれている内容は # AA 1,2,3,4,5; # ・・・ # です。 # のようにAAと数字の間は1スペース開いています。 # AA 2,3,4,5;の1行だけをバッファリングすることが # できました。AAの文字のみを別の二次元配列に格納するにはどうすればよいか? # 'textfileの1行を読み込み、1次元配列にバッファリングしたものの1部をスペースが出るまで別の二次元配列に格納する'(_二次元ならび) :- get_chars('textfile',Chars), append(L0,[' '|_],Chars), _二次元ならび = [Chars]. % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1322562648/562 # [1] プログラミング実習応用 # [2] ファイル"tmp.csv"を入力ファイルとして、座標(x,y)の組を終端まで読み込み、 # x,yそれぞれの平均値(重心)を計算して、画面上に表示するプログラムを作成せよ # □"tmp.csv"は「関数y=x^3-xのグラフを描くため、定義域[-2,2]に対するyの値を0.1刻みで計算し、 # 結果をファイルに出力する」というプログラムで作ったファイルで、もう用意してあります。 # □コンパイラの標準外の仕様による異常終了を避けるため、変数の宣言部分にダミーの変数を追加する。例えば、"double dummy=0.0;"(変数名や値は変えてよい) # 'ファイル"tmp.csv"を入力ファイルとして、座標(x,y)の組を終端まで読み込み、x,yそれぞれの平均値(重心)を計算して、画面上に表示する' :- 'ファイル"tmp.csv"を入力ファイルとして、座標(x,y)の組を終端まで読み込み'(_x座標ならび,_y座標ならび), 'x,yそれぞれの平均値を計算して'(_x座標ならび,_y座標ならび,_xの平均,_yの平均), 画面上に表示する(_xの平均,_yの平均). 'ファイル"tmp.csv"を入力ファイルとして、座標(x,y)の組を終端まで読み込み'(_x座標ならび,_y座標ならび) :- get_chars('tmp.csv',Chars), 座標の組(Chars,_x座標ならび,_y座標ならび). 座標の組(Chars,[V|_座標ならび_1],_座標ならび_2) :- 座標の組(Chars,L,_座標ならび_2,_座標ならび_1), 実数に変換(L,V). 座標の組([],[],[],[]) :- !. 座標の組([],L,[V],[]) :- 実数に変換(L,V),!. 座標の組([_区切り記号|R1],[],[V|_座標ならび_1],_座標ならび_2) :- member(_区切り記号,[' ','\t',',','\n','(',')']), 座標の組(R1,L,_座標ならび_2,_座標ならび_1), 実数に変換(L,V),!. 座標の組([A|R1],[A|R2],_座標ならび_1,_座標ならび_2) :- \+(member(A,[' ','\t',',','\n','(',')'])), 座標の組(R1,R2,_座標ならび_1,_座標ならび_2),!. 座標の組([_|R1],L,_座標ならび_1,_座標ならび_2) :- 座標の組(R1,L,_座標ならび_1,_座標ならび_2). 実数に変換([],_) :- !,fail. 実数に変換(_実数数字ならび,_実数値) :- concat_atom(_実数数字ならび,_文字列), atom_to_term(_文字列,_実数値,_). 'x,yそれぞれの平均値を計算して'(_x座標ならび,_y座標ならび,_xの平均,_yの平均) :- 相加平均(_x座標ならび,_xの平均), 相加平均(_y座標ならび,_yの平均). 相加平均(_値ならび,_相加平均) :- length(_値ならび,_標本数), 相加平均(_値ならび,_標本数,0,_相加平均). 相加平均([],_標本数,_合計,_相加平均) :- _相加平均 is _合計 / _標本数,!. 相加平均([V|R],_標本数,_合計_1,_相加平均) :- _合計_2 is _合計_1 + V, 相加平均(R,_標本数,_合計_2,_相加平均). 画面上に表示する(_xの平均,_yの平均) :- writef('座標の組の平均(重心)は (%t,%t) です。\n',[_xの平均,_yの平均]). % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1325685876/205 # [1] 授業単元:楽しいC言語(ファイルからの読み込み) # [2] 問題文(含コード&リンク):以下の実行例のように,キーボードからファイル名を # 読み込み,そのファイル中の数字文字の個数をカウント # して画面に表示するプログラムを作成せよ.(’0’〜’9’ # のそれぞれの個数を別々に数える必要はない.) # # 【実行結果例】 # % cat intro.txt # Hello! # I’m Taro .MASAKI # I was born in Tokyo in 1991. # ./intro # ファイル名:intro.txt # ファイル中の数字文字の個数:4 # 'キーボードからファイル名を読み込み,そのファイル中の数字文字の個数をカウントして画面に表示する' :- write('ファイル名 : '), get_line(_ファイル名), get_chars(_ファイル名,Chars), count((member(A,Chars),数字(A)),_数字の度数). writef('ファイル中の数字文字の個数: %t\n',[_数字の度数]). 数字(A) :- char_code(A,Code), Code >= 48, Code =< 57. count(P,N) :- findall(1,P,L), length(L,N). % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1325685876/205 # [1] 授業単元:楽しいC言語(ファイルからの読み込み) # [2] 問題文(含コード&リンク):以下の実行例のように,キーボードからファイル名を # 読み込み,そのファイル中の数字文字の個数をカウント # して画面に表示するプログラムを作成せよ.(’0’〜’9’ # のそれぞれの個数を別々に数える必要はない.) # # 【実行結果例】 # % cat intro.txt # Hello! # I’m Taro .MASAKI # I was born in Tokyo in 1991. # ./intro # ファイル名:intro.txt # ファイル中の数字文字の個数:4 # 'キーボードからファイル名を読み込み,そのファイル中の数字文字の個数をカウントして画面に表示する' :- write('ファイル名 : '), get_line(_ファイル名), get_chars(_ファイル名,Chars), count((member(A,Chars),数字(A)),_数字の度数). writef('ファイル中の数字文字の個数: %t\n',[_数字の度数]). 数字(A) :- char_code(A,Code), Code >= 48, Code =< 57. count(P,N) :- findall(1,P,L), length(L,N). % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1309076891/688 # 【 課題 】 # 1、 # data.txt→2chの1スレッドのデータが入っている。 # http://ime.nu/www.dotup.org/uploda/www.dotup.org2512848.txt.html # # dataExtraction.java→data.txtの1レスを読み込んで一枚のテキストファイルに出力していくプログラム(例:レス1はres1.txtに.......レス200はres200.txtに出力) # http://ime.nu/www.dotup.org/uploda/www.dotup.org2512850.txt.html # # このdataExtraction.javaがdata.txtの1レスを読み込んだ際に # もしURLやアンカを表す文字列(例:<a href="../test/read.cgi/bizplus/1326413757/3" target="_blank">../test/read.cgi/tech/1309076891/3</a>)があった場合 # それを削除してテキストファイルに出力する機能を追加してください。 'data.txtには2chの1スレッドのデータが入っている。1レスをずつ読み込んでレス番号をファイル名に含む一枚のテキストファイルに出力していく' :- get_chars('data.txt',Chars), 'data.txtには2chの1スレッドのデータが入っている。1レスをずつ読み込んでレス番号をファイル名に含む一枚のテキストファイルに出力していく'(Chars). 'data.txtには2chの1スレッドのデータが入っている。1レスをずつ読み込んでレス番号をファイル名に含む一枚のテキストファイルに出力していく'(Chars) :- append(_,[<,d,t,>|R1],[<,/,d,t,>|R2],Chars), append(L1,[<,d,d,>|R3],[<,/,d,d,>|R4],R2), 一枚のテキストファイルに保存(R1,L1,R3),), 'data.txtには2chの1スレッドのデータが入っている。1レスをずつ読み込んでレス番号をファイル名に含む一枚のテキストファイルに出力していく'(R4), 'data.txtには2chの1スレッドのデータが入っている。1レスをずつ読み込んでレス番号をファイル名に含む一枚のテキストファイルに出力していく'(_). 一枚のテキストファイルに保存(R1,L1,R3) :- レス番号を得る(R1,_レス番号), concat_atom(['res',_レス番号,'.txt'],_ファイル名), open(_ファイル名,write,Outstream), テキスト部分の保存(Outstream,R1,L1,R3), close(Outstream),!. レス番号を得る(R1,_レス番号) :- concat_atom(R1,S), split(S,[' '],[_レス番号|_]). テキスト部分の保存(Outstream,R1,L1,R3) :- put_chars(Outstream,[<,d,t,>|R1]), put_chars(Outstream,L1), put_chars(Outstream,[<,d,d,>|R3]), put_chars(Outstream,[<,/,d,d,>]). put_chars(_,[]). put_chars(Stream,[_文字|R]) :- put_char(Stream,_文字), put_chars(Stream,R). % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1342966104/106 # [1] 授業単元:C言語プログラム # [2] 問題文: # http://ime.nu/codepad.org/dZkqNN3s # 上記のプログラムを参考にして、以下のファイルidata.txtから8文字を読み出して画面出力するプログラムを作成せよ。 # 但し、以下の内容のデータファイルidata.txtを、emacsであらかじめ作成しておくこと。 # <出力例> # FILE READ OK # READ DATA->Aiba 160 # [idata.txt] # Aiba 160 59.3 # Kurata 162 51.6 # Masaki 182 76.5 # Nakashima 168 65.2 # Tanaka 170 60.7 # 'ファイルidata.txtから8文字を読み出して画面出力する'(_8文字の文字列) :- get_chars('idata.txt',Chars), append(_,[_1,_2,_3,_4,_5,_6,_7,_8|R],Chars), atomic_list_concat([_1,_2,_3,_4,_5,_6,_7,_8],_8文字の文字列), writef('%t\n',[_8文字の文字列]). % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1354070278/7 # [1] 授業単元:問題1:二次元配列 問題2:関数 # [2] 問題文(含コード&リンク): # 問題1:ファイルから入力した英小文字a-zの頻度のヒストグラムを # 出力するプログラムを書いてください。入力ファイルはプログラムファイルを使えば良い。 # # 問題2:1文字を引数としてそれが小文字であれば大文字にして返し # そうでなければそのまま文字を返す関数を作成しキーボードから # 文字入力としてこの関数の動作を確認せよ。 # [3.1] OS: windows vista #  [3.2] コンパイラ名とバージョン:visual studio2010 #  [3.3] 言語: C言語 # [4] 期限: 11月30日 # [5]ポインタはやってません。宜しくお願いします 。 # # 'ファイルから入力した英小文字a-zの頻度のヒストグラムを出力するプログラムを書いてください。入力ファイルはプログラムファイルを使えば良い。' :- get_chars('c161_7.html',Chars), '英小文字a-zの頻度の'(Chars,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z]), ヒストグラムを出力する([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z]). '英小文字a-zの頻度の'([],[A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z],[A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z]). '英小文字a-zの頻度の'([_文字|_残りならび],L1,L) :- 英小文字ならば頻度を更新(_文字,L1,L2), '英小文字a-zの頻度の'(_残りならび,L2,L),!. '英小文字a-zの頻度の'([_|_残りならび],L1,L) :- '英小文字a-zの頻度の'(_残りならび,L1,L). 英小文字ならば頻度を更新(_文字,L1,L2) :- nth0(Nth0,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z],_文字), length(L0,Nth0), append(L0,[S|R],L1), S2 is S + 1, append(L0,[S2|R],L2). ヒストグラムを出力する(L) :- ヒストグラムの用意(L,LL1), 転置(LL1,LL2), 出力する(LL2). ヒストグラムの用意(L,LL1) :- 最大値(L,_最大値), length(L1,_最大値), findall(L1,( 星のリストに変換(L,L1)), LL1). 星のリストに変換(L,L1) :- member(N,L), length(R,N), append(L0,R,L1), all(L0,' '), all(R,*). 出力する([]). 出力する([L|R]) :- atomic_list_concat(L,S), writef('%t\n',[S]), 出力する(R). % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1357748713/33 # [1] 授業単元: リスト処理 # [2] 問題文(含コード&) http://codepad.org/3DdhcBUM # # /* # # seito.dat ( http://db.tt/RfFwIKXU )を構造体のリストのセルに(EOFになるまで)入力し、リスト処理による挿入法で得点の降順に整列して表示しなさい。 # また、整列する際に要素どうしを比較した回数も表示しなさい。 # # 【実行例】 # # 番号 氏名      得点 # 1021 Machida Masato 100 # 1017 Nonaka Fujio 98 # 1011 Suzuki kenichi 93 # 1019 Fujimoto Kaoru 92 # 1006 kato Ichiro 91 # ・ ・     ・ # ・ ・     ・ # ・ ・     ・ # 1020 Hoshi Izumi 32 # 整列の為の比較回数=132回 # # ※長いので実行結果は途中省略しています。 # ※比較回数はコードによって異なる場合があります。 # # */ 'seito.dat ( http://db.tt/RfFwIKXU )を構造体のリストのセルに(EOFになるまで)入力し、リスト処理による挿入法で得点の降順に整列して表示しなさい。 また、整列する際に要素どうしを比較した回数も表示しなさい。' :- 'seito.dat ( http://db.tt/RfFwIKXU )を構造体のリストのセルに(EOFになるまで)入力し、'(_生徒ならび), リスト処理による挿入法で得点の降順に整列して(_生徒ならび,[],_整列済み生徒ならび,0,_比較回数), 表示しなさい(_整列済み生徒ならび,_比較回数). 'seito.dat ( http://db.tt/RfFwIKXU )を構造体のリストのセルに(EOFになるまで)入力し、'(_生徒ならび) :- get_split_lines('seito.dat',[' '],_生徒ならび). リスト処理による挿入法で得点の降順に整列して([[_学籍番号,_姓,_名,_得点]|R1],L1,_整列済み生徒ならび,_比較回数_1,_比較回数) :- 降順に挿入(_学籍番号,_姓,_名,_得点,L1,L2,_比較回数_1,_比較回数_2), リスト処理による挿入法で得点の降順に整列して(R1,L2,_整列済み生徒ならび,_比較回数_2,_比較回数),!. リスト処理による挿入法で得点の降順に整列して([],_整列済み生徒ならび,_整列済み生徒ならび,_比較回数,_比較回数). 降順に挿入(_学籍番号,_姓,_名,_得点,[[_学籍番号_1,_姓_1,_名_1,_得点_1]|R],[[_学籍番号,_名,_名,_得点],[_学籍番号_1,_姓_1,_名_1,_得点_1]|R],_比較回数_1,_比較回数) :- 比較回数 is _比較回数_1 + 1, _得点 >= _得点_1,!. 降順に挿入(_学籍番号,_姓,_名,_得点,[[_学籍番号_1,_姓_1,_名_1,_得点_1]|R1],[[_学籍番号_1,_姓_1,_名_1,_得点_1]|R2],_比較回数_1,_比較回数) :- 降順に挿入(_学籍番号,_姓,_名,_得点,R1,R2,_比較回数_1,_比較回数). 降順に挿入(_学籍番号,_姓,_名,_得点,[],[[_学籍番号,_名,_名,_得点]],_比較回数,_比較回数) :- !. 表示しなさい(_整列済み生徒ならび,_比較回数) :- 見出しの表示, append(_,[[_学籍番号,_姓,_名,_得点]|R],_整列済み生徒ならび), 整形して表示する(_学籍番号,_姓,_名,_得点), R = [], writef('整列の為の比較回数=%t回\n',[_比較回数]). 見出しの表示 :- write('番号 氏名      得点\n'). 整形して表示する(_学籍番号,_姓,_名,_得点) :- 姓名をそれぞれ8桁に(_姓,_名,_姓文字列,_名文字列), 得点を頭部空白3桁に(_得点,_得点文字列), atomic_list_concat([_学籍番号,_姓文字列,_名文字列,_得点文字列],' ',_表示文字列), writef('%t\n',[_表示文字列]). 姓名をそれぞれ8桁に(_姓,_名,_姓文字列,_名文字列) :- '8桁に'(_姓,_姓文字列), '8桁に'(_名,_名文字列). '8桁に'(_項,_8桁文字列) :- atom_chars(_項,Chars_1), length(L,8), append(L1,L2,L), all(L2,' '), atom_chars(_8桁文字列,L). 得点を頭部空白3桁に(_得点,_得点文字列) :- number_chars(_得点,Chars), length(L,3), append(L0,Chars,L), all(L0,' '), atom_chars(_得点文字列,L). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% get_split_lines(File,Sep,Lines) :- get_lines(File,Lines1), findall(Line,( member(A,Lines1), split(A,Sep,Line)), Lines). get_lines(Instream,end_of_file,_,_,[]) :-!. get_lines(Instream,S,[],_終了検索対象ならび,[S]) :- member(A,_終了検索対象ならび), 検索(S,A),!. get_lines(Instream,S,[],[],[S|R]) :- get_line(Instream,S2), get_lines(Instream,S2,[],[],R),!. get_lines(Instream,S,[],_終了検索対象ならび,[S|R]) :- member(A,_終了検索対象ならび), \+(検索(S,A)), get_line(Instream,S2), get_lines(Instream,S2,[],_終了検索対象ならび,R),!. get_lines(Instream,S,_開始検索対象ならび,_終了検索対象ならび,[S]) :- \+(_開始検索対象ならび = []), member(A,_開始検索対象ならび), 検索(S,A), member(B,_終了検索対象ならび), 検索(S,B),!. get_lines(Instream,S,_開始検索対象ならび,_終了検索対象ならび,[S|R]) :- \+(_開始検索対象ならび = []), member(A,_開始検索対象ならび), 検索(S,A), !, get_line(Instream,S2), get_lines(Instream,S2,[],_終了検索対象ならび,R),!. get_lines(Instream,_,_開始検索対象ならび,_終了検索対象ならび,X) :- get_line(Instream,S2), get_lines(Instream,S2,_開始検索対象ならび,_終了検索対象ならび,X),!. get_lines(_ファイル,_スタート行,_最終行,X) :- integer(_スタート行), integer(_最終行), 行位置指定選択(_ファイル,_スタート行,_最終行,X). get_lines(_ファイル,_開始検索対象ならび,_終了検索対象ならび,X) :- \+(integer(_開始検索対象ならび)), \+(integer(_終了検索対象ならび)), open(_ファイル,read,Instream), get_line(Instream,S), get_lines(Instream,S,_開始検索対象ならび,_終了検索対象ならび,X), close(Instream),!. get_lines(File,Lines) :- get_chars(File,L), chars_lines(L,Lines),!. get_lines(Lines) :- findall(Line,( repeat, get_line(user_input,Line), (Line = end_of_file , (!) , fail ; true)), Lines). get_line(Instream,X) :- get_char(Instream,C), get_line_3(Instream,C,Chars), atom_chars(X,Chars),!. get_chars(Instream,end_of_file,[]) :- !. get_chars(Instream,_,[]) :- at_end_of_stream(Instream),!. get_chars(Instream,X,[X|R]) :- get_char(Instream,Y), get_chars(Instream,Y,R) . get_chars(File,L) :- \+(is_stream(_,File,_)), slush_op(File,File_1), exists_file(File_1), open(File_1,read,Instream), get_char(Instream,X), get_chars(Instream,X,L), close(Instream),!. get_chars(Instream,L) :- is_stream(_,Instream,_), get_char(Instream,X), get_chars(Instream,X,L),!. get_chars(L) :- findall(U,( repeat, get_char(U), (U = end_of_file , (!) , fail ; true)), L). get_line(X) :- get_line(user_input,X). get_line_3(_,'\n',[]) :- !. get_line_3(Instream,_,[]) :- at_end_of_stream(Instream),!. get_line_3(Instream,end_of_file,[]) :- !. get_line_3(Instream,C,[C|R]) :- get_char(Instream,C2), get_line_3(Instream,C2,R). chars_lines([],[],[]) :- !. chars_lines(['\r'],[],[]) :- !. chars_lines(['\r',A|R],[],[A|R]) :- \+(A = '\n'),!. chars_lines(['\r','\n'|R],[],R) :- !. chars_lines(['\n'|R],[],R) :- !. chars_lines([A|R1],[A|R2],Z) :- chars_lines(R1,R2,Z). chars_lines([],[]) :- !. chars_lines(L,[A|R2]) :- chars_lines(L,U,R), atomic_list_concat(U,A), chars_lines(R,R2). split(_文字列,_区切り符号ならび,X) :- sPlit(_文字列,_区切り符号ならび,Y), findall(U,( member(U,Y), \+(U = '')), L), L = X,!. sPlit(_文字列,_区切り符号ならび,X) :- atom_chars(_文字列,L), split_00(L,_区切り符号ならび,Y), findall(U,( member(U,Y) , \+(member(U,_区切り符号ならび))), Z), Z = X,!. split_00(_文字ならび,_区切り符号ならび,X) :- findall([B,A],( member(A,_区切り符号ならび) , atom_chars(A,B)), _区切り符号ならびの二), split_0(_文字ならび,_区切り符号ならびの二,X). split_0(_文字ならび,_区切り符号ならび,['',_区切り符号,'']) :- member([_区切り文字ならび,_区切り符号],_区切り符号ならび), _文字ならび = _区切り文字ならび,!. split_0(_文字ならび,_区切り符号ならび,['',_区切り符号|R2]) :- member([_区切り文字ならび,_区切り符号],_区切り符号ならび), append(_区切り文字ならび,R,_文字ならび), split_1(R,_区切り符号ならび,R2),!. split_0(L,_区切り符号ならび,X) :- split_1(L,_区切り符号ならび,X). split_1([],_,[]) :- !. split_1(_文字ならび,_区切り符号ならび,['',_区切り符号,'']) :- member([_区切り文字ならび,_区切り符号],_区切り符号ならび), _文字ならび = _区切り文字ならび,!. split_1(_文字ならび,_区切り符号ならび,['',_区切り符号_1,C,_区切り符号_2|X]) :- member([_区切り文字ならび,_区切り符号_1],_区切り符号ならび), append(_区切り文字ならび,R,_文字ならび), split_2(R,R2,_区切り符号_2,_区切り符号ならび,B), split_5(B,C), split_0(R2,_区切り符号ならび,X),!. split_1(_文字ならび,_区切り符号ならび,[C|X]) :- split_2(_文字ならび,R2,_区切り符号,_区切り符号ならび,B), _区切り符号 = '', split_5(B,C), split_0(R2,_区切り符号ならび,X),!. split_1(_文字ならび,_区切り符号ならび,[C,_区切り符号|X]) :- split_2(_文字ならび,R2,_区切り符号,_区切り符号ならび,B), \+(_区切り符号 = ''), split_5(B,C), split_0(R2,_区切り符号ならび,X),!. split_2([],[],'',_,[]) :- !. split_2(_文字ならび,R,_区切り符号,_区切り符号ならび,[]) :- member([_区切り文字ならび,_区切り符号],_区切り符号ならび), append(_区切り文字ならび,R,_文字ならび),!. split_2([''''|R],R2,_区切り符号,_区切り符号ならび,X) :- split_3([''''|R],R2,_区切り符号,_区切り符号ならび,X),!. split_2(['"'|R],R2,_区切り符号,_区切り符号ならび,X) :- split_32(['"'|R],R2,_区切り符号,_区切り符号ならび,X),!. split_2([_文字|R],R2,_区切り符号,_区切り符号ならび,[_文字|X]) :- split_2(R,R2,_区切り符号,_区切り符号ならび,X),!. split_3(['''',''''|R],R2,_区切り符号,_区切り符号ならび,[''''|X]) :- split_4(R,R2,_区切り符号,_区切り符号ならび,X),!. split_3([_|R],R2,_区切り符号,_区切り符号ならび,X) :- split_4(R,R2,_区切り符号,_区切り符号ならび,X),!. split_4(['''',''''|R],R2,_区切り符号,_区切り符号ならび,[''''|X]) :- split_4(R,R2,_区切り符号,_区切り符号ならび,X),!. split_4([''''|R],R2,_区切り符号,_区切り符号ならび,X) :- split_2(R,R2,_区切り符号,_区切り符号ならび,X),!. split_4([],[],'',_,[]) :- !. split_4([_文字|R],R2,_区切り符号ならび,[_文字|X]) :- split_4(R,R2,_区切り符号,_区切り符号ならび,X),!. split_5([],'') :- !. split_5(B,C) :- numeric_list(B,Nl), C number Nl,!. split_5(B,C) :- atomic_list_concat(B,C),!. all([],_). all([V|R],V) :- all(R,V). 検索(_文字列,_副文字列) :- atom_length(_文字列,_文字列の文字数), atom_length(_副文字列,_副文字列の文字数), Max is _文字列の文字数 - _副文字列の文字数, between(0,Max,N), sub_atom(_文字列,N,_副文字列の文字数,_副文字列),!. 行位置指定選択(_ファイル,_選択先頭行,_選択最終行,X) :- wc(_ファイル,[[_行,_,_,_]]), _行数_1 is _行 - _選択先頭行 + 1, _行数_2 is _選択最終行 - _選択先頭行, atomic_list_concat(['tail -',_行数_1,' ',_ファイル,' | head -',_行数_2],S), shs(S,X). wc(F,X) :- exists_file(F1), atomic_list_concat(['wc ',F1],S), sh(S,X),!. wc(F,X) :- atomic_list_concat([F,' | wc'],S), sh(S,X),!. sh(Command,X) :- shs(Command,Y), findall(U,(member(V,Y) , make_list(V,[' ',','],U)),X). shs(Command,X) :- popen(Command,L), shs_3(L,X). shs_3(L,[S|R]) :- append(L0,['\n'|R1],L), atom_chars(S,L0), shs_3(R1,R). shs_3([],[]) :- !. shs_3(L,[S]) :- atom_chars(S,L). system(Command,X) :- shell(Command,X). system(Command) :- shell(Command). popen(Command,Chars) :- open(pipe(Command),read,Instream), get_char(Instream,Char), popen(Instream,Char,Chars), close(Instream),!. popen(Instream,end_of_file,[]) :- !. popen(Instream,_,[]) :- at_end_of_stream(Instream),!. popen(Instream,Char,[Char|R]) :- get_char(Instream,Char2), popen(Instream,Char2,R). % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1357748713/561 # [1] 授業単元:C言語演習 # [2] 問題文(含コード&リンク): # 問題A # 0と1だけで構成されたテキストファイルAがある。このファイルを読み込み、文字数をカウントし、 # 同じ文字数の0と1で構成された乱数列を生成し、テキストファイルBとして出力するプログラムを作成せよ。 # シード値はシステム時刻など適当なものを使用せよ。 # 問題B # 問題Aで使用したテキストファイルA、Bを一文字ずつXORしテキストファイルCとして出力するプログラムを作成せよ。 # '問題A 0と1だけで構成されたテキストファイルAがある。このファイルを読み込み、文字数をカウントし、 同じ文字数の0と1で構成された乱数列を生成し、テキストファイルBとして出力するプログラムを作成せよ。'(_テキストファイルA,_テキストファイルB) :- 'このファイルを読み込み、文字数をカウントし、同じ文字数の0と1で構成された乱数列を生成し'(_テキストファイルA,_要素数,_乱数数字ならび), テキストファイルBとして出力する(_テキストファイルB,_乱数数字ならび). 'このファイルを読み込み、文字数をカウントし、同じ文字数の0と1で構成された乱数列を生成し'(_テキストファイルA,_要素数,_乱数数字ならび) :- このファイルを読み込み(_テキストファイルA,Chars), 文字数をカウントし(Chars,_文字数), 同じ文字数の0と1で構成された乱数列を生成し(_文字数,Chars,_乱数数字ならび). このファイルを読み込み(_テキストファイルA,Chars) :- get_chars(_テキストファイルA,Chars). 文字数をカウントし(Chars,_文字数) :- length(Chars,_文字数). 同じ文字数の0と1で構成された乱数列を生成し(0,[],[]) :- !. 同じ文字数の0と1で構成された乱数列を生成し(N,L1,[A|R]) :- M is random(N), 一文字取り出す(M,L1,A,L2), N_1 is N - 1, 同じ文字数の0と1で構成された乱数列を生成し(N_1,L2,R). 一文字取り出す(M,L1,A,L2) :- length(L0,M), append(L0,[A|R],L1), append(L0,R,L2). テキストファイルBとして出力する(_テキストファイルB,L) :- atom_chars(_乱数文字列,L), open(_テキストファイルB,write,Outstream), write(Outstream,A), close(Outstream). % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1357748713/561 # [1] 授業単元:C言語演習 # [2] 問題文(含コード&リンク): # 問題A # 0と1だけで構成されたテキストファイルAがある。このファイルを読み込み、文字数をカウントし、 # 同じ文字数の0と1で構成された乱数列を生成し、テキストファイルBとして出力するプログラムを作成せよ。 # シード値はシステム時刻など適当なものを使用せよ。 # 問題B # 問題Aで使用したテキストファイルA、Bを一文字ずつXORしテキストファイルCとして出力するプログラムを作成せよ。 # '問題B 問題Aで使用したテキストファイルA、Bを一文字ずつXORしテキストファイルCとして出力するプログラムを作成せよ。'(_テキストファイルA,_テキストファイルB,_テキストファイルC) :- get_chars(_テキストファイルA,Chars_1), get_chars(_テキストファイルB,Chars_2), 一文字ずつXORしテキストファイルCとして出力する(_テキストファイルC,Chars_,Chars_2). 一文字ずつXORしテキストファイルCとして出力する(Outstream,Chars_,Chars_2) :- open(_テキストファイルC,write,Outstream), forall(一文字ずつXORし(Chars_1,Chars_2,C), writef(Outstream,'%t',[C])), close(Outstream). 一文字ずつXORし(Chars_1,Chars_2,C) :- nth1(_nth1,Chars_1,A), nth1(_nth1,Chars_2,B), '数字のXOR'(A,B,C). '数字のXOR'('0','0','0'). '数字のXOR'('1','0','1'). '数字のXOR'('0','1','1'). '数字のXOR'('1','1','0'). % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1370255305/767 # どなたか助けてください。困ってます。 # [1] 授業単元: 課題 # [2] 問題文: テキストファイル test.txtを呼び出し、平滑化したデータを # 違うファイルtest1.txtに出力しなさい。 # 'テキストファイル test.txtを呼び出し、平滑化したデータを違うファイルtest1.txtに出力しなさい。' :- 'テキストファイル test.txtを呼び出し、平滑化したデータを'(_平滑化したデータならび), '違うファイルtest1.txtに出力しなさい。'(_平滑化したデータならび). 'テキストファイル test.txtを呼び出し、平滑化したデータを'(_平滑化したデータならび) :- 'テキストファイル test.txtを呼び出し、'(_データならび), 平滑化したデータを'(_データならび,_平滑化したデータならび). 'テキストファイル test.txtを呼び出し、'(_データならび) :- get_chars('test.txt',Chars), atom_chars(Atom,Chars), split(Atom,[' ','\n','\t'],_データならび). 平滑化したデータを(_データならび,_平滑化したデータならび). 'テキストファイル test.txtを呼び出し、'(_データならび) :- get_chars('test.txt',Chars), atom_chars(Atom,Chars), split(Atom,[' ','\n','\t'],_データならび). 平滑化したデータを(_データならび,_平滑化したデータならび) :- 単純移動平均(_データならび,_平滑化したデータならび). 単純移動平均(_データならび,_平滑化したデータならび) :- length(L2,25), findall(_相加平均,( append(L1,L2,L3,_データならび), 相加平均(L2,_相加平均)), _平滑化したデータならび). '違うファイルtest1.txtに出力しなさい。'(_平滑化したデータならび) :- open('test1.txt',write,Outstream), '違うファイルtest1.txtに出力しなさい。'(Outstream,_平滑化したデータならび), close(Outstream). '違うファイルtest1.txtに出力しなさい。'(Outstream,[]). '違うファイルtest1.txtに出力しなさい。'(Outstream,[V|R]) :- writef('%t ',[V]), '違うファイルtest1.txtに出力しなさい。'(Outstream,R). % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1370255305/782 # 読み込むiniファイルのセクション名を、string配列にpushし続けて、 # セクション名すべてpushしたらループから外れるって仕組みなんですけど、tmp = strtok_s()の代入がうまくいきません # どうしたらいいですか # # char SectionNames[1024]; # GetPrivateProfileSectionNames(SectionNames,1024,FilePath.c_str()); # # char *WTF;//謎の内部パラメータ,strtok_sの仕様 # vector<string> SquadNameList; # SquadNameList.push_back(strtok_s( SectionNames, "0" ,&WTF)); # # for(int i=0; i < SquadNameList.size();i++){ # char tmp[256]; # tmp = strtok_s( NULL, "0" ,&WTF); # if( tmp != NULL){ # SquadNameList.push_back(tmp); # } # } # # '読み込むiniファイルのセクション名を、string配列にpushし続けて、 セクション名すべてpushしたらループから外れるって仕組みなんですけど、 tmp = strtok_s()の代入がうまくいきませんどうしたらいいですか'(_iniファイル,_セクション名ならび) :- 読み込むiniファイルの(_iniファイル,_iniファイル文字ならび), 'セクション名を、string配列にpushし続けて、セクション名すべてpushしたらループから外れる'(_iniファイル文字ならび,[],_セクション名ならび). 読み込むiniファイルの(_iniファイル,_iniファイル文字ならび) :- get_chars(_iniファイル,_iniファイル文字ならび). 'セクション名を、string配列にpushし続けて、セクション名すべてpushしたらループから外れる'(_iniファイル文字ならび,L1,_セクション名ならび) :- セクション名を(_iniファイル文字ならび,_セクション名,_セクション名後の文字ならび), 'セクション名を、string配列にpushし続けて、セクション名すべてpushしたらループから外れる'(_セクション名後の文字ならび,[_セクション名|L1],_セクション名ならび). 'セクション名を、string配列にpushし続けて、セクション名すべてpushしたらループから外れる'(_iniファイル文字ならび,_セクション名ならび,_セクション名ならび). セクション名を(_iniファイル文字ならび,_セクション名,_セクション名後の文字ならび) :- append(L0,['['|_セクション名からの文字ならび],_iniファイル文字ならび), 'L0に[も]も存在しない'(L0), append(L0_1,[']'|_セクション名後の文字ならび],_セクション名からの文字ならび), 'L0_1に]が存在しない'(_セクション名後の文字ならび), atom_chars(_セクション名,_セクション名後の文字ならび). 'L0に[も]も存在しない'(L0) :- \+(member('[',L0)), \+(member(']',L0)),!. 'L0_1に]が存在しない'(L0_1) :- \+(member(']',L0_1)). % 以下のサイトは # http://toro.2ch.net/test/read.cgi/tech/1392388003/116 # [1] プログラミング言語 C # [2] # ・ 指定したファイルに文字列を行数を指定して挿入するプログラム(ファイル名と位置,挿入する文字列を入力できるようにする) # ・ また、上記のプログラムを直して文字列を挿入する場所を行だけでなく列も指定できるようにせよ。(まずは半角だけでよい) # # [3] 環境 #  [3.1] OS: Windows Vista #  [3.2] コンパイラ名とバージョン: Visual C++ #  [3.3] 言語: C # [4] 期限: 3月14日 '・ 指定したファイルに文字列を行数を指定して挿入するプログラム(ファイル名と位置,挿入する文字列を入力できるようにする) '(_ファイル名,_行位置,_文字列) :- get_chars(_ファイル名,Chars), tell(_ファイル名), 指定したファイルに文字列を行数を指定して挿入する(Chars,1,_行位置,_文字列), told. 指定したファイルに文字列を行数を指定して挿入する(Chars,_行位置,_行位置,_文字列) :- writef('%t\n',[_文字列]), 残りの文字ならびをファイルに書く(Chars),!. 指定したファイルに文字列を行数を指定して挿入する(['\n'|R],_行位置_1,_行位置,_文字列) :- write('\n'), _行位置_2 is _行位置_1 + 1, 指定したファイルに文字列を行数を指定して挿入する(R,_行位置_2,_行位置,_文字列),!. 指定したファイルに文字列を行数を指定して挿入する([A|R],_行位置_1,_行位置,_文字列) :- write(A), 指定したファイルに文字列を行数を指定して挿入する(R,_行位置_1,_行位置,_文字列). 残りの文字ならびをファイルに書く([]). 残りの文字ならびをファイルに書く([Char|R]) :- write(Char), 残りの文字ならびをファイルに書く(R). % 以下のサイトは # http://toro.2ch.net/test/read.cgi/tech/1392388003/116 # [1] プログラミング言語 C # [2] # ・ 指定したファイルに文字列を行数を指定して挿入するプログラム(ファイル名と位置,挿入する文字列を入力できるようにする) # ・ また、上記のプログラムを直して文字列を挿入する場所を行だけでなく列も指定できるようにせよ。(まずは半角だけでよい) # # [3] 環境 #  [3.1] OS: Windows Vista #  [3.2] コンパイラ名とバージョン: Visual C++ #  [3.3] 言語: C # [4] 期限: 3月14日 '・ 指定したファイルに文字列を行数を指定して挿入するプログラム(ファイル名と位置,挿入する文字列を入力できるようにする ・ また、上記のプログラムを直して文字列を挿入する場所を行だけでなく列も指定できるようにせよ。'(_ファイル名,_行位置,_列位置,_列位置,_文字列) :- get_chars(_ファイル名,Chars), tell(_ファイル名), 指定したファイルに文字列を行数と列数を指定して挿入する(Chars,1,_行位置,_列位置,_文字列), told. 指定したファイルに文字列を行数と列数を指定して挿入する(Chars,_行位置,_行位置,_列位置,_文字列) :- 列位置に文字列を書き込む(Chars,_列位置,_文字列), 残りの文字ならびをファイルに書く(Chars),!. 指定したファイルに文字列を行数と列数を指定して挿入する(['\n'|R],_行位置_1,_行位置,_列位置_文字列) :- write('\n'), _行位置_2 is _行位置_1 + 1, 指定したファイルに文字列を行数と列数を指定して挿入する(R,_行位置_2,_行位置,_文字列),!. 指定したファイルに文字列を行数と列数を指定して挿入する([A|R],_行位置_1,_行位置,_文字列) :- write(A), 指定したファイルに文字列を行数と列数を指定して挿入する(R,_行位置_1,_行位置,_列位置,_文字列). 列位置に文字列を書き込む(Chars,_列位置,_文字列) :- length([_|L0],_列位置), append(L0,Chars2,Chars), writef('%t\n',[_文字列]),!. 残りの文字ならびをファイルに書く([]). 残りの文字ならびをファイルに書く([Char|R]) :- write(Char), 残りの文字ならびをファイルに書く(R). % 以下のサイトは # ●Regular Expressionの使用環境 # # # ●検索か置換か? # 置換 # # ●説明 # 複数行の空行を1つの空行にしたい # # ●対象データ # # # # # # ●希望する結果 # 複数行の空行を1つの空行にしたい(_ファイル) :- get_chars(_ファイル,_文字ならび), 複数行の空行を1つの空行にしたい(_行ならび,_複数の空行を1つの空行にした文字ならび), put_chars(_ファイル,_複数の空行を1つの空行にした文字ならび). 複数行の空行を1つの空行にしたい([],[]). 複数行の空行を1つの空行にしたい(['\n','\n'|_残り行ならび],_複数の空行を1つの空行にした行ならび) :- 複数行の空行を1つの空行にしたい(['\n'|_残り行ならび],_複数の空行を1つの空行にした行ならび),!. 複数行の空行を1つの空行にしたい([A|R1],[A|R2]) :- 複数行の空行を1つの空行にしたい(R1,R2),!. get_chars(_ファイル,_文字ならび) :- open(_ファイル,read,Instream), findall(_文字,( at_end_of_stream(Instream),!,fail; get_char(Instream,_文字))), _文字ならび), close(Instream). put_chars(_ファイル,_文字ならび) :- open(_ファイル,write,Outstream), append(_,[_文字|R],_文字ならび), putchar(Outstream,_文字), R = [], close(Outstream).