• 締切済み

プログラム開始から 2秒毎に 値を加算する

・プログラム開始から 2秒毎に 値を加算する ・増える値はdouble型の 1.0 とする ・呼び出した時の 経過時間に応じて 一気に加算する ・増える条件を変えた場合は、double型 の 変数に変える直前までの値を加算した後で、  その時間を記録して、そこから2秒毎に値を加算する ・増える条件変更は 10.0 と -5.0 とする  条件の変更はscanfを使って 入力する値が  0 の時は 1.0 増加状態に、  1 の時は 10.0 増加状態に  2 の時は -5.0 増加状態に  変更される  こういう条件でプログラムを作ってみました  以下のような感じです。  int a;  time_t timer;  long t1 , t2;  static bool time_sw[3];  double math = 0;  double math_s = 0;  double bai = 1.0;  t1 = ( long )time( &timer );  while(1){   printf("呼び出すものを教えてください\n");   scanf( "%d" , &a );   switch( a ){    case 0:     if( time_sw[0] == false ){      t2 = ( long )time( &timer );      math_s += bai * difftime( t2 , t1 ) / 2 ;      t1 = ( long )time( &timer );      bai = 1.0;      time_sw[0] = true;      time_sw[1] = false;      time_sw[2] = false;     }     else{      t2 = ( long )time( &timer );      math = bai * difftime( t2 , t1 ) / 2 ;     }     break;    case 1:     if( time_sw[1] == false ){      t2 = ( long )time( &timer );      math_s += bai * difftime( t2 , t1 ) / 2 ;      t1 = ( long )time( &timer );      bai = 10.0;      time_sw[0] = false;      time_sw[1] = true;      time_sw[2] = false; }     else{      t2 = ( long )time( &timer );      math = bai * difftime( t2 , t1 ) / 2 ;     }     break;    case 2:     if( time_sw[2] == false ){      t2 = ( long )time( &timer );      math_s += bai * difftime( t2 , t1 ) / 2 ;      t1 = ( long )time( &timer );      bai = -5.0;      time_sw[0] = false;      time_sw[1] = false;      time_sw[2] = true;     }     else{      t2 = ( long )time( &timer );      math = bai * difftime( t2 , t1 ) / 2 ;     }     break;    }    printf( "t1 = %d\nt2 = %d\n\n経過時間 %6.0f\n増加数 %6.0f\n\n" , t1 , t2 , difftime( t2 , t1 ) , math_s + math );  }  ここで質問なのですが、  ・このソースであってますでしょうか?  ・time関数で呼び出した値を 変数timer にいれてから long型のt1、t2にキャスト変換して入れていますが、long型ではなくもっと適切な型に入れることは可能でしょうか?   可能でしたら適切な型はなんでしょうか? 後、私は時間が余りないので時間内に回答がなければ返信が来週になります。 申し訳ありません。

みんなの回答

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.4

> ・プログラム開始から 2秒毎に 値を加算する SetTimer でいいのではと。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

> ・time関数で呼び出した値を 変数timer にいれてから long型のt1、t2にキャスト変換して入れていますが、long型ではなくもっと適切な型に入れることは可能でしょうか? なぜ、そこでマニュアルを読もうとしないんですか。 time_t time(time_t *t); double difftime(time_t time1, time_t time0); プログラムの内容は、はっきり言って何がしたいかわかりません。 「2秒毎に計算」にはなっていないように見えます。 また、説明が無いので  static bool time_sw[3]; の配列が何を表わしているのかわかりません。

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.2

No1の追加 同じ数字入力されるとめちゃくちゃな結果になるかな

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.1

全部ちゃんと見てませんが気が付いたとこだけ >・このソースであってますでしょうか? ・厳密な意味でいえば 2秒ごとに加算されてませんがそれでいいんでしょうか?  数字入力した時にまとめて処理するようになっているようです   例 )例えば何も入力しなくても 6秒たったら 3 にならなくてもいいんでしょうか? ・time_sw変数の初期化が無いので場合によって動きが異なる可能性がある >可能でしたら適切な型 使用上もキャストする必要性が無いような気がします 標準の time_t のままでいいんでは?

mana5867
質問者

お礼

時間がないのでこの場を借りてお礼を申しあげます 皆様ご指摘ありがとうございます <厳密な意味でいえば 2秒ごとに加算されてませんがそれでいいんでしょうか? そういえばそうですね 2秒毎に勝手に表示が変わっていただけるのでしたらそういうプログラムを組みたかったのですがそんなプログラム走らなかったので数字入力したときに結果が返ってくるようにしました ・time_sw変数の初期化が無いので場合によって動きが異なる可能性がある staticをつければ初期値はfalse になると思っていました ・なぜマニュアルを読まない マニュアルなんて始めて聞きました どこにあるのですか?

関連するQ&A