質問なんですが
Re:質問なんですが
以前GetNowCountを呼んだ時の値と、今の瞬間GetNowCountを呼んだ時の値をひくと、その間のミリ秒が得られる事を利用します。
ミリ秒とは1/1000秒のことです。
http://dixq.net/g/#s5
こちらで処理速度を一定にする方法を書いていますのでよければご覧下さい。
ミリ秒とは1/1000秒のことです。
http://dixq.net/g/#s5
こちらで処理速度を一定にする方法を書いていますのでよければご覧下さい。
Re:質問なんですが
私が作ったクラスです。
Main.cppがサンプルプログラムで、Timer.cppとTimer.hがクラスのソースです。
DxLibは使用していませんが、当然、DxLibとの併用も可能です。
まぁ、こんなのもあります…という感じで…(^_^;)
Windows.hを使用しない、標準関数のみのバージョンもありますので、もし希望があれば公開しますね。
Main.cppがサンプルプログラムで、Timer.cppとTimer.hがクラスのソースです。
DxLibは使用していませんが、当然、DxLibとの併用も可能です。
まぁ、こんなのもあります…という感じで…(^_^;)
Windows.hを使用しない、標準関数のみのバージョンもありますので、もし希望があれば公開しますね。
Re:質問なんですが
回答ありがとうございます。
管理人さんがおっしゃったミリ秒が1/1000秒ってことは
ミリ秒が1000で割れたときにcounter++して
そのcounterを画面に表示すれば時間(秒)を表示することが
できるということですか?<!--1
管理人さんがおっしゃったミリ秒が1/1000秒ってことは
ミリ秒が1000で割れたときにcounter++して
そのcounterを画面に表示すれば時間(秒)を表示することが
できるということですか?<!--1
制御文 ループ
お疲れ様です!!昨日はアドバイスありがとうございました!!本日も悩んでいます・・・・
/* 読み込んだ整数を逆から表示するプログラムですが、うまく動作しません。 1234と入力すると、4321と出力させたいのですが、4endと出てしまいます。 num=num%10;当たりが間違っているのでしょうか? */ #include <stdio.h> int main(void) { int num; do{ puts("整数入力"); scanf("%d",&num); }while(num<0); do{ num=num%10; printf("%d",num); num=num/10; }while(num>0); puts("end"); return 0; }
Re:制御文 ループ
だめですか・・・そんなにあっさり答えるのね・・・
num = 1234 % 10 -----> num は、4
num = 4 / 10 --------> num は、0
と動作します。
num = 1234 % 10 -----> num は、4
num = 4 / 10 --------> num は、0
と動作します。
Re:制御文 ループ
> "num"の値がどう変化しているか確認しましょう。 という回答に対して > まったくだめです・・・・・・ と返すのではなく、例えば、 > num=num/10; の後に printf("%d",num); を追加するだけでも、解決へ近づくはずです。
Re:制御文 ループ
みなさんアドバイスありがとうございます。
do{ printf("%d",num%10); num=num/10; }while(num>0);としたらできました!でもなんとなく処理がりかいできていないです。
Re:制御文 ループ
>でもなんとなく処理がりかいできていないです。
何となく理解できていないところは、どこの部分ですか?
どういう動作をさせたくて、その部分を書いていますか?
その部分で、どういう動作をすると思いますか?
それくらいの情報が書けるようになりましょう。
何となく理解できていないところは、どこの部分ですか?
どういう動作をさせたくて、その部分を書いていますか?
その部分で、どういう動作をすると思いますか?
それくらいの情報が書けるようになりましょう。
Re:制御文 ループ
> >でもなんとなく処理がりかいできていないです。
紙と鉛筆で書き出して行ったら処理内容がようやく理解できました。
>
> 何となく理解できていないところは、どこの部分ですか?
> どういう動作をさせたくて、その部分を書いていますか?
> その部分で、どういう動作をすると思いますか?
>
> それくらいの情報が書けるようになりましょう。
>
紙と鉛筆で書き出して行ったら処理内容がようやく理解できました。
>
> 何となく理解できていないところは、どこの部分ですか?
> どういう動作をさせたくて、その部分を書いていますか?
> その部分で、どういう動作をすると思いますか?
>
> それくらいの情報が書けるようになりましょう。
>
Re:制御文 ループ
おはようございます!!
/* 読み込まれた整数値以下である2のベキ乗の数を昇順に出力するというプログラム ですが、なにか微妙に動きが違います・・・。 19を読み込ませると、2 4 8 16と出力されるはずなのに、1 4 9 16と出てしまう。 2のベキ乗がミソかな~?? */ #include <stdio.h> int main(void) { int i,j,num; do{ puts("数値入力"); scanf("%d",&i); if(i<=0){ puts("負の数は入力不可"); } }while(i<=0); j=1; while(j<=i){ num=j*j; if(num<=i){ printf("%d ",num); } j++; } return 0; }
Re:制御文 ループ
・
・
・
・
iを入力後のロジック
・
・
・
iを入力後のロジック
num=1; while(num<=i){ //iは2以上の数で入力されて欲しいな。 num=2*num; //2のべき乗 printf("%d ",num); } return 0; }pow関数もイイっすけど、iが2以上を前提と出来るならコレで十分な気がします。
Re:制御文 ループ
どうしてうまくいかないかというと、
j=1;
while(j<=i){
num=j*j;
if(num<=i){
printf("%d ",num);
}
j++;
}
jには初め1が入ってます。それをj*jで二乗するのだから出力は1です。
その後、jに1追加して、2にしています。なので2が二乗されて出力は4。
同様にして 9, 16, 25, ... となって出力されてしまうのです。
他の方が回答されてるように、
num = j*j; が諸悪の根源であり、2の累乗なのだから、
2を重ねてかける必要があるので、
j = j*2; が正しい。 j++ は必要ありません。
思い通りに動かないときは、プログラムがどう動いているか一つずつ追って行くと
いいと思います。
あと、初めのうちはprintfを要所要所に入れて、変数がどう変わっているかを表示させると
バグが見つかりやすいです。
j=1;
while(j<=i){
num=j*j;
if(num<=i){
printf("%d ",num);
}
j++;
}
jには初め1が入ってます。それをj*jで二乗するのだから出力は1です。
その後、jに1追加して、2にしています。なので2が二乗されて出力は4。
同様にして 9, 16, 25, ... となって出力されてしまうのです。
他の方が回答されてるように、
num = j*j; が諸悪の根源であり、2の累乗なのだから、
2を重ねてかける必要があるので、
j = j*2; が正しい。 j++ は必要ありません。
思い通りに動かないときは、プログラムがどう動いているか一つずつ追って行くと
いいと思います。
あと、初めのうちはprintfを要所要所に入れて、変数がどう変わっているかを表示させると
バグが見つかりやすいです。
Re:制御文 ループ
やそさんへ
ななさんへ
あと、2 の 0 乗は 1 なので、それを含めるなら、 num=2; のところを、num=1; にしてもいい。
もうひとつ・・・違うプログラムでの質問なのだから、新規書き込みの方がいい気がします。
num=2; while(num<=i){ printf("%d ",num); num=2*num; }でしょう。
ななさんへ
if(i<=0){ puts("負の数は入力不可"); }0 は、負の数ではないのですが・・・言葉がちょっと変ですね。
あと、2 の 0 乗は 1 なので、それを含めるなら、 num=2; のところを、num=1; にしてもいい。
もうひとつ・・・違うプログラムでの質問なのだから、新規書き込みの方がいい気がします。
Re:制御文 ループ
int mypow(int num){ //2のべき乗を返す int ret=1; while(num--) ret*=2; return ret; } で int main(){ int i=0,num; while(1){ printf("正の数を入力せよ\n"); scanf("%d",num); if(num>0) break; } while(mypow(i)<=num) printf("2の%d乗は%d\n",i,mypow(i++); return 0;でいいかと
Re:制御文 ループ
Lbfuvabさん、お疲れ様です。
>19を読み込ませると、2 4 8 16と出力されるはずなのに、1 4 9 16と出てしまう。
と言う要件定義がありますので、Lbfuvabさんのロジックでは最初に呼ばれるmypow(i)ではi=0なので
結果が違ってしまいませんか?
出力結果は2^1(2の1乗)から始まるようです。
>19を読み込ませると、2 4 8 16と出力されるはずなのに、1 4 9 16と出てしまう。
と言う要件定義がありますので、Lbfuvabさんのロジックでは最初に呼ばれるmypow(i)ではi=0なので
結果が違ってしまいませんか?
出力結果は2^1(2の1乗)から始まるようです。
Re:制御文 ループ
Hermitさん お疲れ様です。
1も立派な正の数です。
while判定でいきなりはじかれて、1回もprintf("%d ",num);
を実行しないで終わります。
それはちょっとさびしい感じです。
私の提示したロジックのコメントでは
//iは2以上の数で入力されて欲しいな。
と書いていますが、実際には1の時も考慮しています。
(1じゃ余りに味気ないからコメントしただけですばい)
で、0は入力段階で弾かれますから考慮外。
まあ、確かに文言は違和感を感じますが^^;
要件定義にも
>19を読み込ませると、2 4 8 16と出力されるはずなのに、1 4 9 16と出てしまう。
と有りますのでね。
>もうひとつ・・・違うプログラムでの質問なのだから、新規書き込みの方がいい気がします。
わたしも同感です。途中から「あれ?」って思いましたから。
num=2; while(num<=i){ printf("%d ",num); num=2*num; }ですが、i=1だった場合どうでしょう?
1も立派な正の数です。
while判定でいきなりはじかれて、1回もprintf("%d ",num);
を実行しないで終わります。
それはちょっとさびしい感じです。
私の提示したロジックのコメントでは
//iは2以上の数で入力されて欲しいな。
と書いていますが、実際には1の時も考慮しています。
(1じゃ余りに味気ないからコメントしただけですばい)
で、0は入力段階で弾かれますから考慮外。
まあ、確かに文言は違和感を感じますが^^;
要件定義にも
>19を読み込ませると、2 4 8 16と出力されるはずなのに、1 4 9 16と出てしまう。
と有りますのでね。
>もうひとつ・・・違うプログラムでの質問なのだから、新規書き込みの方がいい気がします。
わたしも同感です。途中から「あれ?」って思いましたから。
Re:制御文 ループ
>printf("2の%d乗は%d\n",i,mypow(i++);
関数内の引数の評価の順番は不定だったと思うので、この一行でiが++されるタイミングは環境依存に
なるのではないでしょうか。
後、2のべき乗計算ならループを使わず、シフト演算子を使用したほうが高速です。
関数内の引数の評価の順番は不定だったと思うので、この一行でiが++されるタイミングは環境依存に
なるのではないでしょうか。
後、2のべき乗計算ならループを使わず、シフト演算子を使用したほうが高速です。
int mypow(int num) { return num == 0 ? 1 : 2 << (num - 1); }
Re:制御文 ループ
やそさんへ
>19を読み込ませると、2 4 8 16と出力されるはずなのに、1 4 9 16と出てしまう。
とあるのに、32 まで出てくるのはいいのでしょうか?
>19を読み込ませると、2 4 8 16と出力されるはずなのに、1 4 9 16と出てしまう。
とあるのに、32 まで出てくるのはいいのでしょうか?
Re:制御文 ループ
>int mypow(int num) >{ > return num == 0 ? 1 : 2 << (num - 1); >} すごくへんな書き方をしてしまいました。 int mypow(int num) { return 1 << num; }
Re:制御文 ループ
新規書き込みを行おうと思いましたが、短いプログラムなので同じところに投稿(質問)させて頂きます。
ご了承下さい。
ご了承下さい。
/* 1234567890を繰り返し表示するプログラムを作成。なお、表示 する数字は読み込まれた数値の個数とする。 例)整数を入力して下さい:25 1234567890123456789012345 と実行結果になるそうです。 私のプログラムを実行すると 整数を入力して下さい:25 →無限ループ状態・・・・になってしまいます。。 if文のところがおかしいとは分かっています。アドバイス よろしくお願いします。 */ #include <stdio.h> int main(void) { int i,num; scanf("%d",&num); i=0; while(i<num){ printf("%d",i); if(!(i%10)){ i=0; } i++; } return 0; }
Re:制御文 ループ
printfで表示してるのは変数iの値でしょ?
たぶんこれだと0から9を表示しますね。
iはnum(25)を超えることは永遠にありません。
if文のところでiが10になるたびに0を代入しているからいつまでたっても終わらない。
表示するのはiではなく、iを10で割った余りです。
ほとんどできてるんだから、ここで質問するのはもったいないです。
たぶんこれだと0から9を表示しますね。
iはnum(25)を超えることは永遠にありません。
if文のところでiが10になるたびに0を代入しているからいつまでたっても終わらない。
表示するのはiではなく、iを10で割った余りです。
ほとんどできてるんだから、ここで質問するのはもったいないです。