このディレクトリの索引

# 出典 :: http://chomework.sakura.ne.jp/log1/1137522945_02.html (レス番号110) # [1] 授業単元:プログラミング1 # [2] 問題文(含コード&リンク): # 学籍番号と試験の点数のペアーを入力するものとする(「0 0」を入力すると終了し,データ数は100以下である)。 # なお,データは,学籍番号順に入力されるわけではない。 # このとき,試験の点数の上位11人の学籍番号と試験の点数を,点数が高い順に出力するプログラムを書け。 # ただし,同じ点数の学生がいた場合は,最初に入力されたデータを優先するものとする。 # 結果は,学籍番号と点数を1つ以上のスペースで区切り,1行に一人ずつ出力せよ。 上位11名 :- '学籍番号と試験の点数のペアーを入力するものとする(「0 0」を入力すると終了し,データ数は100以下である)。 なお,データは,学籍番号順に入力されるわけではない。 このとき,試験の点数の上位11人の学籍番号と試験の点数を,点数が高い順に出力するプログラムを書け。 ただし,同じ点数の学生がいた場合は,最初に入力されたデータを優先するものとする。 結果は,学籍番号と点数を1つ以上のスペースで区切り,1行に一人ずつ出力せよ。'. '学籍番号と試験の点数のペアーを入力するものとする(「0 0」を入力すると終了し,データ数は100以下である)。 なお,データは,学籍番号順に入力されるわけではない。 このとき,試験の点数の上位11人の学籍番号と試験の点数を,点数が高い順に出力するプログラムを書け。 ただし,同じ点数の学生がいた場合は,最初に入力されたデータを優先するものとする。 結果は,学籍番号と点数を1つ以上のスペースで区切り,1行に一人ずつ出力せよ。' :- '学籍番号と試験の点数のペアーを入力するものとする(「0 0」を入力すると終了し,データ数は100以下である)。 なお,データは,学籍番号順に入力されるわけではない。'(_学籍番号と試験の点数のペアーならび), '試験の点数の上位11人の学籍番号と試験の点数を,点数が高い順に出力する。 ただし,同じ点数の学生がいた場合は,最初に入力されたデータを優先するものとする。 結果は,学籍番号と点数を1つ以上のスペースで区切り,1行に一人ずつ出力せよ。'(_学籍番号と試験の点数のペアーならび). '学籍番号と試験の点数のペアーを入力するものとする(「0 0」を入力すると終了し,データ数は100以下である)。 なお,データは,学籍番号順に入力されるわけではない。'(_学籍番号と試験の点数のペアーならび) :- findnsols(100,[_学籍番号,_試験の点数],( 連続して学籍番号と試験の点数をスペース区切りで入力する(_学籍番号,_試験の点数), ([_学籍番号,_試験の点数] = [0,0],!,fail;true)),_学籍番号と試験の点数のペアーならび). 連続して学籍番号と試験の点数をスペース区切りで入力する(_学籍番号,_試験の点数) :- repeat, 学籍番号と試験の点数をスペース区切りで入力する(_学籍番号,_試験の点数). 学籍番号と試験の点数をスペース区切りで入力する(_学籍番号,_試験の点数) :- write('学籍番号と試験の点数をスペース区切りで入力してください : '), readln(L), 学籍番号と試験の点数を得る(L,_学籍番号,_試験の点数). 学籍番号と試験の点数を得る([_学籍番号,_試験の点数],_学籍番号,_試験の点数) :- !. 学籍番号と試験の点数を得る(L,_学籍番号,_試験の点数) :- 'SWI-Prologのバグで、学籍番号が全角文字の場合、文字ごとに分離されてしまうから、それを結合し直す。'(L,_学籍番号,_試験の点数). 'SWI-Prologのバグで、学籍番号が全角文字の場合、文字ごとに分離されてしまうから、それを結合し直す。'(L,_学籍番号,_試験の点数) :- append([_文字ならび,[_試験の点数]],L), atomic_list_concat(_文字ならび,_学籍番号). '試験の点数の上位11人の学籍番号と試験の点数を,点数が高い順に出力する。 ただし,同じ点数の学生がいた場合は,最初に入力されたデータを優先するものとする。 結果は,学籍番号と点数を1つ以上のスペースで区切り,1行に一人ずつ出力せよ。'(_学籍番号と試験の点数のペアーならび) :- 点数が高い順に試験の点数をならべる(_学籍番号と試験の点数のペアーならび,_降順に整列した点数ならび), '試験の点数の上位11人の学籍番号と試験の点数を,点数が高い順に出力する。'(_学籍番号と試験の点数のペアーならび,_降順に整列した点数ならび). 点数が高い順に試験の点数をならべる(_学籍番号と試験の点数のペアーならび,_降順に整列した点数ならび) :- 試験の点数をならべる(_学籍番号と試験の点数のペアーならび,_昇順に整列した点数ならび) :- 点数が高い順に(_昇順に整列した点数ならび,_降順に整列した点数ならび). 試験の点数をならべる(_学籍番号と試験の点数のペアーならび,_昇順に整列した点数ならび) :- setof(_試験の点数,[_学籍番号,_試験の点数] ^ member([_学籍番号,_試験の点数],_学籍番号と試験の点数のペアーならび),_昇順に整列した点数ならび). 点数が高い順に(_昇順に整列した点数ならび,_降順に整列した点数ならび) :- reverse(_昇順に整列した点数ならび,_降順に整列した点数ならび). '試験の点数の上位11人の学籍番号と試験の点数を,点数が高い順に出力する。'(_学籍番号と試験の点数のペアーならび,_降順に整列した点数ならび) :- '試験の点数の上位11人の学籍番号と試験の点数を,点数が高い順に'(_学籍番号と試験の点数のペアーならび,_降順に整列した点数ならび,_上位11名ならび), '出力する。'(_上位11名ならび). '試験の点数の上位11人の学籍番号と試験の点数を,点数が高い順に'(_学籍番号と試験の点数のペアーならび,_降順に整列した点数ならび,_上位11名ならび) :- findnsols(11,[_学籍番号,_点数],( 点数が高い順にしかも同点の場合は入力の早い順にペアーを取りだす(_学籍番号と試験の点数のペアーならび,_降順に整列した点数ならび,_学籍番号,_点数)),_上位11名ならび),!. 点数が高い順にしかも同点の場合は入力の早い順にペアーを取りだす(_学籍番号と試験の点数のペアーならび,_降順に整列した点数ならび,_学籍番号,_試験の点数) :- member(_試験の点数,_降順に整列した点数ならび), member([_学籍番号,_試験の点数],_学籍番号と試験の点数のペアーならび). '出力する。'(_上位11名ならび) :- forall( member([_学籍番号,_試験の点数],_上位11名ならび), writef('%w %w\n',[_学籍番号,_試験の点数])).