このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 132代目 #50 # [1] 授業単元:C言語基礎 # [2] 問題文(含コード&リンク): # 1.数値の入力されたテキストファイルを引数から読み込み、合計を求めるプログラムを作れ。 # 各行を2次元配列に格納する。何も入力されてない行か、0のみの行があれば読み込み終了。その後計算を行う。 # 〜入力ファイル例〜 # 908 # 29 # 3095 # 5968 # # のように改行で終わるか、 # 9824 # 2554 # 4869 # 0 # で終了 '1.数値の入力されたテキストファイルを引数から読み込み、合計を求める。 各行を2次元配列に格納する。何も入力されてない行か、0のみの行があれば読み込み終了。その後計算を行う。' :- '引数からファイル名を得て、テキストファイルを読み込み、数列ならびを得る。何も入力されてない行か、0のみの行があれば読み込み終了。'(_数列ならび), 合計を求める(_数列ならび,_合計), writef('%w\n',[_合計]). '引数からファイル名を得て、テキストファイルを読み込み、数列ならびを得る。何も入力されてない行か、0のみの行があれば読み込み終了。'(_数列ならび) :- '引数からファイル名を得て、'(_テキストファイル名), 'テキストファイルを読み込み、数列ならびを得る。何も入力されてない行か、0のみの行があれば読み込み終了。'(_テキストファイル名,_数列ならび). '引数からファイル名を得て、'(_テキストファイル名) :- current_prolog_flag(argv,[_テキストファイル名]). 'テキストファイルを読み込み、数列ならびを得る。何も入力されてない行か、0のみの行があれば読み込み終了。'(_テキストファイル名,_数列ならび) :- open(_テキストファイル名,read,_入力), '読み込み、数列ならびを得る。何も入力されてない行か、0のみの行があれば読み込み終了。'(_入力,_数列ならび), close(_入力). '読み込み、数列ならびを得る。何も入力されてない行か、0のみの行があれば読み込み終了。'(_入力,_数列ならび) :- findall(_数列,( 行を連続して読み込む(_入力,_行), ('何も入力されてない行か、0のみの行があれば読み込み終了。'(_行),!,fail;'行を項目区切り、数値変換できるものは変換する。'(_行,[' ',','],_数列))),_数列ならび). 行を連続して読み込む(_入力,_行) :- repeat, 行入力(_入力,_行). 行入力(_入力,_行) :- read_line_to_codes(_入力,_コードならび), atom_codes(_行,_コードならび). '行を項目区切り、数値変換できるものは変換する。'(_行,_区切り文字列ならび,_数列) :- 項目区切り(_行,_区切り文字列ならび,_項目ならび), 文字列ならびの中で数値に変換可能なものは変換する(_項目ならび,_数列). '何も入力されてない行か、0のみの行があれば読み込み終了。'(''). '何も入力されてない行か、0のみの行があれば読み込み終了。'('0'). 合計を求めて表示する(_数列ならび,_合計) :- 合計を求めて(_数列ならび,_合計), 表示する(_合計). 合計を求めて(_数列ならび,_合計) :- flatten(_数列ならび,_数ならび), sum_list(_数ならび,_合計). 表示する(_合計) :- writef('合計 :: %w\n',[_合計]). 項目区切り(_文字列,_区切り文字列ならび,_区切られた文字列ならび) :- 項目区切り(_文字列,_区切り文字列ならび,_使われている区切り文字ならび,_区切られた文字列ならび_1), 文字列ならびの中で数値に変換可能なものは変換する(_区切られた文字列ならび_1,_区切られた文字列ならび). 項目区切り(_文字列,_区切り文字列ならび,_使われている区切り文字ならび,_区切られた文字列ならび) :- 先頭から区切り文字列で区切って行く(_文字列,_区切り文字列ならび,_使われている区切り文字ならび,_区切られた文字列ならび),!. 項目区切り(_文字列,_,[],[_文字列]). 先頭から区切り文字列で区切って行く(_文字列,_区切り文字列ならび,[_区切り文字列|R1],[_前文字列|R2]) :- '区切り文字列で前文字列、後文字列に区切る'(_文字列,_区切り文字列ならび,_前文字列,_区切り文字列,_後文字列), 項目区切り(_後文字列,_区切り文字列ならび,R1,R2). '区切り文字列で前文字列、後文字列に区切る'(_文字列,_区切り文字列ならび,_前文字列,_区切り文字列,_後文字列) :- 副文字列(_文字列,_前文字列,_区切り文字列,_後文字列), member(_区切り文字列,_区切り文字列ならび). 副文字列(_文字列,_前文字列,_副文字列,_後文字列) :- atom_concat(_前文字列,_残り文字列,_文字列), atom_concat(_副文字列,_後文字列,_残り文字列). 文字列ならびの中で数値に変換可能なものは変換する(_文字列ならび,_項目ならび) :- findall(_項目,( 文字列を取り出し数値に変換可能なものは変換する(_文字列ならび,_項目)),_項目ならび). 文字列を取り出し数値に変換可能なものは変換する(_文字列ならび,_項目) :- member(_文字列,_文字列ならび), 数値に変換可能なものは変換する(_文字列,_項目). 数値に変換可能なものは変換する(_文字列,_項目) :- atom_number(_文字列,_項目),!. 数値に変換可能なものは変換する(_文字列,_文字列).