このディレクトリの索引 http://pc12.2ch.net/test/read.cgi/tech/1263824755/124 # [1] 授業単元: Cプログラミング入門 # [2] 問題文(含コード&リンク): 入力された2つの文字列(日本語その他バイト文字は不可) # を比較するプログラムを作成せよ。ただし、大文字小文字の違いは無視。単語間に連続して # スペース・タブが複数入っていても単独のスペースとしない。 # # [5] その他の制限: 文字列とポインタまでやってます。 # 入力に関して、キーボードから1つ目の文字列を1行で入力し、改行する。 # この時、入力を促す文字は一切表示しない。入力文字数は128文字まで。 # 出力に関して、一致すれば何も表示しない。不一致の場合は最初に不一致となる # 入力1の文字と入力2の文字(1文字+スペース+1文字+改行)を表示する。 # どちらかが末端の場合は代わりにスペースで埋める。 複数の整数を平均値に近い順にソートする(_整数ならび,_平均値に近い順に整列された整数ならび) :- 'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力する整数の個数), 指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数ならび), 相加平均(_整数ならび,_平均値の一), _平均値 is truncate(_平均値の一), 平均値からの隔たりによる整列(_平均値からの隔たりのならび,_平均値,_平均値からの隔たりを鍵として付加して整列された整数ならび), 整列した整数をスペース1つのみあけて1行で出力する(_平均値からの隔たりを鍵として付加して整列された整数ならび). 'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力する整数の個数) :- repeat, get_integer(_入力する整数の個数), _入力する整数の個数 =< 100,!. 指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数ならび) :- length(_整数ならび,_入力する整数の個数), get_split_line([' '],_整数ならび). 平均値からの隔たりによる整列([X|Xs],_平均値,Ys) :- U is X - _平均値, 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Littles,Bigs), 平均値からの隔たりによる整列(Littles,_平均値,Ls), 平均値からの隔たりによる整列(Bigs,_平均値,Bs), append(Ls,[X|Bs],Ys) . 平均値からの隔たりによる整列([],_,[]). 平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :- V is X - _平均値, V < U, 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!. 平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :- U is X - _平均値, X < Y, 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!. 平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,Ls,[[U,X]|Bs]) :- 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs) . 平均値からの隔たりにより分割する([],Y,_,[],[]). 整列した整数をスペース1つのみあけて1行で出力する([]) :- !. 整列した整数をスペース1つのみあけて1行で出力する([[A,B]]) :- write_formatted('%t\n',[A]) :- !. 整列した整数をスペース1つのみあけて1行で出力する([[B,A]|R]) :- write_formatted('%t ',[A]), 整列した整数をスペース1つのみあけて1行で出力する(R)