このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 134代目 #358 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10471.txt # # ≪問題と条件≫ # 第1引数に指定したファイルからバイナリーモードで1バイトずつファイルを読み込み、 # ファイルの内容を16進数で示したものを第2引数に指定したファイルに書き込むプログラムを作成せよ。ただし、16バイトごとに改行を入れること。 '第1引数に指定したファイルからバイナリーモードで1バイトずつファイルを読み込み、ファイルの内容を16進数で示したものを第2引数に指定したファイルに書き込む。 ただし、16バイトごとに改行を入れる'(_入力バイナリファイル,_出力16進表示テキストファイル) :- '入力ファイルはバイナリーモード、出力ファイルはテキストモード'(_入力バイナリファイル,_出力16進表示テキストファイル,Input,Output), '1バイトずつファイルを読み込み、16進数で示したもの書き込む。ただし、16バイトごとに改行を入れる'(Input,Output), ストリームを閉じる(Input,Output). '入力ファイルはバイナリーモード、出力ファイルはテキストモード'(_入力バイナリファイル,_出力16進表示テキストファイル,Input,Output) :- '入力ファイルはバイナリーモード、'(_入力バイナリファイル,Input), '出力ファイルはテキストモード'(_出力16進表示テキストファイル,Output). '入力ファイルはバイナリーモード、'(_入力バイナリファイル,Input) :- open(_入力バイナリファイル,read,Input,[type(binary)]). '出力ファイルはテキストモード'(_出力16進表示テキストファイル,Output) :- open(_出力16進表示テキストファイル,write,Output). ストリームを閉じる(Input,Output) :- close(Input), close(Output). '1バイトずつファイルを読み込み、16進数で示したもの書き込む。ただし、16バイトごとに改行を入れる'(Input,Output) :- forall('16バイト分、1バイトずつファイルを読み込み、16進数で示したものを書き込む'(Input,Output), 改行を入れる(Output)). '16バイト分、1バイトずつファイルを読み込み、16進数で示したものを書き込む'(Input,Output) :- findnsols(16,1,'1バイトずつファイルを読み込み、16進数で示したものを書き込む'(Input,Output),_). '1バイトずつファイルを読み込み、16進数で示したものを書き込む'(Input,Output) :- repeat, ( at_end_of_stream(Input),!,fail; '1バイトファイルを読み込み、16進数で示したものを書き込む'(Input,Output)). '1バイトファイルを読み込み、16進数で示したものを書き込む'(Input,Output) :- '1バイトファイルを読み込み、'(Input,_1バイト), '16進数で示したものを書き込む'(Output,_1バイト). '1バイトファイルを読み込み、'(Input,_1バイト) :- get_byte(Input,_1バイト). '16進数で示したものを書き込む'(Output,_1バイト) :- '16進数で示したものを'(_1バイト,_16進数文字列), 書き込む(Output,_16進数文字列). '16進数で示したものを'(_1バイト,_16進数文字列) :- 上位桁の16進数文字列変換(_1バイト,_16進数上位桁文字列), 下位桁の16進数文字列変換(_1バイト,_16進数下位桁文字列), atomic_list_concat([_16進数上位桁文字列,_16進数下位桁文字列,' '],_16進数文字列). 上位桁の16進数文字列変換(_1バイト,_16進数上位桁文字列) :- X is _1バイト // 16, '16進数文字コード'(X,_16進数上位桁文字列). 下位桁の16進数文字列変換(_1バイト,_16進数下位桁文字列) :- Y is _1バイト mod 16, '16進数文字コード'(Y,_16進数下位桁文字列). '16進数文字コード'(15,'F') :- !. '16進数文字コード'(14,'E') :- !. '16進数文字コード'(13,'D') :- !. '16進数文字コード'(12,'C') :- !. '16進数文字コード'(11,'B') :- !. '16進数文字コード'(10,'A') :- !. '16進数文字コード'(N,C) :- atom_number(C,N). 書き込む(Output,_16進数文字列) :- write(Output,_16進数文字列). 改行を入れる(Output) :- write(Output,'\n').