このディレクトリの索引 # [1] 授業単元:プログラミング # [2] 問題文( # 問題1 # キーボードから入力した5 件のデータのうち、最大値と最小値を調べ、最後に # 表示してください。なお、プログラム作成時は以下の仕様に従ってください。 # ファイル名: kadai2.c # 【 問題作成時の注意点 】 # ・キーボードから入力したデータはint 型配列で管理してください。 # ・データを入力する際にはscanf 関数を利用してください。 # ・画面にメッセージを表示する際にはprintf 関数を利用してください。 # なお、結果表示時は、最大値/最小値となる要素の添字もあわせて # 表示してください。また、最大値/最小値が複数ある場合は、 # すべての要素を表示してください。 # 【 実行時のイメージ 】 # ----------------------------- # data[0] ... 69 ←「...」の後ろはキーボード入力部 # data[1] ... 91 ←「...」の後ろはキーボード入力部 # data[2] ... 91 ←「...」の後ろはキーボード入力部 # data[3] ... 72 ←「...」の後ろはキーボード入力部 # data[4] ... 86 ←「...」の後ろはキーボード入力部 # Max : data[1] = 91 # Max : data[2] = 91 # Min : data[0] = 69 # ----------------------------- # # [3] 環境 # [3.1] OS: Windows # [3.2] コンパイラ名とバージョン: gcc 3.4 # [3.3] 言語: C++ # [4] 期限: ([2006年11月2日17:30まで # [5] その他の制限:なし # 'キーボードから入力した5 件のデータのうち、最大値と最小値を調べ、最後に 表示してください。なお、プログラム作成時は以下の仕様に従ってください。 ファイル名: kadai2.c 【 問題作成時の注意点 】 ・キーボードから入力したデータはint 型配列で管理してください。 ・データを入力する際にはscanf 関数を利用してください。 ・画面にメッセージを表示する際にはprintf 関数を利用してください。 なお、結果表示時は、最大値/最小値となる要素の添字もあわせて 表示してください。また、最大値/最小値が複数ある場合は、 すべての要素を表示してください。 【 実行時のイメージ 】 ----------------------------- data[0] ... 69 ←「...」の後ろはキーボード入力部 data[1] ... 91 ←「...」の後ろはキーボード入力部 data[2] ... 91 ←「...」の後ろはキーボード入力部 data[3] ... 72 ←「...」の後ろはキーボード入力部 data[4] ... 86 ←「...」の後ろはキーボード入力部 Max : data[1] = 91 Max : data[2] = 91 Min : data[0] = 69 ----------------------------- ' :- 'キーボードから入力した5 件のデータのうち、最大値と最小値を調べ、最後に表示してください。'. 'キーボードから入力した5 件のデータのうち、最大値と最小値を調べ、最後に表示してください。' :- キーボードから入力した5 件のデータのうち(_5件のデータ), 最大値と最小値を調べ(_5件のデータ,_最大値情報のならび,_最小値の情報ならび), 最大値の情報を表示する(_最大値の情報ならび), 最小値の情報を表示する(_最小値の情報ならび). キーボードから入力した5 件のデータのうち(_5件のデータ) :- length(_5件のデータ,5), findall(_データ,( append(L0,[_|_],_5件のデータ), データを得る(L0,_データ)), _5件のデータ). データを得る(L0,_データ) :- length(L0,_0基準位置), writef('data[%t] ... ',[_0基準位置]), 整数を得る(整数,_データ),!. 最大値と最小値を調べ(_5件のデータ,_最大値の情報ならび,_最小値の情報ならび) :- 位置情報を持った最大値(_5件のデータ,_最大値の情報ならび), 位置情報を持った最小値(_5件のデータ,_最小値の情報ならび). 位置情報を持った最大値(_5件のデータ,_最大値の情報ならび) :- findall([_位置情報,_最大値],( append(L0,[_最大値|R],_5件のデータ), すべてが等しいか小さい(L0,_最大値), すべてが等しいか小さい(R,_最大値), length(L0,_位置情報)), _最大値の情報ならび). 位置情報を持った最小値(_5件のデータ,_最小値の情報ならび) :- findall([_位置情報,_最大値],( append(L0,[_最大値|R],_5件のデータ), すべてが等しいか大きい(L0,_最小値), すべてが等しいか大きい(R,_最小値), length(L0,_位置情報)), _最小値の情報ならび). すべてが等しいか小さい([],_). すべてが等しいか小さい([A|R],_基準値) :- A @=< _基準値, すべてが等しいか小さい(R,_基準値). すべてが等しいか大きい([],_). すべてが等しいか大きい([A|R],_基準値) :- A @>= _基準値, すべてが等しいか大きい(R,_基準値). 最大値の情報を表示する(_最大値の情報ならび) :- append(_,[[_0基準位置,_最大値]|R],_最大値の情報ならび), writef('Max : data[%t] = %t\n',[_0基準位置,_最大値]), R = []. 最小値の情報を表示する(_最小値の情報ならび) :- append(_,[[_0基準位置,_最小値]|R],_最小値の情報ならび), writef('Min : data[%t] = %t\n',[_0基準位置,_最小値]), R = [].