変数を10等分に分割する方法と逆順の10刻みに変数を計算する方法
- プログラムで変数を10等分に分割する方法や逆順の10刻みに変数を計算する方法について説明します。
- 変数84の数字を10等分に分割するには、ループ処理を使用して変数を10で割った余りを取得し、それによって範囲を指定します。
- 変数を逆順の10刻みで計算する場合は、ループ処理を使用して変数を10で割った余りを反転させて利用します。
- ベストアンサー
10刻みにしたい
こんにちは、プログラムをただいま勉強中の者です>< お忙しい中見ていただきありがとうございます。 さて、質問の10刻みにしたい の事なのですが 具体的にいうなれば 変数84の数字を10等分にわける for(i=0;i<10;i++){実行} for(i=10;i<20;i++){実行} ・・・ for(i=80;i<84;i++){実行} 予め84と数字が決まっていればこのような式で良いと思うのですが 実際にはこの84という数字は変数であり 20にもなったり、34になったりします。 この場合どうしたらよいのでしょうか? また、i-- の時にはどうしたらよいのでしょうか? つまり、変数を逆から計算する場合どのように10刻みにしたらよいのでしょうか? たとえば84ならば for(i=84;i<=0;i--){実行} で指定できると思うのですが どのようにしたら10刻みにできるのかわかりません。 説明がむづかしくてどのようにしたら良いのかわかりませんが ご教授お願い致します。
- mario_
- お礼率42% (172/405)
- C・C++・C#
- 回答数3
- ありがとう数4
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
int i, j; for( i = 0; i < x; i += 10 ) { for( j = 0; (j < 10) && ((i + j) < x); j++) { 処理(i+jを使用する) } } とか
その他の回答 (2)
- chie65535
- ベストアンサー率43% (8523/19372)
#include <stdio.h> int main(void) { int n,s; int i; scanf("%d",&n); s = 1; while(s <= n) { for (i = s;(i < s + 10) && (i <= n);i++) { printf("%d ",i); } printf("\n"); s += 10; } return 0; }
- SilverThaw
- ベストアンサー率32% (260/806)
>縦に一列 1~19 が表示されるだけになりました>< このプログラムはご自分で作成されたものですよね? であれば、aaa()の引数の意味は理解されていますか? 見やすいように整形します。 aaa( "test", // string name (i+j), // int count a, // string text 10, // int x (j+i)*25, // int y Red // color FontColor ); 横軸のxが10固定ですから、当然連結して下に伸びていきますね。 xとyがiとjによりどのような値になるのかよく考えてみてください。
お礼
ありがとうございます>< ご指摘の通りXが固定でした^^; for(i=0;i<x;i+=10) { for(j=1;(j<11)&&((i+j-1)<x);j++) {aaa("test",(i+j),j,i*3,(j)*25,Red); a++; } } このようにしたら直りました^^ i+j-1 や j<11 が肝なのかなと思いました。 どうもありがとうございます><
関連するQ&A
- このプログラムの結果は正しいのでしょうか?
下記のプログラムはregister変数へのアクセスが高速であることを確認するためのプログラムです #include <stdio.h> #include <time.h> int i; /* これはグローバル変数なので、 register変数には変換されない */ int main(void) { register int j; int k; clock_t start, finish; start = clock(); for(k=0; k<100; k++) for(i=0; i<32000; i++); finish = clock(); printf("レジスタを使わないループの刻み数: %ld \n", finish - start); start = clock(); for(k=0; k<100; k++) for(j=0; j<32000; j++); finish = clock(); printf("レジスタを使ったループの刻み数: %ld \n", finish - start); return 0; } 【質問】 このプログラムを実行すると、 レジスタを使わないループの刻み数: 15 レジスタを使ったループの刻み数: 0 と表示されます。 この結果はregister変数へのアクセスが高速であることの証明になるのでしょうか? また「刻み数」とは何のことですか?教えて頂けないでしょうか?
- ベストアンサー
- C・C++・C#
- フィックの第二法則の刻み時間(フォートラン)
第二法則について数値解析を行い、 フォートランによって dt=1.0 dx=1e-4 d=2e-12 a=d*dt/(dx)**2 do 300 j=0,3600 c(j,0)=0.0 c(j,20)=2.0 do 400 i=1,19 c(j+1,i)=c(j,i)+a*(c(j,i+1)-2.0*c(j,i)+c(j,i-1)) 400 continue 300 continue として一秒ごとに計算し、一時間後までの各時間、各位置の濃度を求めています。 (jは時間、iは位置を表しています。) このとき、刻み時間t=1として計算しているのですが、これを0.1秒で計算したいとき、 do 300 j=0,3600 を do 300 j=0,3600,0.1 c(j+1,i) は c(j+0.1,i) としなくてはいけないのでしょうか? それとも1のままでよいのでしょうか。 どなたか、どうか教えてください。 ちなみに、上のようにかえてもプログラムが通らないことはわかっています。 聞きたいのは、「刻み時間を変えると濃度計算の中身と計算のステップも変えなくてはいけないのか」ということです。 わかりにくくて申し訳ありません。 どうかお願い致します。
- ベストアンサー
- 物理学
- 教えて下さい。for文内での変数宣言について
Javaのプログラムで困っています。 for文内でfor分だけ変数を宣言したいのですが、 その際変数名に数字(ナンバリング)を付与した形にしたいと考えています。 例) String Test1 String Test2 : : 上記の様な場合、for文をどの様に作成したらいいですか? num = 5; for(int i = 0; i < num; i++){ String Test = null; } ⇒このままだと変数Testが1つしか出来ない・・・ 変数の後にナンバリングしたいのですが上手くいきません。 numの数はユーザの指定で毎回変更されるため、 for文でその数だけ変数を作成したいと考えています。 どなたかご教授宜しくお願い致します。
- ベストアンサー
- Java
- java for文、if文を使っての三角形
例:1 23 456 78910 ・・・・・・のようにひょうじさせるプログラムを作成するのに、for文とIf文を使っての三角形を 作成したいのですが、If文の条件式が分からないのとどうしたら、上記のようなプログラムが 出来るのか教えてください。お願いします。 public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ // 行に表示させる個数を表現するための変数がないため今回、新たに変数を用意する。 int a = 1; //行の終わりを改行して1増やすための変数がないため今回、新たに変数を用意する。 int b = 1; // 1~100までの数字を用意する。 for (int i = 1; i <= 100; i++) { //変数iをSystem.out.printを使って変数iをコンソールの中に出力させる。 System.out.print(i); //System.out.println("")を使って改行する。 System.out.println(" "); //変数iに1増加して数字を順番にする。 i++; if(a <= i){ System.out.print(a);
- ベストアンサー
- その他(学問・教育)
- 3つほどプログラムをおしえてください。
(1)100までの整数をいくつか入力し、10刻みでの個数を表示し、負の数が入力されると整数の入力を終わるプログラムです。各範囲の個数は配列に格納する。 実行結果 65 30 21 95 5 -1 0--- 9 : 1 10--- 19 : 0 20--- 29 : 1 30--- 39 : 1 40--- 49 : 0 50--- 59 : 0 60--- 69 : 1 70--- 79 : 0 80--- 89 : 0 90---100 : 1 (2)数字の文字列を入力し、その文字列に含まれる各数字(文字)'0','1',~'9'の個数を表示するプログラムの作成。 実行結果 1231234567 0: 0 1: 2 2: 2 3: 2 4: 1 5: 1 6: 1 7: 1 8: 0 9: 0 (3) 変数xは、0~1までの0.01刻みの値(101個)を取るとする。このとき、2次関数 f(x)=3x^2+2x+1の値が2.0<f(x)<3.0となるxの値をの個数を求めるプログラムの作成。ただし、xを引数としf(x)の値を返す関数を作成して、それを使用する。 実行結果 number=21 やってるうちにわけがわからなくなってしまいます。どなたかよろしくおねがいします。
- ベストアンサー
- C・C++・C#
- リアルタイムでForループを表示
Excel2010でVBAを使っています。 一つのループの計算のために10秒くらいかかるForループを10000回繰り返すプログラムを作った場合、 計算が終了するまでに30分程度時間がかかります。 計算途中にどこまで計算が進んだか分かるようにするため ダイアログにリアルタイムで変数iを表示できるようなプログラムを書きたいのですが どのようにすれば良いですか? Matlabだと「;」をつけないといった方法があるのですが VBAでやり方を教えてください。
- ベストアンサー
- Visual Basic
- JavaScriptの解説サイトでわからないところがあったので教えてください1
ただいまJavaScriptの基本中の基本の段階を、 解説サイトを見ながら勉強しています。 その中でわからないことがあったので教えてください。 以下、サイト文の引用 ************************************************ 例えば「0から10までの偶数の和を、変数a求めたい」場合。 a=0; for(i=0; i<11; i++) { if(i%2==1)continue; a+=i; } alert(a); と記述します。 まず変数aを0で初期化します。 続いてforループを開始します。 最初に変数iを0で初期化します。 次にループの条件判定を行い、iが11未満ならばループを続行します。 さらにループ内でif文の条件分岐をして、iを2で割った余りが0以外の場合はcontinue命令が実行され、 ループの先頭に戻ります。 もしiを2で割った余りが0の場合は、a+=i;の処理が実行されて変数aに変数iの値が加算されます。 ************************************************ 上のif文について、解説では 「iを2で割った余りが0以外の場合はcontinue命令が実行」 「iを2で割った余りが0の場合は、a+=i;の処理が実行されて変数aに変数iの値が加算」 となっていますが、この意味がよくわかりません。 i%2==1 というのは「iを2で割った余りが1と等しい」なのに、 なぜ0以外の場合、0の場合という"0"で判断しているのでしょうか? それと、 「iを2で割った余りが1の場合、 continue処理をして、変数aはa+iの値となる」 ・・・というこちらの勝手な解釈のどこが間違っていますか? 初心者なのでくだらない質問かもしれませんがよろしくお願いします。
- ベストアンサー
- JavaScript
- C言語の演習問題(C言語)について質問です。
以下のプログラムは数字と演算子を配列に入れているプログラムです。 このプログラムを式を入れて四則演算のみで計算させるプログラムを作成してるのですがご指導お願いできますか? 例:8/3*3enterkey 答え:8 変数の型は変更しないで行うとの指示のことなので、変数は増やしても構いませんが、変えないでお願いします。 http://codepad.org/Iks8CtjT
- ベストアンサー
- C・C++・C#
- エクセルVBA:変数の疑問?
vba初心者です。 ちょっと疑問に思ったので質問します。 変数1 = XXXXX 変数2 = XXXXX 変数3 = XXXXX 変数4 = XXXXX 変数5 = XXXXX For i = 1 To 5 XXXX.YXXXX("変数" & i).xxxxx Next i 以上の様に"変数名 + 数字"の様な型を定義した場合 この、数字部分を生かしてループ処理などは可能なのでしょうか?
- ベストアンサー
- オフィス系ソフト
- C言語の勉強をしていて、for文と戻り値を使った階乗について分からずに
C言語の勉強をしていて、for文と戻り値を使った階乗について分からずに困っています。 以下の点に留意して、階乗を計算するプログラムを作成する。 階乗とは、数字を1つづつ減らしながら掛け合わせたものです。つまり 5の階乗:5×4×3×2×1=120 3の階乗:3×2×1=6 となります。 main内 1)整数型の変数kazu、kekkaを宣言する。 2)“階乗を計算します。”を表示する。 3)実行例と同様の表示になるように、“整数を入力してください”を表示し、入力された値を、変数kazuに読み込む。 4)作成する関数名は、kaijyoとし、kazuを引数とし、戻り値をkekka に代入する。 6)“○の階乗は ○です。”と表示する。 関数kaijyo内 1)引数を変数名xとする。 2)整数型の変数i、valを宣言する。 3)計算結果をvalに入れていくために、valを初期化する(下記注意参照)。 4)iをカウンターとするfor文と複合代入演算子を使って階乗を計算する。 5)valの内容が戻り値となるようにする。 注意:階乗を計算するために、for文の中で複合代入演算子を使って階乗を計算します。しかし、for文に入る前のvalの初期化には注意が必要です。0に何を何回かけても0だと言うことを思い出してください。 という問題です。 それで私は下の通りに作りました。 #include <stdio.h> int kaijyo(int x); void main(void) { int kazu,kekka,kaijyo,sum; printf("階乗を計算します。\n"); printf("整数を入力してください"); scanf("%d",&kazu); kekka=kaijyo(kazu); printf("%dの階乗は%dです。",kazu,kekka); } int kaijyo(int x) { int i,val; val=1; x=1; for(i=1;i<=val;i++){ x=x*i; } return val; } しかし、メイクして実行してもどの階乗でも256になってしまいます。 どこが間違っているのか分からずに困っています。 よかったら教えてください。 よろしくお願いします。 カテゴリを間違ってしまっていたらすみません。
- ベストアンサー
- その他(学問・教育)
お礼
回答ありがとうございます>< しかがしながら、思うような結果がでませんでした。 縦に一列 1~19 が表示されるだけになりました>< 1~10 11~20 21~20 と並べたいのですが、どのようにしたら良いのでしょうか。 また、参考となるサイトがありましたら教えてくださいませ>< #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Blue #property indicator_color2 Gold extern int x =30; extern int FontSize =20 ; extern color FontColor=PaleGoldenrod; extern int LocationX=10; extern int LocationY=10; extern int Corner =0; double B0[]; double B1[]; int init() { return(0); } int deinit(){ ObjectsDeleteAll(); return(0);} //+------------------------------------------------------------------+ int start() {int a=1; string aa; int i,j, counted_bars = IndicatorCounted(); int limit = Bars - counted_bars; for(i=1;i<x;i+=10) { for(j=0;(j<10)&&((i+j)<x);j++) {aaa("test",(i+j),a,10,(j+i)*25,Red); a++; } } //---- return(0); } //+------------------------------------------------------------------+ void aaa (string name,int count ,string text ,int x ,int y,color FontColor) {ObjectCreate(name+count, OBJ_LABEL, 0, 0, 0); ObjectSetText(name+count, text, FontSize, "HGP創英角ゴシックUB", FontColor); ObjectSet(name+count, OBJPROP_XDISTANCE, LocationX+x); ObjectSet(name+count, OBJPROP_YDISTANCE, LocationY+y); ObjectSet(name+count, OBJPROP_CORNER, Corner); }