このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1328276597/734
#  [1]C言語(やさしいC 輪講) 
#  [2]問題文: 
#  次のコードは、コンソールから入力された異なる5個の1から20までの数を大きい順に並べ替えて出力するプログラムです。 
#  ([1])〜([11])内を埋めてコードを完成させなさい。 
#  #include <stdio.h> 
#  #include <stdlib.h> 
#  static int readNumber(char *msg,int min,int max,int m1,int m2,int m3,int m4){ 
#  char console[256],([1]);([2]) result; 
#   for(;;){ 
#    printf("%s",msg); 
#    t=fgets( ([3]),stdin); 
#    if(t==NULL)([5]); 
#    result=atoi(([3])); 
#                              if(result<([6]))([5]);if(result>([7]))([5]); 
#    if(m1==result){ 
#     printf("その数は使われています\n"); 
#     ([5]); 
#    } 
#    ([8]) 
#    return result; 
#   } 
#  } 
#  int main(void){ 
#  int m; 
#   m=readNumber("1個目:1以上20以下の整数を入力してください:",([9]),([10]),0,0,0,0); 
#   ([11]) 
#   return 0; 
#  } 
#  [3] Windows Vistaですがコンパイラとかよくわかりません。 
#  [4] 4月の最初のゼミまで(3年次・4年次と連続履修です) 
#  [5]ローカル変数はステートメントが始まる前にすべて宣言しなければならないと注意を受けました。よろしくお願いします。 
# 
# 

'コンソールから入力された異なる5個の1から20までの数を大きい順に並べ替えて出力する' :-
        'コンソールから入力された異なる5個の1から20までの数を'([],_異なる5個の1から20までの数),
        大きい順に並べ替えて出力する(_異なる5個の1から20までの数).

'コンソールから入力された異なる5個の1から20までの数を'(L,[]) :-
        length(L,5),!.
'コンソールから入力された異なる5個の1から20までの数を'(L,[_1から20までの数|R]) :-
        'コンソールから入力された異なる1から20までの数'(L,_1から20までの数),
        'コンソールから入力された異なる5個の1から20までの数を'([_1から20までの数|L],R).

'コンソールから入力された異なる1から20までの数'(L,_異なる5個の1から20までの数) :-
        write('異なる1から20までの数を入力して下さい : '),
        コンソールから入力された(Line),
        '異なる1から20までの数'(Line,L,_異なる5個の1から20までの数),!.
'コンソールから入力された異なる1から20までの数'(L,_異なる5個の1から20までの数) :-
        'コンソールから入力された異なる1から20までの数'(L,_異なる5個の1から20までの数).

コンソールから入力された(Line) :-
        get_line(Line).

'異なる1から20までの数'(Line,L,_異なる5個の1から20までの数) :-
        atom_to_term(Line,_数,_),
        '異なる'(_数,L),
        '1から20までの数'(Line,_数),!.

'異なる'(_数,L) :-
        \+(member(_数,L)),!.
'異なる'(_数,L) :-
        writef('入力された数%tは既に入力済みです。再入力をお願いします。\n',[_数]),
        fail.

'1から20までの数'(Line,_数) :-
        数(_数),
        '1から20までの'(_数),!.

'1から20までの'(_数) :-
        _数 >= 1,
        _数 =< 20,!.
'1から20までの'(_数) :-
        writef('入力された数%tは1から20の範囲にありません。再入力をお願いします。\n',[_数]),
        fail.

数(_,_数) :-
        number(_数),!.
数(Line,_数以外の項) :-
        writef('入力された %t からは数が得られません。再入力をお願いします\n',[Line]),
        fail.

大きい順に並べ替えて出力する(_異なる5個の1から20までの数) :-
        大きい順に並べ替えて(_異なる5個の1から20までの数,_大きい順に整列したならび),
        出力する(_大きい順に整列したならび).

大きい順に並べ替えて(L1,L2) :-
        大きい順に並べ替えて(L1,[],L2).

大きい順に並べ替えて([],L,L).
大きい順に並べ替えて([A|R],L1,L) :-
        大きい順の挿入(A,L1,L2),
        大きい順に並べ替えて(R,L2,L).

大きい順の挿入(A,[],[A]).
大きい順の挿入(A,[B|R1],[A,B|R1]) :-
        A >= B,!.
大きい順の挿入(A,[B|R1],[B|R2]) :-
        大きい順の挿入(A,R1,R2).

出力する(_大きい順に整列したならび) :-
        swritef(_表示する数列,'%t,%t,%t,%t,%t\n',_大きい順に整列したならび),
        writef('%t\n',[_表示する数列]).