このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 129代目 #473 # [1] 授業単元:プログラミング論 # [2] 問題文:入力ストリームから読み込んだデータ文字列を、 # データベースに格納する前にキューに一時的に格納するプログラムを # 作成する。このとき、データをまとめたデータ文字列を一つずつ、キューへ # エンキューしたり、デキューしたりする過程が分かるプログラムを作成する。 # なお、キューを実現するライブラリは、キューのための別のヘッダにまとめる。 # [そのほか] # ・入力ストリームから読み込んだデータ文字列を、キューにエンキューしたり、 # デキューしたりするたびにデータベースに格納された全データを表示する。 # ・構造体オブジェクトは動的な記憶域に生成する。 # ・生徒の名前、試験の点数を構造体オブジェクトに格納することとする。 # ・関数の処理にコメントをつけて、キューをどのように実現しているか、 # そのプログラムの処理内容が分かるようにする。 # [このプログラムの流れ] # (1)ファイルやキーボードなどの入力ストリームから # データをデータ文字列として読み込む # (2)このデータ文字列をキューに一時的に蓄える # (3)キューからデータ文字列を取り出す # (4)このデータ文字列からそれぞれデータを取り出して # 文字列や数値データに変換する # (5)変換したデータをデータベース(構造体の配列など)に # 格納してまとめて管理する # (6)このデータベースからデータを参照し、ディスプレイに出力する % 作られたキューは引数として持ち回る t561(Instrem,Q2) :- 新しいキューを作る(Q1), get_char(_入力,Char), t561_2(_入力,Char,_文字列,_終了文字), t561_1(_入力,文字列,_終了文字,Q1,Q2), listing(データベース). t561_1(_入力,_,end_of_file,Q,Q) :- !. t561_1(_入力,_文字列,'\n',Q1,Q2) :- キューに要素を追加する(_文字列,Q1,Q3), キューが空になるまで連続して取り出す(L,Q3,Q2), P =.. [データベース|L], assertz(P), listing(データベース),!. t561_1(Instream,_文字列,_区切り文字,Q1,Q2) :- member(_区切り文字,[' ',',']), キューに要素を追加する(_文字列,Q1,Q3), get_char(Instream,Char), t561_2(Instream,_文字列2,_終了文字), t561_1(Instream,_文字列2,_終了文字,Q3,Q2),!. t561_1(Instream,_文字列,_終了文字,Q1,Q2) :- get_char(Instream,Char), t561_2(Instream,Char,_文字列2,_終了文字2), t561_1(Instream,_文字列2,_終了文字2,Q1,Q2). t561_2(Instream,'\n','\n',[]) :- !. t561_2(Instream,' ',' ',[]) :- t561_2(Instream,',',',',[]) :- !. t561_2(Instream,C,_終了文字,[C|R]) :- get_char(Instream,C2), t561_2(Instream,C2,_終了文字,R). 新しいキューを作る(X-X). キューは空である(X-Y) :- X == Y. キューに要素を追加する(_要素,X-[_要素|Y],X-Y). キューから要素を取り出す(_要素,[_要素|X]-Y,X-Y). キューに名前を付けて保存する(_キュー保存名,_キュー) :- retract(名前を付けて保存されたキュー(_キュー保存名,_)), assertz(名前を付けて保存されたキュー(_キュー保存名,_キュー)),!. キューに名前を付けて保存する(_キュー保存名,_キュー) :- assertz(名前を付けて保存されたキュー(_キュー保存名,_キュー)),!. 要素を連続してキューに追加する([],_追加されたキュー,_追加されたキュー) :- !. 要素を連続してキューに追加する([_要素|R],_キュー_1,_追加されたキュー) :- キューに要素を追加する(_要素,_キュー_1,_キュー_2), 要素を連続してキューに追加する(R,_キュー_2,_追加されたキュー) :- キューが空になるまで連続して取り出す([],_キュー,_キュー) :- キューは空である(_キュー),!. キューが空になるまで連続して取り出す([_要素|R],_キュー_1,_取り出されたキュー) :- キューから要素を取り出す(_要素,_キュー_1,_キュー_2), キューが空になるまで連続して取り出す(R,_キュー_2,_取り出されたキュー).