このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 130代目 #974 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # new と deleteを使ったプログラムの作成 #  人数、名前、点数を入力し、横棒グラフを表示するプログラムを作りなさい。 # ただし、グラフは5点刻みとし、点数は0点から100点の範囲とする。 # <実行画面> # 人数 : 3 # 1人目の名前 : A # 1人目の点数 : 80 # 2人目の名前 : B # 2人目の点数 : 55 # 3人目の名前 : C # 3人目の点数 : 95 # # 名( 点 )| 50 100 # --------+---------+---------+ # A ( 80)|**************** # B ( 55)|*********** # C ( 95)|******************* # 平均 77|*************** # :- op(800,xfx,人目の名前). :- op(800,xfx,人目の点数). :- dynamic([人目の名前/2,人目の点数/2]). /* 1 人目の名前 'A'. 1 人目の点数 80. 2 人目の名前 'B'. 2 人目の点数 55. 3 人目の名前 'C'. 3 人目の点数 95. */ '人数、名前、点数を入力し、横棒グラフを表示する。ただし、グラフは5点刻みとし、点数は0点から100点の範囲とする。' :- '入力する人数を得て、人数分の名前と点数を入力し、述語定義する', '見出し表示後に横棒グラフを表示する。ただし、グラフは5点刻みとし、点数は0点から100点の範囲とする。', '合計の横棒グラフを表示する。ただし、グラフは5点刻みとし、点数は0点から100点の範囲とする。'. '見出し表示後に横棒グラフを表示する。ただし、グラフは5点刻みとし、点数は0点から100点の範囲とする。' :- 見出し表示後に, '横棒グラフを表示する。ただし、グラフは5点刻みとし、点数は0点から100点の範囲とする。'. 見出し表示後に :- write(' 名(点)| 50 100\n--------+---------+---------+\n'). '横棒グラフを表示する。ただし、グラフは5点刻みとし、点数は0点から100点の範囲とする。' :- forall( 'N人目の名前、点数を得て、点数を星表現に変換する'(N,_名前,_点数,_星表現), '名前,点数,星表現を表示する'(_名前,_点数,_星表現)). '入力する人数を得て、人数分の名前と点数を入力し、述語定義する' :- '入力する人数を得て、'(_人数), '人数分の名前と点数を入力し、述語定義する'(_人数). '入力する人数を得て、'(_人数) :- write('入力する人数をいれてください : '), 整数を得る(_人数). '人数分の名前と点数を入力し、述語定義する'(_人数) :- between(1,_人数,N), '名前と点数を入力し、述語定義する'. '名前と点数を入力し、述語定義する' :- '名前と点数を入力し、'(_名前,_点数). '述語定義する'(_名前,_点数). '名前と点数を入力し、'(_名前,_点数) :- write('名前と点数を空白区切りで入力してください :: '), readln([_名前,_点数]). '述語定義する'(_名前,_点数) :- assertz(N 人目の名前 _名前), assertz(N 人目の点数 _点数), '合計の横棒グラフを表示する。ただし、グラフは5点刻みとし、点数は0点から100点の範囲とする。' :- 平均点を得てそれを星表現とする(_平均点,_星表現), '平均点、星表現の表示'(_平均点,_星表示). 平均点を得てそれを星表現とする(_平均点,_星表現) :- findavg(_点数,_ _人目の点数 _点数,_平均点), 点数を星表現に変換する(_平均点,_星表現). 'N人目の名前、点数を得て、点数を星表現に変換する'(N,_名前,_点数,_星表現) :- 'N人目の名前、点数を得る'(N,_名前,_点数), 点数を星表現に変換する(_点数,_星表現). 'N人目の名前、点数を得る'(N,_名前,_点数) :- N 人目の名前 _名前, N 人目の点数 _点数. 点数を星表現に変換する(_点数,_星表現) :- _星の数 is _点数 // 5, すべて同じ要素のならび(_星の数,_すべてが星のならび,'*'), atomic_list_concat(_すべてが星のならび,_星表現). '名前,点数,星表現を表示する'(_名前,_点数,_星表現) :- '名前を四桁に点数を二桁に固定する'(_名前,_点数,_四桁の名前,_二桁の点数), writef('%w(%w)|%w\n',[_四桁の名前,_二桁の点数,_星表現]). '名前を四桁に点数を二桁に固定する'(_名前,_点数,_四桁の名前,_二桁の点数) :- '名前を四桁に固定する'(_名前,_四桁の名前), '点数を二桁に固定する'(_点数,_二桁の点数). '名前を四桁に固定する'(_名前,_四桁の名前) :- atom_concat(_名前,' ',A), sub_atom(A,0,4,_,_四桁の名前). '点数を二桁に固定する'(_点数,_二桁の点数) :- atomic_list_concat([' ',_点数],A), sub_atom(A,_,2,0,_二桁の点数). '平均点、星表現の表示'(_平均点,_星表示) :- 平均点を二桁に固定する(_平均点,_二桁の平均点), writef('平均(%w)|%w\n',[_二桁の平均点,_星表現])). 平均点を二桁に固定する(_平均点,_二桁の平均点) :- atomic_list_concat([' ',_平均点],A), sub_atom(A,_,2,0,_二桁の平均点). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% すべて同じ要素のならび(_要素数,_すべて同じ要素のならび,_同じ要素) :- length(_すべて同じ要素のならび,_要素数), すべて同じ要素のならび(_すべて同じ要素のならび,_同じ要素). すべて同じ要素のならび([],_). すべて同じ要素のならび([_同じ要素|_すべて同じ要素の残りならび],_同じ要素) :- すべて同じ要素のならび(_すべて同じ要素の残りならび,_同じ要素). findavg(_集約項,_目標,_相加平均) :- findall(_集約項,_目標,_値ならび), sum_list(_値ならび,_合計), 相加平均(_値ならび,_合計,_相加平均). 相加平均(_値ならび,_合計,_相加平均) :- length(_値ならび,_ならびの長さ), _相加平均 is _合計 / _ならびの長さ. 整数を得る(_整数) :- 行入力(_行), atom_number(_整数), integer(_整数). 行入力(_行) : read_line_to_codes(current_input,_コードならび), atom_codes(_行,_コードならび).