このディレクトリの索引

# 出典 :: C言語の宿題片付けます 139代目 #160 # [1]プログラミング演習 # [2]ttp://www.comm.info.eng.osaka-cu.ac.jp/~sugi/C_lang2/C6.htmlの # [問題6-2]はこのページの本文の指示通りにやるとどうなるのでしょうか? # [3.1]Linux環境 # [3.2] gcc # [3.3]C言語 # [3.4]今日の午後9時 # # よろしくお願いします # # # [ 問題6‐2 ] # 上の問題で定義した TIME型の構造体変数2個を引数として,両者の和を TIME型の値として返す関数 time_add() を作成しなさい.ただし,この関数の第一行を次のように定めます. # TIME time_add(TIME t1, TIME t2) # 次に,「時間の長さ」(日数,時,分の組)を繰り返しキーボードから読み込み,読み込むたびに # それまでの「時間の長さ」の総和を出力するプログラムを,関数 time_add() を引用して作成しなさい. # なお,最後に負の数を入力すれば実行を停止するようにすること.このプログラムの動作は,例えば # 次のようになります. # > a.out # (day, hour, minute)? 3 12 44 # sum = 3 12 44 # (day, hour, minute)? 1 22 54 # sum = 5 11 38 # (day, hour, minute)? 8 21 0 # sum = 14 8 38 # (day, hour, minute)? -1 -1 -1 ( ← 負の数を入力すれば停止) # > # (ヒント)各メンバーどうしの和をとり,その結果が上記の値の範囲を超える場合は「繰り上がり」の # 処理が必要になります.ただし繰り上がる値は1か0しかないので,if文などを用いて比較的簡単に # 書くことができます.繰り返しの部分は,例えば while(1){...} の無限ループを作り,負の数が # 入力されたら break; でループから出るなどの方法が考えられます. 入力された時間の総和を計算する(_累計日,_累計時,_累計分) :- 日・時・分の入力(_日,_時,_分), 入力された時間の総和を計算する(_日,_時,_分,0,0,0,_累計日,_累計時,_累計分). 入力された時間の総和を計算する(_日,_時,_分,_累計日,_累計時,_累計分,_累計日,_累計時,_累計分) :- 負数が入力されたら終了します(_日,_時,_分),!. 入力された時間の総和を計算する(_日,_時,_分,_累計日1,_累計時1,_累計分1,_累計日,_累計時,_累計分) :- 日・時・分の加算(_日,_時,_分,_累計日1,_累計時1,_累計分1,_累計日2,_累計時2,_累計分2), 日・時・分の入力(_日2,_時2,_分2), 入力された時間の総和を計算する(_日2,_時2,_分2,_累計日2,_累計時2,_累計分2,_累計日,_累計時,_累計分). 日・時・分の加算(_日,_時,_分,_累計日1,_累計時1,_累計分1,_累計日2,_累計時2,_累計分2) :- _累計時1 >= 24, _累計時2 is _累計時1 - 24, _累計日2 is _累計日1 + 1, 日・時・分の加算(_日,_時,_分,_累計日2,_累計時2,_累計分1,_累計日2,_累計時2,_累計分2). 日・時・分の加算(_日,_時,_分,_累計日1,_累計時1,_累計分1,_累計日,_累計時,_累計分) :- _累計分1 >= 60, _累計分2 is _累計分1 - 60, _累計時2 is _累計時1 + 1, 日・時・分の加算(_日,_時,_分,_累計日1,_累計時2,_累計分2,_累計日,_累計時,_累計分). 日・時・分の加算(0,0,0,_累計日,_累計時,_累計分,_累計日,_累計時,_累計分) :- !. 日・時・分の加算(_日,_時,_分,_累計日1,_累計時1,_累計分1,_累計日,_累計時,_累計分) :- _累計日2 is _日 + _累計日1,   _累計時2 is _時 + _累計時1, _累計分2 is _分 + _累計分1, 日・時・分の加算(0,0,0,_累計日2,_累計時2,_累計分2,_累計日,_累計時,_累計分). 負数が入力されたら終了します(_日,_時,_分) :- _日 < 0,!. 負数が入力されたら終了します(_日,_時,_分) :- _時 < 0,!. 負数が入力されたら終了します(_日,_時,_分) :- _分 < 0,!. 日・時・分の入力(_日,_時,_分) :- write('時間を 日 時 分 の順に空白で区切って入力してください : '), get_split_line([' '],[_日,_時,_分]), 診断(_日,_時,_分),!. 日・時・分の入力(_日,_時,_分) :- 日・時・分の入力(_日,_時,_分). 診断(_日,_時,_分) :- integer(_日), _時 < 24, _分 < 60,!. 診断(_日,_時,_分) :- write_formatted('日=%t,時=%t,分=%t には誤りの部分があります\n',[_日,_時,_分]), fail.