このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 128代目 #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 '整数要素ファイルの最小値・最大値'(_ファイル,_最小値,_最大値) :- ファイルから最初の数値と数値ならびを得る(_ファイル,_最初の数値,_数値ならび), 'ならびの中の最小値・最大値'(_数値ならび,_最初の数値,_最初の数値,_最小値,_最大値),!. ファイルから最初の数値と数値ならびを得る(_ファイル,_最初の数値,_数値ならび) :- read_file_to_codes(_ファイル,Codes,[]), 'Codesから、空白、改行コードを取り除く'(Codes,L), 数値ならびに変換(L,_最初の数値,_数値ならび). 'Codesから、空白、改行コードを取り除く'(Codes,L) :- findall(_コード,( 'Codesから、空白、改行コードではないコードを取り出す'(Codes,_コード)),L). 'Codesから、空白、改行コードではないコードを取り出す'(Codes,_コード) :- member(_コード,Codes), '空白、改行コードではない'(_コード). '空白、改行コードではない'(_コード) :- \+(member(_コード,[32,10])). 数値ならびに変換(L,_最初の数値,_数値ならび) :- findall(N,( 二文字ずつコードを取り出し数値に変換する(L,N)),[_最初の数値|_数値ならび]). 二文字ずつコードを取り出し数値に変換する(L,N) :- 二文字ずつコードを取り出し(L,A,B), 数値に変換する(A,B,N). 二文字ずつコードを取り出し(L,A,B) :- findnsols(2,_文字,member(_文字,L),[A,B]). 数値に変換する(A,B,N) :- N is (A-48)*10+(B-48). 'ならびの中の最小値・最大値'([],_最小値,_最大値,_最小値,_最大値). 'ならびの中の最小値・最大値'(L,Min,Max,_最小値,_最大値) :- 'Lの要素でMin,Maxを更新させて行く'(L,Min,Max,_最小値,_最大値). 'Lの要素でMin,Maxを更新させて行く'(L,Min,Max,_最小値,_最大値) :- 要素がMinより小さかったら(L,Min,Max,_最小値,_最大値). 'Lの要素でMin,Maxを更新させて行く'(L,Min,Max,_最小値,_最大値) :- 要素がMaxより大きかったら(L,Min,Max,_最小値,_最大値). 'Lの要素でMin,Maxを更新させて行く'([_|R],Min,Max,_最小値,_最大値) :- 'ならびの中の最小値・最大値'(R,Min,Max,_最小値,_最大値). 要素がMinより小さかったら([_要素|R],Min,Max,_最小値,_最大値) :- _要素 @< Min, 'ならびの中の最小値・最大値'(R,_要素,Max,_最小値,_最大値). 要素がMaxより大きかったら([_要素|R],Min,Max,_最小値,_最大値) :- _要素 @> Max, 'ならびの中の最小値・最大値'(R,Min,_要素,_最小値,_最大値).