このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1342966104/592
#  [1] 授業単元:データ構造入門 
#  [2] 問題文(含コード&リンク):問題文が長いためこちらに記載しました http://ime.nu/ideone.com/R8gaZ 
#  
#  【問題2】
#  線形探索法で目的データを探索するプログラムを作成せよ。
#  データの数をキーボード入力し、その個数だけの疑似乱数を発生させてデータを配列に格納し、
#  データとその添え字番号を一覧表示する。次に目的データ(探索データ)をキーボード入力し、
#  線形探索法で探索し、見つかった場合その配列の添え字番号を表示し、見つからなかった場合は
#  「みつからなかったこと」を表示する。なお、データ数は最大50として、50をマクロ定義
#  せよ。また、データの探索と作成には、次の関数を作成して使うこと。
#   
#  ・int linear_search(int data[],int key,int num)
#  この関数はnum個のデータが格納された配列dataの中から、線形探索を用いて目的データkeyと等しい
#  値を探し、見つかった場合にはその配列要素を返却し、見つからなかった場合には-1を返却する。
#   
#  ・void random_data(int data[],int num)
#  この関数は整列していないnum個のデータを配列dataに格納する関数。疑似乱数rand()を用いよ。
#  データの値は0からnum-1までの整数で全て異なる値とせよ。
#  ※乱数列を変更するにはvoid srand(seed)を実行する。seedの値が異なると、ことなる乱数列が
#  得られることを確認しよう。

'データの数をキーボード入力し、その個数だけの疑似乱数を発生させてデータを配列に格納し、データとその添え字番号を一覧表示する。 次に目的データ(探索データ)をキーボード入力し、線形探索法で探索し、見つかった場合その配列の添え字番号を表示し、見つからなかった場合は「みつからなかったこと」を表示する。 なお、データ数は最大50として、50をマクロ定義せよ。' :-
        'データの数をキーボード入力し、その個数だけの疑似乱数を発生させてデータを配列に格納し、データとその添え字番号を一覧表示する。なお、データ数は最大50とする'(_データの数,_データならび),
        '次に目的データ(探索データ)をキーボード入力し、線形探索法で探索し、見つかった場合その配列の添え字番号を表示し、見つからなかった場合は「みつからなかったこと」を表示する。'(_データの数,_データならび).


'データの数をキーボード入力し、その個数だけの疑似乱数を発生させてデータを配列に格納し、データとその添え字番号を一覧表示する。' :-
        'データ数は最大50としてデータの数をキーボード入力し'(_データの数),
        'その個数だけの疑似乱数を発生させてデータを配列に格納し'(_データの数,_データならび),
        'データとその添え字番号を一覧表示する'(_データの数,_データならび).

'データ数は最大50としてデータの数をキーボード入力し、' :-'(_データの数) :-
        整数を得る(データの数,between(1,50,_データ数),_データの数).

'その個数だけの疑似乱数を発生させてデータを配列に格納し'(_データの数,_データならび) :-
        length(_データならび,_データの数),
        findall(N,(
                    member(N,_データならび),
                    N is random(_データの数) + 1),
                _データならび).

'データとその添え字番号を一覧表示する'(_データの数,_データならび) :-
        nth1(_添字番号,_データならび,_データ),
        writef('%t: %t\n',[_添字番号,_データ]),
        _添字番号 = _データの数,!.


'次に目的データ(探索データ)をキーボード入力し、線形探索法で探索し、見つかった場合その配列の添え字番号を表示し、見つからなかった場合は「みつからなかったこと」を表示する。'(_データの数,_データならび) :-
        '目的データ(探索データ)をキーボード入力し'(_データの数,_目的データ),
        '線形探索法で探索し、見つかった場合その配列の添え字番号を表示し、見つからなかった場合は「みつからなかったこと」を表示する'(_目的データ,_データならび).


'目的データ(探索データ)をキーボード入力し'(_データの数,_目的データ) :-
        swritef(_制限表示,'1から%tまでの範囲の任意の数',[_データ数]),
        write('目的データ(探索データ)を入力してください : '),
        整数を得る(_制限表示,_目的データ).

'線形探索法で探索し、見つかった場合その配列の添え字番号を表示し、見つからなかった場合は「みつからなかったこと」を表示する'(_目的データ,_データならび) :-
        '線形探索法で探索し、見つからなかった場合は「みつからなかったこと」を表示する'(_目的データ,_データならび),!.
'線形探索法で探索し、見つかった場合その配列の添え字番号を表示し、見つからなかった場合は「みつからなかったこと」を表示する'(_目的データ,_データならび) :-
        '線形探索法で探索し、見つかった場合その配列の添え字番号を表示し'(_目的データ,_データならび).

'線形探索法で探索し、見つかった場合その配列の添え字番号を表示し'(_目的データ,_データならび) :-
        '見つからなかった場合は「みつからなかったこと」を表示する'(_目的データ,_データならび),!.

'線形探索法で探索し、見つからなかった場合は「みつからなかったこと」を表示する'(_目的データ,_データならび) :-
        \+(nth1(_添字番号,_データならび,_目的データ)),
        writef('目的データ %t はデータならびの中に見つかりません\n',[_目的データ]),!.

'線形探索法で探索し、見つかった場合その配列の添え字番号を表示し'(_目的データ,_データならび) :-
        nth1(_添字番号,_データならび,_目的データ),
        writef('%t: %t\n',[_添字番号,_目的データ),
        fail.
'線形探索法で探索し、見つかった場合その配列の添え字番号を表示し'(_目的データ,_データならび).