このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 126代目 #792 # [1] 授業単元: プログラミング演習 # [2] 問題文(含コード&リンク): 1~100の任意のN個の整数値を一次元配列に読み込み、そ # の合計値と平均値を求め、 #                80~100,70~79,60~69,59以下の個数をそれぞれ出力する # プログラムを作りなさい。 #                (1)入力データ数(Nは10以上とする) #                (2)入力データ値(配列より読み出し、同じ値は使わない) #                (3)入力データの合計値、平均値 #                (4)入力データについて各ランクの個数 # #                (1)~(3)まではできたのですが、(4)がわかりません。 # #                http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9352.txt #                ↑これの続きにお願いします! '1~100の任意のN個の整数値を一次元配列に読み込み、その合計値と平均値を求め、80~100,70~79,60~69,59以下の個数をそれぞれ出力する' :- '1~100の任意のN個の整数値を一次元配列に読み込み、その合計値と平均値を求め、80~100,70~79,60~69,59以下の個数をそれぞれ出力する'(_合計,_平均,_データランクリスト), 集計項目の表示(_合計,_平均,_データランクリスト). '1~100の任意のN個の整数値を一次元配列に読み込み、その合計値と平均値を求め、80~100,70~79,60~69,59以下の個数をそれぞれ出力する'(_合計,_平均,_データランクリスト) :- 入力データ数を読み込む(_入力データ数), '入力データ数分、1~100の任意の整数を読み込む'(_入力データ数,[],_入力データ値リスト), 入力データの集計(_入力データ値リスト,_入力データ数,[0,0,0,0],_データランクリスト,0,_合計,_平均). 集計項目の表示(_合計,_平均,_データランクリスト) :- writef('合計: %w\n平均: %w\n',[_合計,_平均]), length(_データランクリスト,_ランクの数), 入力データについて各ランクの個数(_ランク数,_データランクリスト). 入力データについて各ランクの個数(_ランク数,データランクリスト) :- between(1,_ランク数,N), データランク(_,N,_ランク表示), nth1(N,_データランクリスト,_ランク集計値). writef('%t: %t\n',[_ランク表示,_ランク集計値]), N=_ランクの数. データランク(N,1,'80~100') :- N>=80,N=<100. データランク(N,2,'70~79') :- N>=70,N=<79. データランク(N,3,'60~69') :- N>=60,N=<69. データランク(N,4,'59以下') :- N=<59. 入力データの集計([],_入力データ数,_ランクL,_ランクL,_合計,_合計,_平均) :- _平均 is _合計 / _入力データ数,!. 入力データの集計([N|R],_入力データ数,_ランクL1,_ランクL,_合計_1,_合計,_平均) :- データランク(N,_位置,_), 位置要素に加算(_位置,1,_ランクL1,_ランクL2), 入力データの集計(R,_入力データ数,_ランクL2,_ランクL,_合計2,_合計,_平均). 位置要素に加算(1,N,[A|R],[B|R]) :- B is A+N,!. 位置要素に加算(P,N,[A|R1],[A|R2]) :- P2 is P-1,位置要素に加算(P2,N,R1,R2). 入力データ数を読み込む(_入力データ数) :- write('入力データ数を設定してください : '), 行入力(_行), 入力データ数診断(_行,_入力データ数),!. 入力データ数を読み込み(_入力データ数) :- 入力データ数を読み込み(_入力データ数). 入力データ数診断(_行,_入力データ数) :- atom_number(_行,_入力データ数), integer(_入力データ数), _入力データ数 >= 10,!. 入力データ数診断(_行,_入力データ数) :- writef('入力された%tからは適切なデータ数が得られませんでした!\n10以上の整数を指定してください\n',[_行]), fail. '入力データ数分、1~100の任意の整数を読み込む'(0,L,[]) :- !. '入力データ数分、1~100の任意の整数を読み込む'(P,L,[_整数|R]) :- 整数を得る('整数を入れてください(1~100)',between(1,100,_整数),_整数), P2 is P-1, '入力データ数分、1~100の任意の整数を読み込む'(P2,[N|L],R),!. '入力データ数分、1~100の任意の整数を読み込む'(P,L,X) :- '入力データ数分、1~100の任意の整数を読み込む'(P,L,X). '1~100の任意の整数入力検査'(_行,N) :- atom_number(_行,N), integer(N), between(1,100,N). 行入力(_行) :- read_line_to_codes(current_input,_コードならび), atom_codes(_行,_コードならび). 整数を得る('整数を入れてください(_催促,_評価,_整数) :- writef('%w : ',[_催促]), 行入力(_行), 整数入力検査(_行,_整数), 整数評価(_評価),!. 整数入力検査(_行,_整数) :- atom_number(_行,_整数), integer(_整数),!. 整数入力検査(_行,_) :- writef('入力された %w からは整数が得られません。再入力をお願いします。\n',[_行]), fail. 整数評価(_評価) :- call(_評価),!. 整数評価(_評価) :- writef('評価 %t が偽。\n',[_評価]), fail.